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

 
 
> Определение использования стека возвратов и данных
_Артём_
сообщение Jan 13 2012, 23:15
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Нужно определить сколько нужно программе выделять стека.
Думаю определить опытным путём: заполняю RSTACK и CSTACK определёнными ненулевыми значениями.

CODE
#pragma inline=forced
extern "C" {
inline unsigned char *GetY(void)
{
asm("mov R16, R28");
asm("mov R17, R29");
}
};

#pragma segment="CSTACK"
#pragma segment="RSTACK"
unsigned char *dbg_ptr, *dbg_begin;
//---------------------------------------------------------------------------
int main()
{
// очистка стека данных
dbg_ptr=GetY();
dbg_begin=(unsigned char *)__segment_begin("CSTACK");
do {
*dbg_begin++=0;
} while (dbg_begin<dbg_ptr);
// заполнение стека данных символом 'D'
dbg_begin=(unsigned char *)__segment_begin("CSTACK");
do {
*dbg_begin++='D';
} while (dbg_begin<dbg_ptr);
// очистка стека возвратов
dbg_ptr=reinterpret_cast<TStackItem*>(*((volatile unsigned short*)0x3D));
dbg_ptr-=3;
dbg_begin=(unsigned char *)__segment_begin("RSTACK");
do {
*dbg_begin++=0;
} while (dbg_begin<dbg_ptr);
// заполнение стека возвратов символом 'R'
dbg_begin=(unsigned char *)__segment_begin("RSTACK");
do {
*dbg_begin++='R';
} while (dbg_begin<dbg_ptr);
//
while (1) {
// программа
}


Вроде работает (нет ли граблей каких, пока не понял).
Какие есть способы сделать лучше/правильней?
Особенно не нравится функция GetY (обычно не использую ни inline, ни тем более asm-inline, поэтому не уверен в правильности реализации).
MCU=xmega256A3.
Спасибо.

Сообщение отредактировал IgorKossak - Jan 14 2012, 16:52
Причина редактирования: [codebox]!!!
Go to the top of the page
 
+Quote Post



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

 


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


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