дефайны для управления памятью при сборке проекта. всё жизнь жёстко прописывал адреса переменных в деф-файлах, и начальные адреса области памяти для библиотек (при этом порядок подключения библиотек важен, т.к дефайны записывались "цепочкой"/
захотелось
странного красивого, чтобы библиотеки можно было подключать где и как угодно, без ручных правок адресов.
При этом задумка была, чтобы переменная "OS_memory_END" была как бы "динамической", переопределяемой в каждой библиотеке
примерно так:
в главном файле, инклюды:
...
#include "system_def.inc"
#include "i2c_lib.inc"
#include "LCD_lib.inc"
#include "FSK_lib.inc"
и т.п.
...
(это для файла "system_def.inc")
#define OS_memory_end 0x2500
(это для файла "i2c_lib.inc")
#define i2c_memory OS_memory_end+1
...
... здесь дефайны адресов переменных в инкрементальном формате (+1 от предыдущего адреса)
...
#define i2c_memory_end ....
#undef OS_memory_end
#define OS_memory_end i2c_memory_end
(это для файла "LCD_lib.inc")
#define LCD_memory OS_memory_end+1
...
... здесь дефайны адресов переменных в инкрементальном формате (+1 от предыдущего адреса)
...
#define LCD_memory_end ....
#undef OS_memory_end
#define OS_memory_end LCD_memory_end
и.т.д, до бесконечности :)
однако при попытке реализации такого механизма - AVR-ассемблер при сборке проекта в 7-й студии вываливается с ошибкой ("задача завершена" и т.п....)
причём, если заменяю в последних строчках (#define OS_memory_end) определение явным ислом, а не ссылкой на предыдущее определение, то всё компилируется нормально :((
чудеса, да и только.
Надеюсь не очень сумбурно изложил :))
кто-нибудь знает как красиво реализовать механизм распределения памяти между библиотеками в ассемблерном проекте??