Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как контролировать использование стека в IAR AVR?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Itch
Столкнулся с проблемой глюков в программе из-за нехватки стека. Глюк такого рода неочевидный, и отловить его достаточно трудно. Возникла идея в каждом из прерываний помещать проверочный код, который будет смотреть процент использования стека и зажигать светодиод, например. Но непонятно, как его контролировать, т.к. в IAR два стека, и что где лежит тоже непонятно. Подскажите, откуда можно выдернуть пределы стеков и как читать указатели?
Непомнящий Евгений
Простейший вариант - смотрите в map, где у вас вершина каждого стека. И где-нибудь в __low_level_init() заполняете память с обоими стеками 0xFF.
Потом в любом месте программы смотрите, где у вас "верхний" FF в каждом стеке - это и будет максимально используемый объем стека.

Примерно так (границы свои поставьте):
Код
extern "C" {
char __low_level_init()
{
    /* для определения реально используемого объема стека */
    for(byte *p = (byte*)0x250; p>(byte*)0x104; --p)
        *p = 0xff;
    for(byte *p = (byte*)0x300; p>(byte*)0x254; --p)
        *p = 0xff;
    
    return 1;
}
}


Кстати, грубую оценку (обычно с большим запасом) ИАР дает в map-файле (call-graph)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.