|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
||||||||||||||||||||||||||||||||||||||||||||||
Некорректно работает прошивка. Должна мигать светодиодом при переполнении TIMER023.09.2025, 17:24. Показов 2676. Ответов 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
Сообщений: 378
|
|||
| 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
|
|||||||||||||
|
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,073
|
||||||
| 28.09.2025, 16:23 | ||||||
|
И да, там действительно иногда приходится вручную ставить биты, поскольку китайцам прописать все дефайны было лень. В общем, лучше сразу не привыкать к плохому стилю. Если выставляются именованные биты, пишем (1<<bitName). Если поименовать их забыли, пишем (1<<x). А запись 0bxxx оправдана только для битовых полей TCCR1B = (0b11<<WGM12) | (0b001<<CS10), и то только потому что для них производитель почти никогда не пишет констант. Приходится пояснять в комментариях.
1
|
||||||
|
51 / 49 / 2
Регистрация: 23.01.2019
Сообщений: 378
|
|
| 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
|
|
|
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,073
|
||
| 28.09.2025, 23:50 | ||
|
А 0xFFFF это, повторяю, чистая флеш, которая интерпретируется как "Illegal instruction". Точнее, интерпретировалась бы бы, поддерживай AVR такую ситуацию. В более мощных камнях это приводит к исключению (это почти как прерывание, но генерируется не периферией, а самим кодом), но здесь просто игнорируется.
1
|
||
|
1507 / 524 / 75
Регистрация: 22.09.2023
Сообщений: 1,654
|
||
| 03.10.2025, 11:05 | ||
|
0
|
||
|
4147 / 2725 / 433
Регистрация: 09.09.2017
Сообщений: 12,073
|
|
| 03.10.2025, 12:14 | |
|
В любом случае явная запись адресов нагляднее и безопаснее просто таблицы. Если что, можно свериться с даташитом, а не считать jrmp-ы и не гадать не удалилась ли случайно одна строчка.
1
|
|
| 03.10.2025, 12:14 | |
|
Мигание светодиода по переполнению счетчика
MP430. Timer0. Compare mode Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|