Тема: Бібліотека C на AVR під gcc-avr
Доброго часу всім. Запитую, можливо комусь в майбутньому така тема може бути теж цкава.
Я пишу на звичайному C, хоча я, загалом, розбалуваний всілякими C++ на десктопному ПЗ (в Qt наприклад). Тому хотілось би щось типу класів, чи хоча б простору імен для функцій, щоб бібліотека назвами своїх функцій не заважала іншій. Звичайно ж можна і просто робити назви функцій типу LibraryName_FuncName(), але це якось виглядає кострубато, зате працює без ніяких проблем . Гуглячи дане питання наткнувся на StackO… кхм… на одному відомому сайті на досить гарне рішення. Використання статичної структури зі статичними посиланнями на функції.
Я подумав. А чи не зберігається така структура у SRAM і чи не буде МК затрачувати час на виклик функції через посилання яке лежить в SRAM. Я написав простий тестовий main.c
Згенерувавши файл .asm через avr-objdump я отримав магію:
"Перемога" подумалось мені. Себто, функція викликається напряму за своєю адресою. Я зрадів, і пішов писати бібліотеку.
Написав я за звичною структурою lib.c, lib.h і підключаю тільки lib.h.
lib.h
lib.c
main.c
І отримав неприємну штуковину:
Тепер за адресою структури в SRAM (ну там загалом масив адрес, але то вже доточності) завантажується адреса функції до регістру двобайтового Z, а потім виконується icall, а це +2 такти на виклик однієї функції. Неприємна новина. Бачу такий вихід: оголосити назви функцій в lib.h кострубатого вигляду lib_func1, а у самій структурі назви посилань на них залишити як є, гарними, але мені чомусь таке видається кострубатим.
Глянув ASM та HEX редактором, то, здається, до SRAM структура все ж записується, хоч і в подальшому не використовується, тому, мабуть, доведеться відмовитись від такого рішення .
Запитую, щоб отримати поради щодо краса коду, бо те як його зробити працездатним і з економією ресурсів, я знаю , але тут виходить або краса коду, або оптимізація. Авжеж виграє оптимізація, але як при цьому код хоч трохи зробити гарнішим. Дякую за увагу.
Як можна домогтися краси коду бібліотеки C не жертвуючи ресурсами МК?