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

 
 
 
Reply to this topicStart new topic
> определение расхода RAM
arttech
сообщение Apr 21 2009, 13:59
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 28-10-06
Из: г. Севастополь
Пользователь №: 21 744



Добрый день!

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

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

Иногда замечал, что в процессе девайс начинал вести себя непредсказуемо и логики в работе никакой не было. После уменьшения количества длин буферов всё ставало на свои места.
В MAP файле под глобальные переменные расходуется "3 670 bytes of DATA memory (+ 61 absolute )", но вот в процессе работы включаются в работу процедуры, где запрашивается RAM из стека.
Так вот, как убедиться, что процедуры не превышают запрашиваемый объём RAM?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 21 2009, 14:32
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(arttech @ Apr 21 2009, 16:59) *
Так вот, как убедиться, что процедуры не превышают запрашиваемый объём RAM?
Поместить на вершину стека (или, что проще, в конец данных) магическое число и периодически смотреть - не затерлось ли оно. Ну или если компилятор умеет строить дерево вызовов - анализировать его.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
arttech
сообщение Apr 21 2009, 14:48
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 28-10-06
Из: г. Севастополь
Пользователь №: 21 744



Цитата(Сергей Борщ @ Apr 21 2009, 17:32) *
Поместить на вершину стека (или, что проще, в конец данных) магическое число и периодически смотреть - не затерлось ли оно. Ну или если компилятор умеет строить дерево вызовов - анализировать его.

Да, идея хорошая и что самое главное достоверно можно определить наличие дыр в коде..
Но вот хотелось бы узнать, как сам компилятор заставить определить перерасход RAMa...
Go to the top of the page
 
+Quote Post
VAI
сообщение Apr 22 2009, 03:00
Сообщение #4


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



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

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

И в *.map-файле линкер построит дерево вызовов функций с подсчетом занимаемой памяти
Так мы определим минимальный размер стека, затем увеличим его до максимума у выбраного процессора.


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
Kurt
сообщение Apr 22 2009, 11:29
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 63
Регистрация: 16-06-04
Из: Россия, Уфа
Пользователь №: 31



про контроль вершины стека, простой примерчик для компилятора 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;
}
Go to the top of the page
 
+Quote Post
arttech
сообщение Apr 23 2009, 07:23
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 28-10-06
Из: г. Севастополь
Пользователь №: 21 744



Огромное спасибо за советы и полезные идеи smile.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 17:51
Рейтинг@Mail.ru


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