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

 
 
> Обнуление указателя стека
IF_P
сообщение Aug 30 2013, 15:13
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 136
Регистрация: 2-01-06
Пользователь №: 12 772



После небольшой модернизации программы начала вылетать ошибка стека ("Err_SP.GIF"). Начал разбираться и пришел вот к чему.
В программе MAIN в самом начале есть команда:

SBIW R29:R28, 20

Здесь уменшается р-р Y на 20. (0x80 - 20 = 0x6C). Впоследствии этот р-р используется для адресации стека.
При входе в п/п прерывания таймера сохраняются 20 р-ров ("ISR_Save.GIF").
В результате указатель стека получается равным 0x58, чего быть не должно. В дальнейшем при первом же вызове п/п в этом месте

37 ADC_7741[N_chan_7741][step7741]=TCNT1;
\ 0000003A B44C IN R4, 0x2C
\ 0000003C B45D IN R5, 0x2D
\ 0000003E .... LDI R26, LOW(ADC_7741)
\ 00000040 .... LDI R27, (ADC_7741) >> 8
\ 00000042 9140.... LDS R20, N_chan_7741
\ 00000046 E050 LDI R21, 0
\ 00000048 E00A LDI R16, 10
\ 0000004A E010 LDI R17, 0
\ 0000004C .... RCALL ?S_EC_MUL_L02

указатель стека обнуляется и начинают выдаваться вышеуказанные ошибки.

Посмотрел предыдущую версию программы. Там нет команды

SBIW R29:R28, 20

Почему она появилась?

В рабочей версии программы использовал свою п/п обработки прерывания I2C.
В программе с ошибками обработка прерываний I2C от ATMEL.
В прицепе два варианта программы.
IAR 4.30A
Proteus 7.10.0

Сообщение отредактировал IF_P - Aug 30 2013, 15:15
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  Norm.RAR ( 58.78 килобайт ) Кол-во скачиваний: 11
Прикрепленный файл  Err.RAR ( 76.88 килобайт ) Кол-во скачиваний: 11
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
IF_P
сообщение Aug 31 2013, 17:23
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 136
Регистрация: 2-01-06
Пользователь №: 12 772



Спасибо за подсказки. Так значительно лучше. По крайней мере в ISR T0 в стеке сохраняется только 4 р-ра.
Что касается таймера T0, то я режим поменяю только после полной отладки программы. Дело в том, что я отлаживаю программу в Proteus'е. А там TWI в ATMega8535 немного глючит (касательно того, что мне надо). Пришлось использовать ATMega8. А у неё нет режима таймера CTC. Но это уже мелочи.
Go to the top of the page
 
+Quote Post



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

 


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


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