dimanche 3 janvier 2016

Очень интересный глюк на AVR с участием прерывания переполнения таймера, ил я не догоняю…

Использую прерывания по переполнению таймера. В обработки прерывания подсчитываю часы реального времени. Переменные часов это однобайтовые ячейки SRAM. Кроме переменной DS – она двух байтовая.
В основном цикле есть условие которое не должно никогда выполнятся - если R4 = 20 то перейти в подпрограмму Obr. При этом R4 всегда 0. Но, тем не менее, при обработки на кристалле я попадаю в подпрограмму Obr, при этом R4 = 0. И еще, я заметил, если переменную DS сделать однобайтовой то переход в Obr происходит реже.
В чем прикол? Причем данный алгоритм я проверял на разных кристаллах: ATMega88p, ATMega48, ATMega8, ATMega128. И везде одно и тоже…

Изображения
Тип файла: png 2016-01-03 19-29-27 Скриншот экрана.png (44.7 Кб)


Очень интересный глюк на AVR с участием прерывания переполнения таймера, ил я не догоняю…

Aucun commentaire:

Enregistrer un commentaire