реклама на сайте
подробности

 
 
> Как контролировать использование стека в IAR AVR?, Без отладчика
Itch
сообщение May 13 2008, 08:55
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 358
Регистрация: 27-06-06
Из: Новосибирск
Пользователь №: 18 410



Столкнулся с проблемой глюков в программе из-за нехватки стека. Глюк такого рода неочевидный, и отловить его достаточно трудно. Возникла идея в каждом из прерываний помещать проверочный код, который будет смотреть процент использования стека и зажигать светодиод, например. Но непонятно, как его контролировать, т.к. в IAR два стека, и что где лежит тоже непонятно. Подскажите, откуда можно выдернуть пределы стеков и как читать указатели?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Непомнящий Евген...
сообщение May 13 2008, 09:29
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Простейший вариант - смотрите в 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)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 03:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.02186 секунд с 7
ELECTRONIX ©2004-2016