Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Непонятное сообщение симулятора
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
VladimirYU
Сразу при начале пошаговой отладки main() симулятор выдает сообщение

The stack pointer for stack 'CStack' (currently DATA:0x00FFF1) is outside the stack range (DATA:0x000100 to DATA:0x000200)

В опциях проекта вроде все определено CSTACK, RSTACK, НЕАР. В map файле все соответствует опциям проекта. Как указатель CSTACK залез в адреса, соответствующие внешней памяти, которой нет и опциях поекта запрещена? Контроллер Мега128, файл линкера XCL родной от IAR. Может кто подскажет как с этим быть.
KRS
Цитата(VladimirYU @ Jan 16 2008, 15:03) *
Как указатель CSTACK залез в адреса, соответствующие внешней памяти, которой нет и опциях поекта запрещена?

CSTACK полностью софтовый стек для данных - указатель в регистре находится Y (r29:r28), возможно он не проинициализирован или кем то использвался.
(все команды ST -Y,xxx LD xxx,Y+ SBIW YL, xxxx) используют этот стек.
VladimirYU
Цитата(KRS @ Jan 16 2008, 16:51) *
CSTACK полностью софтовый стек для данных - указатель в регистре находится Y (r29:r28), возможно он не проинициализирован или кем то использвался.
(все команды ST -Y,xxx LD xxx,Y+ SBIW YL, xxxx) используют этот стек.


Инициализация, ИМХО, должна быть в CSTARTUP, или я заблуждаюсь? А далее компилятор должен позабодится о корректной работе со стеком, а LINKER предупредить о возможном наложении сегментов, если это отлавливается. Здесь же его (CSTACK) загнали вообще черти куда. Это и непонятно.
zltigo
Цитата(VladimirYU @ Jan 16 2008, 16:15) *
Здесь же его (CSTACK) загнали вообще черти куда. Это и непонятно.

Если, например, вытесняющая операционка, то у каждой задачи свой стек естественно никоем образом не имеющий отношения к тому кторый был в statrup задан.
VladimirYU
Цитата(zltigo @ Jan 16 2008, 17:47) *
Если, например, вытесняющая операционка, то у каждой задачи свой стек естественно никоем образом не имеющий отношения к тому кторый был в statrup задан.

Нет операционки нет, но данное сообщение появляется сразу при вызове конструктора статического обекта, а если этот же объект создавать как динамический (new), то сообщение не появляется.
KRS
Цитата(VladimirYU @ Jan 16 2008, 17:05) *
Нет операционки нет, но данное сообщение появляется сразу при вызове конструктора статического обекта, а если этот же объект создавать как динамический (new), то сообщение не появляется.

А у вас этот объект случайно не в стеке разместился? ( локальная переменная) тога если он большой у вас стек и переполняется (изначально указатель был 0x1FF а стал -15 (т.е вы разместили объект в стеке размером порядка 270 байт)
VladimirYU
Цитата(KRS @ Jan 16 2008, 19:08) *
А у вас этот объект случайно не в стеке разместился? ( локальная переменная) тога если он большой у вас стек и переполняется (изначально указатель был 0x1FF а стал -15 (т.е вы разместили объект в стеке размером порядка 270 байт)


Абсолютно справедливо, сначала написал в форум, а потом сам понял. Когда объект динамический - "кучи" хватало, а когда статический и локальный = стек и переполнялся. Всем спасибо за помощь.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.