Перейти к содержанию
    

Непонятное сообщение симулятора

Сразу при начале пошаговой отладки 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. Может кто подскажет как с этим быть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как указатель CSTACK залез в адреса, соответствующие внешней памяти, которой нет и опциях поекта запрещена?

CSTACK полностью софтовый стек для данных - указатель в регистре находится Y (r29:r28), возможно он не проинициализирован или кем то использвался.

(все команды ST -Y,xxx LD xxx,Y+ SBIW YL, xxxx) используют этот стек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

CSTACK полностью софтовый стек для данных - указатель в регистре находится Y (r29:r28), возможно он не проинициализирован или кем то использвался.

(все команды ST -Y,xxx LD xxx,Y+ SBIW YL, xxxx) используют этот стек.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здесь же его (CSTACK) загнали вообще черти куда. Это и непонятно.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Нет операционки нет, но данное сообщение появляется сразу при вызове конструктора статического обекта, а если этот же объект создавать как динамический (new), то сообщение не появляется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нет операционки нет, но данное сообщение появляется сразу при вызове конструктора статического обекта, а если этот же объект создавать как динамический (new), то сообщение не появляется.

А у вас этот объект случайно не в стеке разместился? ( локальная переменная) тога если он большой у вас стек и переполняется (изначально указатель был 0x1FF а стал -15 (т.е вы разместили объект в стеке размером порядка 270 байт)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А у вас этот объект случайно не в стеке разместился? ( локальная переменная) тога если он большой у вас стек и переполняется (изначально указатель был 0x1FF а стал -15 (т.е вы разместили объект в стеке размером порядка 270 байт)

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...