Клеммы, реле, разъемы Degson со склада в России

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

Новичок
 
Регистрация: 03.01.2016
Сообщений: 3
Репутация: 10
0 3
0 0
 
03.01.2016 20:05 #1
Использую прерывания по переполнению таймера. В обработки прерывания подсчитываю часы реального времени. Переменные часов это однобайтовые ячейки 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 Кб, 0 просмотров)
Оценка
Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO.
Знаток
 
Регистрация: 06.12.2009
Сообщений: 824
Репутация: 114
105 143
4 0
 
03.01.2016 20:55 #2
Я в таком интерфейсе не работал, но то, что в нем могут быть бока -нельзя исключать.
Эти облегчения программ всегда боком вылазят.
Мож в timer_0_Over пишет число 20 в этот регистр ?
На выходе Hex файл дает прошивки ?
Если да, проверяйте в протеусе регистр R4 с этот момент. Желательно в момент перехода на obr программе зависнуть и увидете, если там число 20, то тогда глюка нет, и действительно где-то оно записалось, если другое чисо, то тогда какой-то баг

___________
вообще теней много, надо только в симуляторе смотреть что там пишется в регистр. Да и теж 2-х байтовые переменные, они же тоже сначала в 2 регистра пишутся, а потом в ОЗУ. В прог этого не видно как оно происходит на самом деле. По сути это исковерканный ассемблер
Последний раз редактировалось схемопай; 03.01.2016 в 21:03.
Оценка
КОМПЭЛ продолжает поддерживать и расширять список складских позиций Hongfa, представленных электромеханическими реле. Продукция компании активно применяется в таких областях, как промышленность, энергетика, бытовые приборы, автомобильная отрасль и специальная техника, требующая высокой надежности и на сегодняшний момент может легко заменить электромеханические реле ушедших из РФ брендов.
Новичок
 
Регистрация: 03.01.2016
Сообщений: 3
Репутация: 10
0 3
0 0
 
03.01.2016 23:39 #3
Суть понятна.
HEX файл есть, но каким ПО с ним работать? И как я понимаю, что в данной ситуации нужно отлаживать на кристалле. Соответственно понадобится соответствующий программатор.
Оценка
Специалист
 
Аватар для Vadzz
 
Регистрация: 12.11.2008
Адрес: Тирасполь
Сообщений: 2,172
Записей в дневнике: 22
Репутация: 419
407 86
0 0
Отправить сообщение для Vadzz с помощью ICQ
 
03.01.2016 23:46 #4
О... Algorithm Builder... Знакомо... Нужно отслеживать состояние регистра R4. Но этого изменения вы можете и не увидеть при отладке на кристалле. Не исключаю также, что этот регистр используется самим компилятором, например при отладке. Может используется для какой-то переменной. То что R16 и R17 используются компилятором и для своих целей их нельзя использовать - знаю точно...

Посмотрите руководство пользователя по Algorithm Builder, где-то на сайте автора было вроде. Попробуйте использовать другой регистр, или попробуйте зарезервировать этот регистр для себя (клавиша F12 - определения переменных и регистров).
__________________
Уважаемые пассажиры, самолет ТУ-134 садится. У кого есть зарядка от ТУ-134, просьба пройти в кабину пилота.
Оценка
Специалист
 
Аватар для Vadzz
 
Регистрация: 12.11.2008
Адрес: Тирасполь
Сообщений: 2,172
Записей в дневнике: 22
Репутация: 419
407 86
0 0
Отправить сообщение для Vadzz с помощью ICQ
 
03.01.2016 23:51 #5
Можно попробовать, как сказал Схемопай, дополнительно в протеусе прогнать прошивку.

Компилируем проект в Algorithm Builder, получаем HEX-файл, собираем схемку на микроконтроллере в протеусе, загружаем прошивку в него и делаем пошаговое выполнение программы, наблюдаем за проявлением глюка и состоянием регистров...
__________________
Уважаемые пассажиры, самолет ТУ-134 садится. У кого есть зарядка от ТУ-134, просьба пройти в кабину пилота.
Оценка
Новичок
 
Регистрация: 03.01.2016
Сообщений: 3
Репутация: 10
0 3
0 0
 
03.01.2016 23:59 #6
Все нормально ребята, всем спасибо. Просто нужно было загонять в стек Sreg, r16, r17. Вот пробовал загонять все кроме R17. Про R17 как то замылилось и то же не работало. Сейчас все норм всем спасибо.
Оценка
Знаток
 
Регистрация: 06.12.2009
Сообщений: 824
Репутация: 114
105 143
4 0
 
04.01.2016 10:03 #7
очередной раз убеждаюсь, что не стоит работать в этой среде. Вроде как и регистры открыты для доступа, в тоже время программа сама их занимает, черт знает что
Оценка
Новичок
 
Регистрация: 06.11.2011
Сообщений: 1
Репутация: 11
1 0
0 0
 
11.11.2023 09:18 #8
Ну в Algorithm Builder не так много подводных камней. Этот наверное самый заморочный.
После компиляции при наведении на строку видна ассемблерная конструкция, которую компилятор вставит в код и регистр R16 частенько используется при отправке в стек регистров ввода-вывода и других, например SREG.
Поэтому при отправке в стек данных регистр R16 и R17 отправляйте первыми, а потом всё остальное, а то восстановите их из стека, а компилятор при восстановлении других данных использует R16 или R17 и затрёт их.
Оценка
Ответ
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход
Электронные компоненты. Скидки, кэшбэк и бесплатная доставка от ТМ Электроникс
Часовой пояс GMT +3, время: 04:40.
Обратная связь РадиоЛоцман Вверх