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

 
 
 
Reply to this topicStart new topic
> Непонятное сообщение симулятора, симулятор IAR EW 4.12A
VladimirYU
сообщение Jan 16 2008, 12:03
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Сразу при начале пошаговой отладки 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. Может кто подскажет как с этим быть.
Go to the top of the page
 
+Quote Post
KRS
сообщение Jan 16 2008, 12:51
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(VladimirYU @ Jan 16 2008, 15:03) *
Как указатель CSTACK залез в адреса, соответствующие внешней памяти, которой нет и опциях поекта запрещена?

CSTACK полностью софтовый стек для данных - указатель в регистре находится Y (r29:r28), возможно он не проинициализирован или кем то использвался.
(все команды ST -Y,xxx LD xxx,Y+ SBIW YL, xxxx) используют этот стек.
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Jan 16 2008, 13:15
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



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


Инициализация, ИМХО, должна быть в CSTARTUP, или я заблуждаюсь? А далее компилятор должен позабодится о корректной работе со стеком, а LINKER предупредить о возможном наложении сегментов, если это отлавливается. Здесь же его (CSTACK) загнали вообще черти куда. Это и непонятно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 16 2008, 13:47
Сообщение #4


Гуру
******

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



Цитата(VladimirYU @ Jan 16 2008, 16:15) *
Здесь же его (CSTACK) загнали вообще черти куда. Это и непонятно.

Если, например, вытесняющая операционка, то у каждой задачи свой стек естественно никоем образом не имеющий отношения к тому кторый был в statrup задан.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Jan 16 2008, 14:05
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



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

Нет операционки нет, но данное сообщение появляется сразу при вызове конструктора статического обекта, а если этот же объект создавать как динамический (new), то сообщение не появляется.
Go to the top of the page
 
+Quote Post
KRS
сообщение Jan 16 2008, 15:08
Сообщение #6


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



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

А у вас этот объект случайно не в стеке разместился? ( локальная переменная) тога если он большой у вас стек и переполняется (изначально указатель был 0x1FF а стал -15 (т.е вы разместили объект в стеке размером порядка 270 байт)
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Jan 17 2008, 05:42
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



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


Абсолютно справедливо, сначала написал в форум, а потом сам понял. Когда объект динамический - "кучи" хватало, а когда статический и локальный = стек и переполнялся. Всем спасибо за помощь.
Go to the top of the page
 
+Quote Post

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

 


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


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