32bit_me (32bit_me) wrote,
32bit_me
32bit_me

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

Originally published at 32 bit.me. You can comment here or there.

Проект, написанный на С++ в 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__     = 0×400;

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

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

Tags: arm, arm7, c++, cortex m3, микроконтроллеры, программирование
Subscribe

  • Flang - новый компилятор Fortran

    Flang - новый компилятор Fortran на основе LLVM. Интересно, что Fortran жив до сих пор, а ведь он был впервые представлен в 1957 году. Последняя…

  • GitHub Desktop

    GitHub Desktop - очень прикольная штука. Ставите и забываете cli и git bash (если вы под виндой). Хотя и в cli нет ничего сложного, но GitHub Desktop…

  • PCI SCSI-1 RAID контроллер

    RAID контроллер в несколько разобранном состоянии. Возможно, что даже рабочий, но как это проверить? Картинки кликабельны 1. 2. 3. 4.…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 4 comments