Напоминаю как можно установить свой размер для кучи в sdcc.
(если не устраивает размер по умолчанию 1 KB)
- скопировать файл heap.s себе в папку проекта
- в файле heap.s прописать свой желаемый размер кучи
- скомпилить и слинковать этот файл со своей программой
- не забыть вызвать _sdcc_heap_init(), для инициализации кучи
Как проверить, что размер кучи поменялся.
1. проверить в map файле, что размер сегмента _HEAP именно тот, который вы установили в файле heap.s
2. выполнить такой код и проверить что результат тот же, что и в п.2
Код:
extern char _sdcc_heap_start;
extern char _sdcc_heap_end;
...
unsigned int heap_size = &_sdcc_heap_end - &_sdcc_heap_start;
-----------------------
Оригинальный ответ:
The answer is that, on Z80 systems, heap size is hard-coded to 1kB.
Maarten Brock answered this on the sdcc-user mailing list.
You have to create the heap yourself if the standard 1kB is not enough.
Copy heap.s into your project dir and modify it to create your preferred size. Then assemble it and link with your project.
Unlike the mcs51 heap which is defined in _heap.c this is not documented for Z80 in the manual.
Feel free to request a documentation update or merge of _heap.c and heap.s in the tracker system.




Ответить с цитированием