|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
||||||||||||||||||||||||||||||||||||||||||||||
Некорректно работает прошивка. Должна мигать светодиодом при переполнении TIMER023.09.2025, 17:24. Показов 2979. Ответов 47
Здравствуйте!
Когда-то давно, для общего развития, учился писать на ассемблере для avr и достиг неких результатов. Всё благодаря участникам данного форума, которые проявили ко мне невероятную терпимость! Теперь было решено, одну из программ переписать с ассемблера на си в рамках факультатива. Но что-то пошло не так и я не смог разобраться что именно, но зацепка есть. Программа на ассембере
Проверил с помощью `avr-objdump`, судя по всему, некорректно формируются первые ячейки program memory, через которые и происходит прыжки при прерывании. `avr-objdump` программы на ассемблере:
Добавлено через 1 час 13 минут Смог найти в чём проблема. Нужно убрать флаг `-nostdlib`. Добавлено через 56 минут Гыгы, ещё в ассемблерной части, была ошибка, было так:
А совсем правильно так:
1
|
||||||||||||||||||||||||||||||||||||||||||||||
| 23.09.2025, 17:24 | |
|
Ответы с готовыми решениями:
47
SysTick можно ли с его помощью мигать светодиодом Не работает TIMER0 OVF Не работает TIMER0 OVF |
|
51 / 49 / 2
Регистрация: 23.01.2019
Сообщений: 380
|
|||
| 28.09.2025, 14:44 | |||
|
0b01_110_11_0, и аврасм такое написание принимает, что радует. Ещё по поводу записи 0b0000_0001. Дело в том, что в даташите на 328-ю с ошибкой описаны биты регистра TIMSK0 Должно быть OCIE0B OCIE0A TOIE0. И что бы не разбираться куда ставить 0, в конец или перед А/В, удобнее порой написать 0b00000001, но ни как не (1<<0) Возможно поэтому ТС и написал (1<<1), так как компилятор не принял у него TOIE. А "скопировал" бы таблицу в бинарное представление байта, то ошибки бы не было.
0
|
|||
|
658 / 411 / 76
Регистрация: 21.09.2008
Сообщений: 1,411
|
||
| 28.09.2025, 15:10 | ||
|
0
|
||
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
|||||||||||||
| 28.09.2025, 15:53 [ТС] | |||||||||||||
|
1) В сишной программе включаю "неправильное" прерывание:
2) Использую `avr-objdump -D` к собранной прошивке, интересующие строки:
Делаю `xxd blink_led_tim0.elf > firm.hex`, находим в нём `0c 94 53 00`, которые являются `jmp 0xa6` и предыдущие две последовательности `0c 94 51 00` заменяем на `00 00 00 00` (вроде как nop всё же 00, а не ff, а может то и то, фиг знает). Далее hex обратно в бинарник кидаем `xxd -r firm.hex > firm.bin`, зашиваем `firm.bin` и... Светодиод мигает, не смотря на то, что прерывание стоит неправильное. Подытожу. Делал я это просто для себя в рамках факультатива, пользы от этого не то чтобы много, но удовольствие получил. Без вас бы не получилось, большая всем благодарность!
1
|
|||||||||||||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||||
| 28.09.2025, 16:23 | ||||||
|
И да, там действительно иногда приходится вручную ставить биты, поскольку китайцам прописать все дефайны было лень. В общем, лучше сразу не привыкать к плохому стилю. Если выставляются именованные биты, пишем (1<<bitName). Если поименовать их забыли, пишем (1<<x). А запись 0bxxx оправдана только для битовых полей TCCR1B = (0b11<<WGM12) | (0b001<<CS10), и то только потому что для них производитель почти никогда не пишет констант. Приходится пояснять в комментариях.
1
|
||||||
|
51 / 49 / 2
Регистрация: 23.01.2019
Сообщений: 380
|
|
| 28.09.2025, 16:31 | |
|
The hexadecimal opcode for the NOP (No Operation) instruction in AVR microcontrollers is 0x0000
x86 / x86-64: 0x90 Intel 8048 / MCS-48 family: 0x00 Intel 8051 / MCS-51 family: 0x00 Intel 8080 / Intel 8085 / Z80: 0x00 Intel i860: 0xA0000000 По погоде вобщем))
1
|
|
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||
| 28.09.2025, 23:50 | ||
|
А 0xFFFF это, повторяю, чистая флеш, которая интерпретируется как "Illegal instruction". Точнее, интерпретировалась бы бы, поддерживай AVR такую ситуацию. В более мощных камнях это приводит к исключению (это почти как прерывание, но генерируется не периферией, а самим кодом), но здесь просто игнорируется.
1
|
||
|
1509 / 526 / 76
Регистрация: 22.09.2023
Сообщений: 1,669
|
||
| 03.10.2025, 11:05 | ||
|
0
|
||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
|
| 03.10.2025, 12:14 | |
|
В любом случае явная запись адресов нагляднее и безопаснее просто таблицы. Если что, можно свериться с даташитом, а не считать jrmp-ы и не гадать не удалилась ли случайно одна строчка.
1
|
|
| 03.10.2025, 12:14 | |
|
Мигание светодиода по переполнению счетчика
MP430. Timer0. Compare mode Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|