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

 
 
> IAR CSTACK RSTACK - измерение глубины стека
Mty
сообщение Apr 17 2016, 11:59
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 19-12-04
Из: Москва
Пользователь №: 1 560



Привет!

По идеям документа с сайта IAR
https://www.iar.com/support/resources/artic...em-reliability/
хочу напрямую смотреть использование стека в процессе выполнения программы

Идея в том, чтобы через таймерное прерывание периодически замерять указатель на автоматическую переменную, и мониторить сколько стека в использовании.
С data stack (CSTACK) все вроде должно получиться без проблем, а вот как получить указатель на текущий RSTACK?

C data stack идея такова -
Код
char *highStack, *lowStack;
int main(int argc, char *argv[])
{
highStack = (char *)&argc;
// ...
printf("Current stack usage: %d\n", highStack - lowStack);
}

void sampling_timer_interrupt_handler(void)
{
char* currentStack;
int a;
currentStack = (char *)&a;
if (currentStack < lowStack) lowStack = currentStack;
}


Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Mty
сообщение Apr 19 2016, 07:22
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 151
Регистрация: 19-12-04
Из: Москва
Пользователь №: 1 560



Цитата(aiwa @ Apr 18 2016, 15:33) *
Так программно доступный регистр SP и есть указатель на RSTACK.


Спасибо, все оказывается просто sm.gif


Цитата(zombi @ Apr 19 2016, 02:37) *
Вам правильно посоветовали использовать предварительное заполнение области стека константой с дальнейшим анализом содержимого оной.
Этот метод даст максимально точный результат. Хотя и не 100%.
А насколько точный результат глубины заполнения стека Вы хотите получить?


Большой точности не надо, просто приблизительная оценка на реальной работе системы.

Способ с заполнением хорош, только вот примера на С рабочего нет. В примере по ссылке, про который я писал имена сегментов выставлены правильные, в map файле они так и называются CSTACK и RSTACK но пример нерабочий.

Код
char __low_level_init()
{
    #pragma segment="CSTACK"
    char* p = (char*)__segment_begin("CSTACK");
    size_t len = (size_t)__segment_end("CSTACK") - (size_t)__segment_begin("CSTACK");
    
    while( len-- )
        *p++ = 'C';
    
    p = (char*)__segment_begin("RSTACK");
    len = (size_t)__segment_end("RSTACK") - (size_t)__segment_begin("RSTACK");
    
    while( len-- )
        *p++ = 'R';

    return 1;
}
Go to the top of the page
 
+Quote Post
zltigo
сообщение Apr 19 2016, 07:33
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Mty @ Apr 19 2016, 10:22) *
CODE
return 1;

Смотреть на "1". И думать что происходит при возврате 1 функцией __low_level_init

P.S.
Mty вышенаписаное читать не надо. Это только для тех, кому интересно, как это может не работать.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Mty   IAR CSTACK RSTACK - измерение глубины стека   Apr 17 2016, 11:59
- - zltigo   QUOTE (Mty @ Apr 17 2016, 14:59) Идея в т...   Apr 17 2016, 16:02
|- - IgorKossak   Цитата(zltigo @ Apr 17 2016, 19:02) Для к...   Apr 17 2016, 16:56
|- - Mty   Цитата(zltigo @ Apr 17 2016, 19:02) Для к...   Apr 18 2016, 11:05
|- - zltigo   QUOTE (Mty @ Apr 18 2016, 14:05) А есть п...   Apr 18 2016, 11:21
- - kolobok0   Цитата(Mty @ Apr 17 2016, 14:59) ...Идея ...   Apr 17 2016, 17:09
- - aiwa   Цитата(Mty @ Apr 17 2016, 14:59) С data s...   Apr 18 2016, 12:33
- - Mty   Друзья, если у кого то есть рабочий код на С по за...   Apr 18 2016, 12:37
|- - zltigo   QUOTE (Mty @ Apr 18 2016, 15:37) Пока наш...   Apr 18 2016, 14:09
- - AleksBak   А почему у них там (у IAR) стек расположен не ввер...   Apr 18 2016, 17:56
|- - zltigo   QUOTE (AleksBak @ Apr 18 2016, 20:56) А п...   Apr 18 2016, 17:59
|- - AleksBak   Цитата(zltigo @ Apr 18 2016, 21:59) А пот...   Apr 18 2016, 18:17
- - zombi   Цитата(Mty @ Apr 17 2016, 14:59) хочу нап...   Apr 18 2016, 23:37
|- - aiwa   Осторожнее надо быть с RSTACKом, потому что такой ...   Apr 19 2016, 08:30
- - Mty   Цитата(zltigo @ Apr 19 2016, 10:33) Смотр...   Apr 19 2016, 07:56
|- - zltigo   QUOTE (Mty @ Apr 19 2016, 10:56) Намекает...   Apr 19 2016, 08:04
- - aiwa   ЦитатаНамекаете на то что при возврате 1 сегмент и...   Apr 19 2016, 11:17
|- - zltigo   QUOTE (aiwa @ Apr 19 2016, 14:17) Т.е. ес...   Apr 19 2016, 11:22
- - aiwa   Да, наоборот. Подправлю. Кстати, нетрадиционное р...   Apr 19 2016, 11:44
|- - zltigo   QUOTE (aiwa @ Apr 19 2016, 14:44) Кстати,...   Apr 19 2016, 12:01
|- - aiwa   Цитата(zltigo @ Apr 19 2016, 15:01) Так и...   Apr 19 2016, 13:29
- - Mty   Насколько я понимаю он при инициализации сегментов...   Apr 19 2016, 12:32
|- - zltigo   QUOTE (Mty @ Apr 19 2016, 15:32) Наскольк...   Apr 19 2016, 13:48
- - aiwa   Заинтересовало, по быстрому написал первоначальный...   Apr 20 2016, 00:12
- - aiwa   Посмотрел с утра - код работать не будет. Не учел,...   Apr 20 2016, 08:57
|- - Mty   Спасибо, круто! А вот интересно register char...   Apr 20 2016, 11:33
|- - zltigo   QUOTE (Mty @ Apr 20 2016, 14:33) Иными сл...   Apr 20 2016, 12:34
- - aiwa   Цитата(Mty @ Apr 20 2016, 14:33) register...   Apr 20 2016, 13:27


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

 


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


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