Записная книжка разработчика

Мои проекты

Конфигурация памяти в IAR

| Comments

Проект, написанный на С++ в IAR под микроконтролер LPC2368 (ядро ARM7TDMI), не заработал после перекомпиляции под LPC1768 (ядро Cortex M3). Предпринятые исследования показали, что программа падает на совершенно невинной строке:

AddControl(new usBmpButton(110, 9, 17, 18, 10, BTN_FORWARD, MSG_BTN_FORWARD));

то есть, как нетрудно догадаться, именно на операции выделения памяти new.

Дальнейшее изучение проблемы привело к файлам конфигурации, хранящимся в папке config проекта. В файле LPC1768_Flash.icf есть строка:

define symbol __ICFEDIT_size_heap__     = 0x400;

то есть на "кучу" (динамически распределяемую память) отводится всего лишь 1 кбайт памяти! В старом проекте в аналогичном файле было указано значение 0x6000, т.е. 24 кбайта! После изменения значения программа заработала.

Следует отметить также, что необдуманное применение динамически распределяемой памяти в встраиваемых системах чревато фрагментацией памяти и, как следствие, прекращенем работы программы. Но это уже другая тема.