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

 
 
 
Reply to this topicStart new topic
> IAR 6.50 ARM, Как диагностировать переполнение стека?
TolikG
сообщение Jan 30 2014, 06:26
Сообщение #1


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

Группа: Свой
Сообщений: 86
Регистрация: 19-03-10
Пользователь №: 56 071



В FreeRtos есть средства, хтя я ими не пользуюсь - как правило переполнение сразу приводит к частичному или полному краху - увеличиваю стек задачи и продолжаю тестировать. Сейчас отлаживаю прогу без RTOS - заметил что некоторые строчки кода не меняют локальные переменные. Посмотрел в окошке Locals поля Location - оказалось что переменные находятся в адресном пространстве флеш-памяти.
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 30 2014, 07:19
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Один из очевидных способов - в стартапе заполнить пространство стека чем-нибудь узнаваемым (0xDEADBEAF или чем-то таким). Погонять программу, а потом через отладчик посмотреть, насколько оно затёрлось.
Ещё можно попробовать поставить Data Watchpoint на край стека. Но далеко не любая работа со стеком может быть отловлена таким способом.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 30 2014, 08:33
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



А как насчет сгенерить карту памяти, и поглядеть глазьями не вылезло ли что за пределы? Или там много рекуррентных вызовов?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 30 2014, 09:00
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Хм... Это что-ж за вызовы такие?? wacko.gif

Цитата(scifi @ Jan 30 2014, 13:19) *
Ещё можно попробовать поставить Data Watchpoint на край стека. Но далеко не любая работа со стеком может быть отловлена таким способом.

Если задача без ОС и нужно контролировать только один стек, то можно стек расположить в самых младших доступных адресах ОЗУ и
обработчик Bus Faults настропалить на точную или неточную ошибку доступа к памяти.
А если в вашем ARM-е имеется MPU, то очевидно можно и его для этого задействовать.
Непонятно только какой именно ARM имеется в виду....
Go to the top of the page
 
+Quote Post
scifi
сообщение Jan 30 2014, 09:29
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(jcxz @ Jan 30 2014, 13:00) *
Если задача без ОС и нужно контролировать только один стек, то можно стек расположить в самых младших доступных адресах ОЗУ и обработчик Bus Faults настропалить на точную или неточную ошибку доступа к памяти.

Ловко!
Go to the top of the page
 
+Quote Post

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

 


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


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