Куча (heap) описана в руководстве "IAR C/C++ Development Guide for ARM" [4], глава "Dynamic memory on the heap". Этот документ (Technical Note 28545 [1]) описывает, как собрать статистику по использованию кучи в приложении. Т. е. как отследить объем памяти, используемый malloc/new и подобными функциями, обслуживающими динамическую память.
В среде разработки IAR Embedded Workbench for ARM версии 6.60 и более свежей Вы можете собрать статистику использования кучи с помощью вызова функции __iar_dlmallinfo(). Если Вы хотите просто вывести эту статистику в stderr, то вызовите функцию __iar_dlmalloc_stats(). Пример вывода __iar_dlmalloc_stats():
max system bytes = 2048
system bytes = 2048
in use bytes = 16
Функции __iar_dlmallinfo и __iar_dlmalloc_stats декларированы и определены в файлах arm\src\lib\dlib\heap\dlmalloc.c и arm\src\lib\dlib\heap\dlmalloc_stat.c. Для IAR Embedded Workbench for ARM версий до 8.10 эти файлы можно найти в папке arm\src\lib.
Чтобы вызвать эти функции, используйте заголовочный файл mallocstats.h, который можно загрузить по ссылке [2]. В загруженном zip-архиве также находится код примера main_test.c, показывающий, как использовать вызовы функции.
В статье [3] описывается, как определить оптимальный размер для кучи с помощью функций bymalloc_max_footprint, malloc_max_footprint и mallinfo.
[Устаревшие версии IAR]
Для IAR Embedded Workbench for ARM, у которых версии до 6.60, Вы должны подключить к проекту модуль arm\src\lib\dlmalloc.c, и установить определения NO_MALLINFO и NO_MALLOC_STATS в значение 0. Имейте в виду, что Вы должны сделать копию файла dlmalloc.c в каталог проекта, и затем подключать и модифицировать эту копию. Также имейте в виду, что в проекте C++ файл dlmalloc.c должен компилироваться как файл языка C.
Примечание: в версии IAR 4.41 файл dlmalloc.c отсутствует.
[Ссылки]
1. IAR DLIB Library heap usage statistics site:iar.com. 2. mallocstats_test.zip. 3. Проектирование стека и кучи в IAR. 4. IAR C/C++ Development Guide for ARM site:iar.com. |