Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с отладкой в IAR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Polaris
Помогите, пожалуйста, советом!
Столкнулся с непонятными эффектами при работе 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)
zltigo
Цитата(Polaris @ May 13 2008, 15:35) *
Если у кого будут идеи - с удовольствием их выслушаю!

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

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

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

Это не операционка
Сергей Борщ
Цитата(Polaris @ May 13 2008, 17:32) *
Это не операционка
Оно вам четко написало:
Цитата
pointer for stack 'RStack' (currently DATA:0x00FFFF) is outside the stack range (DATA:0x000500 to DATA:0x000900)
Вот и разбирайтесь, почему в указатель стека попало число 0xFFFF. Ходите по шагам, найдите участок, где это происходит, пройдите его по дизассемблерному листингу.
VladimirYU
Цитата(Polaris @ May 13 2008, 17:35) *
Помогите, пожалуйста, советом!
Столкнулся с непонятными эффектами при работе 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, 17:35) *
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)


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

Не могу пройти по шагам, тут дело, видимо, даже не в вызове конкретной процедуры. Только что получил такое же сообщение, просто остановив отладчик. Плата при этом работает нормально. Так что дело совершенно определенно не в том, что кто-то переполняет стек, нет такого. Дело именно в ошибке, инициируемой самим отладчиком JTAG-ICE.
VladimirYU
Цитата(Polaris @ May 14 2008, 11:46) *
Не могу пройти по шагам, тут дело, видимо, даже не в вызове конкретной процедуры. Только что получил такое же сообщение, просто остановив отладчик. Плата при этом работает нормально. Так что дело совершенно определенно не в том, что кто-то переполняет стек, нет такого. Дело именно в ошибке, инициируемой самим отладчиком JTAG-ICE.


Вы попробуйте воспльзоваться родным симулятором IAR или Студией, я думаю у вас будут те же самые ворнинги. ИМХО JTAG здесь не причем. Выбросите или "зашунтируйте" куски программы которые явно зависят от "железа", и вперед по шагам, как рекомендовал Сергей Борщ.
Polaris
Всем спасибо, проблема вовсе не в IAR и не в перерасходе стека. Опытным путем выяснилось, что подобное поведение отладчика вызывалось статическими разрядами (что-то на мне они начали в последнее время накапливаться sad.gif) Как только проскакивает искра между мной и платой - с высокой степенью вероятности отладчик отваливается с подобными сообщениями на выходе из режима отладки.
defunct
Цитата(Polaris @ May 13 2008, 16:35) *
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)

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

Потеряна связь с чипом. У меня такое происходит когда UPS щелкает, или включается что-то мощное рядом с отлаживаемым девайсом.

Цитата
Опытным путем выяснилось, что подобное поведение отладчика вызывалось статическими разрядами

Сори что с опозданием, постили бы в AVR форум, ответил бы в день вашего сообщения. А так эти новые "экзотические" подфорумы по IAR и GCC вообще заметил только сегодня.
Polaris
Цитата(defunct @ May 24 2008, 23:47) *
Потеряна связь с чипом. У меня такое происходит когда UPS щелкает, или включается что-то мощное рядом с отлаживаемым девайсом.
Сори что с опозданием, постили бы в AVR форум, ответил бы в день вашего сообщения. А так эти новые "экзотические" подфорумы по IAR и GCC вообще заметил только сегодня.

Все равно спасибо smile.gif Рад, что не ошибся с выводами. Может, еще кому-то поможет избежать подобной проблемы. А то все сразу налетели на меня с обвинениями в переполнении стека, хотя я как мог это отрицал wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.