Вопросик про стэк

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Вопросик про стэк

Сообщение Tohey »

Ошибка вылазит в обработке прерывания таймера, на команде reti: Program counter outside the valid space
Че может быть? может стэк маленький? Как вообще правильно указывать стэк?
Реклама
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Re: Вопросик про стэк

Сообщение tych »

Tohey писал(а):Ошибка вылазит в обработке прерывания таймера, на команде reti: Program counter outside the valid space
Наверно у вас вектора прерываний не прописаны в проге.
Tohey писал(а):Как вообще правильно указывать стэк?
можно в листинге компилятора посмотреть можно в обучалке можно в VMLAB проект создать и увидеть.
Реклама
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

Наверно у вас вектора прерываний не прописаны в проге.
да не, всё прописано. Дело в том что в обработке прерывания вызывается ещё несколько "подфункций", штук 3. Т.е. в прерывании вызывается функция, а в этой функции вызывается ещё функция. И на каком то N-ном возврате вылазит эта ошибка. А в памяти смотрел - то похоже вылазит за пределы указателя (если я правельно понял).
Как можно увеличить стэк? Возможно ли на каждую функцию зделать свой собственный стэк?
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Вот тебе сделал в CVAVR 2 листинга АСМ - в одном стак 256 а в другом 500.

Найди отличия и доложи :lol:
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

Спасибо! Уже разобрался, POP не там заPOPил :shock:, то есть сначала шло - rcall потом, push, потом reti :))) , 2 дня потерял :cry:
А вообще возможно несколько стэков делать?
Последний раз редактировалось Tohey Вт апр 24, 2007 19:04:49, всего редактировалось 1 раз.
Реклама
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Стэк 500 байт размещает в 60h - 253h

кроме того аппаратный стак 524 байт расположен
в адресах 254h - 45Fh

======

а стэк 256 байт в 60h - 15Fh

и аппаратный стак 768 байт расположен в адресах 160h - 45Fh
Реклама
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

Стэк 500 байт размещает в 60h - 253h
А вообще стэк с конца памяти заполняется?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18675
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

У МК семейства AVR указатель стека уменьшается при занасении в стек данных, т.е. движется "от конца" к "началу".
Следует различать стек программы и стек данных.
Аппаратный стек есть только у AT90S1200, если мне память не изменяет, а во всех моделях с ОЗУ стек программный, т.е. управляется из программы - что в SPL\SPH занесешь - там стек и будет.
Пример с ассемблерным листингом программы на си - имхо, худшее, что можно привести для понимания принципа работы стека. Интересно, что вы скажете про стек данных?
;DATA STACK POINTER INITIALIZATION
LDI R28,LOW(0x160)
LDI R29,HIGH(0x160)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

И чем же хуже текст АСМ листинга из компилятора :shock:

Код: Выделить всё

;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)
Все с комментариями ...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18675
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

хуже хотя бы тем, что из едва ли не сотни строк нужных всего десяток, а во вторых - описано 2 стека... Это всем понятно?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

Про стэк данных впервые слышу! А как в него и что в него записуют?
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Советую не забивать голову а просто писать програмы на Си и радоваться результату.

Или вы в профи метите ? За ARV-ом вам все равно не угнаться :lol: Место на монументе уже занято :cry:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18675
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Едкая ирония совершенно неуместна: приведен пример кода, в котором ясно видно, что организовано 2 стека - и никаких объяснений по этому поводу не дано. Давайть куски кода без пояснений на форуме для начинающих - дурной тон, имхо. Понимать, что происходит - необходимо каждому программисту, если конечно не наплевательски относиться к своему делу, поэтому "использовать и не париться" - так же нехороший совет. Использовать надо, понимая что к чему (раз уж дело зашло о стеке, не смотря на Си).
Стеков может быть сколько угодно - но это обман зрения, программный трюк, вынужденная мера (ядро процессора все равно имеет только один указатель стека).
Стек данных используется компилятром Си (или другого языка высокого уровня) для организации передачи параметров функций и т.п. через отдельную область памяти, которая может быть и не на кристалле - это жертва универсальности языка.
Для примера: в Windows каждой задаче выделяется собственный стек, есть еще несколько стеков системных...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

ARV писал(а):Едкая ирония совершенно неуместна

Давайть куски кода без пояснений на форуме для начинающих - дурной тон, имхо.
И где же в вашем сообщении от " Вт Апр 24, 2007 8:36 pm" комментарии к коду ???

Дурным тоном промышляете-с Козьма ?

Начните с себя !
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

tych писал(а):Советую не забивать голову а просто писать програмы на Си и радоваться результату.
Мне на асме понятней и удобней писать. На си буду писать только тогда, когда математику применять придется.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18675
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Tohey писал(а):Мне на асме понятней и удобней писать. На си буду писать только тогда, когда математику применять придется.
Уважаю!
Для математики на асме есть готовые подпрограммы всех арифметических действий - умножение, деление, сложение и т.п. как целых чисел (поставляются в комплекте с AVRStudio), так и с плавающей точкой (есть много в интернете), так что всегда можно обойтись только асмом.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Tohey
Грызет канифоль
Сообщения: 257
Зарегистрирован: Сб сен 09, 2006 19:00:18
Откуда: СССР

Сообщение Tohey »

ARV писал(а): на асме есть готовые подпрограммы всех арифметических действий - умножение, деление, сложение и т.п. как целых чисел (поставляются в комплекте с AVRStudio)
НЕЗНАЛ :shock: Замечательно :)) !
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18675
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

рекомендую http://www.avr-asm-tutorial.net/avr_en/calc/index.html - много примеров вычислений
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»