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

 
 
> Проблема с отладкой в IAR, Переполняется стек??
Polaris
сообщение May 13 2008, 13:35
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Помогите, пожалуйста, советом!
Столкнулся с непонятными эффектами при работе IAR AVR с отладчиком JTAG-ICE.
При вызове одной из функций в программе происходит выпадение отладчика. То есть, работа как бы продолжается, но при попытке останова появляется следующее сообщение:
Tue May 13 16:35:37 2008: The stack 'CStack' is filled to 100% (1024 bytes used out of 1024). The warning threshold is set to 90%.
Tue May 13 16:35:37 2008: The stack 'RStack' is filled to 100% (1024 bytes used out of 1024). The warning threshold is set to 90%.
Tue May 13 16:35:37 2008: The stack pointer for stack 'CStack' (currently DATA:0x00FFFF) is outside the stack range (DATA:0x000100 to DATA:0x000500)
Tue May 13 16:35:37 2008: The stack pointer for stack 'RStack' (currently DATA:0x00FFFF) is outside the stack range (DATA:0x000500 to DATA:0x000900)
При этом ранее все то же самое работал и с куда меньшим размером стека. Что удивительно для превышения размеров стека - плата с прошивкой совершенно нормально работает и далее. А вот отладчик уже ничего сделать не может. Сама процедура тоже не исполняется. Чем это может быть вызвано - ума не приложу sad.gif Сейчас попробую откатиться на более старую версию, посмотрю, как это функционировало там. Процедура, которая вызывает сбой, имеет следующий синтаксис:
TBool Print_Report(TReport __flash *PrReport);
typedef struct
{
char name_fmt[80];
TByte type;
} TReport;

Если у кого будут идеи - с удовольствием их выслушаю!

Версия IAR AVR - 4.21A/W32 (4.21.0.3)

Сообщение отредактировал Polaris - May 13 2008, 14:00
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение May 13 2008, 14:17
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Polaris @ May 13 2008, 15:35) *
Если у кого будут идеи - с удовольствием их выслушаю!

Просто кто-то создал свой собственный стек. Отладчик при этом ориентируется только на информацию о начальном стеке.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Polaris
сообщение May 13 2008, 14:25
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(zltigo @ May 13 2008, 17:17) *
Просто кто-то создал свой собственный стек. Отладчик при этом ориентируется только на информацию о начальном стеке.

А как это понимать? Можно подробнее, пожалуйста?
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 13 2008, 14:29
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Polaris @ May 13 2008, 16:25) *
А как это понимать? Можно подробнее, пожалуйста?

Как понимать? Так и понимать, что имеется право создавать собственные отдельные стеки. Это, например, операционки создающие собственные стеки для каждой из задач. В некоторых случаях/архитектурах обработчики прерываний...


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Polaris
сообщение May 13 2008, 14:32
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(zltigo @ May 13 2008, 17:29) *
Как понимать? Так и понимать, что имеется право создавать собственные отдельные стеки. Это, например, операционки создающие собственные стеки для каждой из задач. В некоторых случаях/архитектурах обработчики прерываний...

Это не операционка
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 13 2008, 16:38
Сообщение #6


Гуру
******

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



Цитата(Polaris @ May 13 2008, 17:32) *
Это не операционка
Оно вам четко написало:
Цитата
pointer for stack 'RStack' (currently DATA:0x00FFFF) is outside the stack range (DATA:0x000500 to DATA:0x000900)
Вот и разбирайтесь, почему в указатель стека попало число 0xFFFF. Ходите по шагам, найдите участок, где это происходит, пройдите его по дизассемблерному листингу.


--------------------
На любой вопрос даю любой ответ
"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
Polaris
сообщение May 14 2008, 07:46
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(Сергей Борщ @ May 13 2008, 19:38) *
Оно вам четко написало: Вот и разбирайтесь, почему в указатель стека попало число 0xFFFF. Ходите по шагам, найдите участок, где это происходит, пройдите его по дизассемблерному листингу.

Не могу пройти по шагам, тут дело, видимо, даже не в вызове конкретной процедуры. Только что получил такое же сообщение, просто остановив отладчик. Плата при этом работает нормально. Так что дело совершенно определенно не в том, что кто-то переполняет стек, нет такого. Дело именно в ошибке, инициируемой самим отладчиком JTAG-ICE.
Go to the top of the page
 
+Quote Post



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

 


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


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