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

 
 
> Локальные переменные и возврат из функции, EWARM, STM32F407
drozel
сообщение Oct 22 2015, 07:36
Сообщение #1


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

Группа: Свой
Сообщений: 108
Регистрация: 2-02-11
Пользователь №: 62 650



Наткнулся на какой-то цирк с конями: в функции используется локальный массив из 10 байт, он ложится в стек, а при возврате программа не отбрасывает эти элементы, а прямо их засовывает с R0-R2, PC, получая, естественно, hardFault.
Код
void protocolOnRxed (uint8_t *buffer, uint32_t len)
{
gLen = len;
char test[10];
gLen = sprintf(test, "Transfer: %d", len);
cdcacm_data_tx(test, gLen);
}


Я раньше не работал плотно с дизассемблером, не знаю, как там IAR должен разруливать возврат, но он явно должен знать, сколько локальных переменных выделено в стеке и выкидывать их, прежде чем считывать регистры для возврата. Так ведь?

В приложении скриншот, там видно и программу, и стек, и дизассемблер.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post



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

 


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


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