Че может быть? может стэк маленький? Как вообще правильно указывать стэк?
Вопросик про стэк
Ошибка вылазит в обработке прерывания таймера, на команде reti: Program counter outside the valid space
Че может быть? может стэк маленький? Как вообще правильно указывать стэк?
Че может быть? может стэк маленький? Как вообще правильно указывать стэк?
- Реклама
Наверно у вас вектора прерываний не прописаны в проге.Tohey писал(а):Ошибка вылазит в обработке прерывания таймера, на команде reti: Program counter outside the valid space
можно в листинге компилятора посмотреть можно в обучалке можно в VMLAB проект создать и увидеть.Tohey писал(а):Как вообще правильно указывать стэк?
да не, всё прописано. Дело в том что в обработке прерывания вызывается ещё несколько "подфункций", штук 3. Т.е. в прерывании вызывается функция, а в этой функции вызывается ещё функция. И на каком то N-ном возврате вылазит эта ошибка. А в памяти смотрел - то похоже вылазит за пределы указателя (если я правельно понял).Наверно у вас вектора прерываний не прописаны в проге.
Как можно увеличить стэк? Возможно ли на каждую функцию зделать свой собственный стэк?
Вот тебе сделал в CVAVR 2 листинга АСМ - в одном стак 256 а в другом 500.
Найди отличия и доложи
Найди отличия и доложи
Спасибо! Уже разобрался, POP не там заPOPил
, то есть сначала шло - rcall потом, push, потом reti
, 2 дня потерял
А вообще возможно несколько стэков делать?
А вообще возможно несколько стэков делать?
Последний раз редактировалось Tohey Вт апр 24, 2007 19:04:49, всего редактировалось 1 раз.
- Реклама
Стэк 500 байт размещает в 60h - 253h
кроме того аппаратный стак 524 байт расположен
в адресах 254h - 45Fh
======
а стэк 256 байт в 60h - 15Fh
и аппаратный стак 768 байт расположен в адресах 160h - 45Fh
кроме того аппаратный стак 524 байт расположен
в адресах 254h - 45Fh
======
а стэк 256 байт в 60h - 15Fh
и аппаратный стак 768 байт расположен в адресах 160h - 45Fh
У МК семейства AVR указатель стека уменьшается при занасении в стек данных, т.е. движется "от конца" к "началу".
Следует различать стек программы и стек данных.
Аппаратный стек есть только у AT90S1200, если мне память не изменяет, а во всех моделях с ОЗУ стек программный, т.е. управляется из программы - что в SPL\SPH занесешь - там стек и будет.
Пример с ассемблерным листингом программы на си - имхо, худшее, что можно привести для понимания принципа работы стека. Интересно, что вы скажете про стек данных?
Следует различать стек программы и стек данных.
Аппаратный стек есть только у AT90S1200, если мне память не изменяет, а во всех моделях с ОЗУ стек программный, т.е. управляется из программы - что в SPL\SPH занесешь - там стек и будет.
Пример с ассемблерным листингом программы на си - имхо, худшее, что можно привести для понимания принципа работы стека. Интересно, что вы скажете про стек данных?
;DATA STACK POINTER INITIALIZATION
LDI R28,LOW(0x160)
LDI R29,HIGH(0x160)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
И чем же хуже текст АСМ листинга из компилятора
Все с комментариями ...
Код: Выделить всё
;STACK POINTER INITIALIZATION
LDI R30,LOW(0x45F)
OUT SPL,R30
LDI R30,HIGH(0x45F)
OUT SPH,R30
;DATA STACK POINTER INITIALIZATION
LDI R28,LOW(0x254)
LDI R29,HIGH(0x254)
хуже хотя бы тем, что из едва ли не сотни строк нужных всего десяток, а во вторых - описано 2 стека... Это всем понятно?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Советую не забивать голову а просто писать програмы на Си и радоваться результату.
Или вы в профи метите ? За ARV-ом вам все равно не угнаться
Место на монументе уже занято 
Или вы в профи метите ? За ARV-ом вам все равно не угнаться
Едкая ирония совершенно неуместна: приведен пример кода, в котором ясно видно, что организовано 2 стека - и никаких объяснений по этому поводу не дано. Давайть куски кода без пояснений на форуме для начинающих - дурной тон, имхо. Понимать, что происходит - необходимо каждому программисту, если конечно не наплевательски относиться к своему делу, поэтому "использовать и не париться" - так же нехороший совет. Использовать надо, понимая что к чему (раз уж дело зашло о стеке, не смотря на Си).
Стеков может быть сколько угодно - но это обман зрения, программный трюк, вынужденная мера (ядро процессора все равно имеет только один указатель стека).
Стек данных используется компилятром Си (или другого языка высокого уровня) для организации передачи параметров функций и т.п. через отдельную область памяти, которая может быть и не на кристалле - это жертва универсальности языка.
Для примера: в Windows каждой задаче выделяется собственный стек, есть еще несколько стеков системных...
Стеков может быть сколько угодно - но это обман зрения, программный трюк, вынужденная мера (ядро процессора все равно имеет только один указатель стека).
Стек данных используется компилятром Си (или другого языка высокого уровня) для организации передачи параметров функций и т.п. через отдельную область памяти, которая может быть и не на кристалле - это жертва универсальности языка.
Для примера: в Windows каждой задаче выделяется собственный стек, есть еще несколько стеков системных...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
И где же в вашем сообщении от " Вт Апр 24, 2007 8:36 pm" комментарии к коду ???ARV писал(а):Едкая ирония совершенно неуместна
Давайть куски кода без пояснений на форуме для начинающих - дурной тон, имхо.
Дурным тоном промышляете-с Козьма ?
Начните с себя !
Уважаю!Tohey писал(а):Мне на асме понятней и удобней писать. На си буду писать только тогда, когда математику применять придется.
Для математики на асме есть готовые подпрограммы всех арифметических действий - умножение, деление, сложение и т.п. как целых чисел (поставляются в комплекте с AVRStudio), так и с плавающей точкой (есть много в интернете), так что всегда можно обойтись только асмом.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
рекомендую http://www.avr-asm-tutorial.net/avr_en/calc/index.html - много примеров вычислений
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


