Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: определение расхода RAM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
arttech
Добрый день!

Подскажите, как можно определить какое количество памяти RAM требуется в процессе выполнения программы и не превышает ли программа своими запросами установленное количество на МК?

Использую MSP430F2471, RAM памяти - 4 КБ.

Иногда замечал, что в процессе девайс начинал вести себя непредсказуемо и логики в работе никакой не было. После уменьшения количества длин буферов всё ставало на свои места.
В MAP файле под глобальные переменные расходуется "3 670 bytes of DATA memory (+ 61 absolute )", но вот в процессе работы включаются в работу процедуры, где запрашивается RAM из стека.
Так вот, как убедиться, что процедуры не превышают запрашиваемый объём RAM?
Сергей Борщ
Цитата(arttech @ Apr 21 2009, 16:59) *
Так вот, как убедиться, что процедуры не превышают запрашиваемый объём RAM?
Поместить на вершину стека (или, что проще, в конец данных) магическое число и периодически смотреть - не затерлось ли оно. Ну или если компилятор умеет строить дерево вызовов - анализировать его.
arttech
Цитата(Сергей Борщ @ Apr 21 2009, 17:32) *
Поместить на вершину стека (или, что проще, в конец данных) магическое число и периодически смотреть - не затерлось ли оно. Ну или если компилятор умеет строить дерево вызовов - анализировать его.

Да, идея хорошая и что самое главное достоверно можно определить наличие дыр в коде..
Но вот хотелось бы узнать, как сам компилятор заставить определить перерасход RAMa...
VAI
Т.к. Вы не указали, какой компилятор используете, то только сам Бог и Вы (после изучения документации на компилятор) можете сказать, как можно заставить компилятор строить дерево вызовов.
Для ИАР это делается так:

Цитата
Options->Linker->Cmd Opt
добавляем свою строку :
-xmos

И в *.map-файле линкер построит дерево вызовов функций с подсчетом занимаемой памяти
Так мы определим минимальный размер стека, затем увеличим его до максимума у выбраного процессора.
Kurt
про контроль вершины стека, простой примерчик для компилятора IAR:
Код
//---------------------------------------------------------
void sys_check_stack_init(void)
{  
    #pragma segment="CSTACK"
    unsigned short * p = (unsigned short *)__segment_begin("CSTACK");
    *p++ = 0xDEAD;
    *p   = 0xDEAD;
}

//---------------------------------------------------------
void sys_check_stack(void)
{  
    #pragma segment="CSTACK"
    unsigned short * p = (unsigned short *)__segment_begin("CSTACK");
    if( (p[0] != 0xDEAD) || (p[1] != 0xDEAD) ) WDTCTL=0x00;
}
arttech
Огромное спасибо за советы и полезные идеи smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.