Такого пути нет.Если вы посмотрите на скрипт компоновщика ЦПУ Zoul (CC2538), вы увидите следующие соответствующие определения:
.bss :
{
_bss = .;
*(.bss*)
*(COMMON)
_ebss = .;
} > FRSRAM
...
_heap = .;
_eheap = ORIGIN(FRSRAM) + LENGTH(FRSRAM);
Итак, куча идет после сегмента .bss
и потенциальнопродолжается до конца памяти.Лучшее, что вы можете сделать, - это использовать некоторые из методов сокращения использования памяти Contiki , чтобы уменьшить размер сегментов .data
и .bss
и таким образом получить больше места для кучи.
Более того, malloc()
не используется операционной системой Contiki и не рекомендуется для пользовательских приложений.Рекомендуется переписать код без динамического выделения памяти или искать другое оборудование, особенно предпочтительно с MPU.
Есть веская причина для того, чтобы избегать malloc и друзей.Области кучи и стека разделяют одно и то же пространство памяти, и когда одна растет вниз, другая растет вверх (они «встречаются посередине»).Когда они начинают перекрываться, начинают происходить плохие вещи.Злоупотребление как можно меньшим количеством памяти - это повод для неприятностей - позже стек может вырасти и повредить память, выделенную из памяти.