VladimirYU 0 16 января, 2008 Опубликовано 16 января, 2008 · Жалоба Сразу при начале пошаговой отладки 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 1 16 января, 2008 Опубликовано 16 января, 2008 · Жалоба Как указатель CSTACK залез в адреса, соответствующие внешней памяти, которой нет и опциях поекта запрещена? CSTACK полностью софтовый стек для данных - указатель в регистре находится Y (r29:r28), возможно он не проинициализирован или кем то использвался. (все команды ST -Y,xxx LD xxx,Y+ SBIW YL, xxxx) используют этот стек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 16 января, 2008 Опубликовано 16 января, 2008 · Жалоба CSTACK полностью софтовый стек для данных - указатель в регистре находится Y (r29:r28), возможно он не проинициализирован или кем то использвался. (все команды ST -Y,xxx LD xxx,Y+ SBIW YL, xxxx) используют этот стек. Инициализация, ИМХО, должна быть в CSTARTUP, или я заблуждаюсь? А далее компилятор должен позабодится о корректной работе со стеком, а LINKER предупредить о возможном наложении сегментов, если это отлавливается. Здесь же его (CSTACK) загнали вообще черти куда. Это и непонятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 1 16 января, 2008 Опубликовано 16 января, 2008 · Жалоба Здесь же его (CSTACK) загнали вообще черти куда. Это и непонятно. Если, например, вытесняющая операционка, то у каждой задачи свой стек естественно никоем образом не имеющий отношения к тому кторый был в statrup задан. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 16 января, 2008 Опубликовано 16 января, 2008 · Жалоба Если, например, вытесняющая операционка, то у каждой задачи свой стек естественно никоем образом не имеющий отношения к тому кторый был в statrup задан. Нет операционки нет, но данное сообщение появляется сразу при вызове конструктора статического обекта, а если этот же объект создавать как динамический (new), то сообщение не появляется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 1 16 января, 2008 Опубликовано 16 января, 2008 · Жалоба Нет операционки нет, но данное сообщение появляется сразу при вызове конструктора статического обекта, а если этот же объект создавать как динамический (new), то сообщение не появляется. А у вас этот объект случайно не в стеке разместился? ( локальная переменная) тога если он большой у вас стек и переполняется (изначально указатель был 0x1FF а стал -15 (т.е вы разместили объект в стеке размером порядка 270 байт) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 17 января, 2008 Опубликовано 17 января, 2008 · Жалоба А у вас этот объект случайно не в стеке разместился? ( локальная переменная) тога если он большой у вас стек и переполняется (изначально указатель был 0x1FF а стал -15 (т.е вы разместили объект в стеке размером порядка 270 байт) Абсолютно справедливо, сначала написал в форум, а потом сам понял. Когда объект динамический - "кучи" хватало, а когда статический и локальный = стек и переполнялся. Всем спасибо за помощь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться