|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
||||||||||||||||||||||||||||||||||||||||||||||
Некорректно работает прошивка. Должна мигать светодиодом при переполнении TIMER023.09.2025, 17:24. Показов 2973. Ответов 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
|
||
| 25.09.2025, 11:35 | ||
![]() IntelHex 32-х битный, а avrasm2 создаёт 16-ти битные, если я ничего не путаю.. Возможно, если вы переведёте в другую битность, то и адреса поменяются. Я так глубоко не вникаю. Просто мне интереснее заниматься более творческими занятиями, чем биться с разными форматами и создавать и преодолевать прочие ненужные сложности. Что в результате получаю я? Работающие устройства. Что в результате получаете вы? То что у вас срабатывают прерывания, которые вы не разрешали. Тогда пожалуйта - дизассемблер вам в руки и ковыряйте вместо того, что бы создать что-то полезное Мне не жалко. В архиве тестовый исходник и файл скомпилированный в avrasm2. test.rar Но повторюсь, вы сами себе придумываете сложности.
0
|
||
|
1509 / 526 / 76
Регистрация: 22.09.2023
Сообщений: 1,669
|
|
| 25.09.2025, 11:39 | |
|
В документации указаны адреса векторов в словах. гцц использует байтовую адресацию. Одно слово из документации (и avrasm) равно двум байтам гцц. Знатная подлянка, подложенная авторами ядра AVR.
1
|
|
|
51 / 49 / 2
Регистрация: 23.01.2019
Сообщений: 380
|
||
| 25.09.2025, 11:43 | ||
|
Но почему у ТС прерывания срабатывают, которые он не назначал
0
|
||
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
|||||||||||||
| 25.09.2025, 11:45 [ТС] | |||||||||||||
|
Поскольку прошивка получается в бинарном формате, чтобы её отправить plain text'ом, её можно перевести в формат base64. А ещё, я не обратил внимание, что тут есть возможность прикрепить файл, я обычно общаюсь на форумах, где такой возможности нет. Затупил. )))Вот:
1
|
|||||||||||||
|
1509 / 526 / 76
Регистрация: 22.09.2023
Сообщений: 1,669
|
|||||
| 25.09.2025, 11:50 | |||||
|
Добавлено через 5 минут
0
|
|||||
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
||||
| 25.09.2025, 12:17 [ТС] | ||||
|
Конкретно данная проблема решена тем, что убрал флаг `-nostdlib`, т.к. с ним не формируется секция памяти программы для прерываний (векторов). Сейчас вопрос уже в другом. :^)
Но всё равно уточню. Повторюсь, что с этими проблемами разобрался. Добавлено через 18 минут При этом с кодом на ассемблере таймер работает как надо независимо от того, какие прерывания для timer0 я разрешил, главное, что разрешил. Могу привести более актуальный код, если интересно поучаствовать. (Но правильнее, наверное, будет создать новый топик.)
0
|
||||
|
51 / 49 / 2
Регистрация: 23.01.2019
Сообщений: 380
|
|||
| 25.09.2025, 12:51 | |||
Скажу больше, число 64 меня несколько возмутило ![]() Объясню почему. Не так давно я пытался преобразовывать *.bmp изображения для вывода на дисплей. Сначала решил "выдирать" данные из бмп при помощи хекс-редактора. Но то что я увидел под виндой, было далеко от 8-ми или 16-ти бит ![]() В результате пришлось поизучать паскаль Работа с *.bmp изображением В содержание темы можно не вникать, там картинок достаточно. Добился кодирования изображений в RLE-сжатии до 8-ми цветов. Но это уже совсем другая история.. ))
0
|
|||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||
| 26.09.2025, 08:46 | ||
|
1
|
||
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
||||||||||||
| 26.09.2025, 10:30 [ТС] | ||||||||||||
0
|
||||||||||||
|
1509 / 526 / 76
Регистрация: 22.09.2023
Сообщений: 1,669
|
||
| 26.09.2025, 19:09 | ||
Сообщение было отмечено Medusa Kaiser как решение
РешениеВсе другие прерывания тоже срабатывают пока таймер дотикает до переполнения. Просто в ассемблерном исполняемом коде у вас на месте остальных векторов пусто, там остается код "все единицы" из стертого флеша, которые (кажется) являются кодом операции NOP и при возникновении любого разрешенного прерывания исполнение "проваливается" по этим кодам до существующего обработчика переполнения, а в библиотечном коде гцц все неиспользуемые вектора забиты "заглушками" из одной команды reti и попав в любое другое прерывание ядро выполняет reti и выходит из него.
2
|
||
|
51 / 49 / 2
Регистрация: 23.01.2019
Сообщений: 380
|
|
| 26.09.2025, 19:15 | |
|
1
|
|
|
51 / 49 / 2
Регистрация: 23.01.2019
Сообщений: 380
|
|||||||||||
| 27.09.2025, 10:04 | |||||||||||
|
Проверил. avrasm2 у меня, поэтому адреса согласно дш.
при
ldi R16, (1<<OCIE0A) - не работает при
ldi R16, (1<<OCIE0A) - работает Полностью нужно таблицу векторов в коде писать. При сокращенном написании место во флеш не увеличится.
1
|
|||||||||||
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
|||||||
| 27.09.2025, 23:05 [ТС] | |||||||
Подскажите, пожалуйста, напоследок, как мне взять сишную программу, транслировать её сначала в ассемблерный код, а потом собрать? Я хочу в этих же местах поставить nop'ы, собрать и посмотреть что будет. :^)
0
|
|||||||
|
1509 / 526 / 76
Регистрация: 22.09.2023
Сообщений: 1,669
|
|
| 28.09.2025, 01:35 | |
|
Напишите свою таблицу векторов по примеру https://github.com/avrdudes/av... t1/gcrt1.S, подключите к проекту (с -nostartfiles, чтобы не было конфликтов) и пересоберите.
Скормить дизассемблированный код ассемблеру - задача непростая, тут уж точно, проще hex-редактором поправить двоичный код.
0
|
|
|
658 / 411 / 76
Регистрация: 21.09.2008
Сообщений: 1,411
|
||
| 28.09.2025, 09:42 | ||
![]() Можно попробовать 010 Editor. Испытательный срок 30 дней. Поддерживает множество форматов.
0
|
||
|
51 / 49 / 2
Регистрация: 23.01.2019
Сообщений: 380
|
|
| 28.09.2025, 09:55 | |
|
Я может меркантильный
, но какой практический смысл нопить сишную прошивку..И вообще, как я раньше жил без этих знаний ..и даже писать что-то получалось
0
|
|
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||
| 28.09.2025, 11:11 | ||||
|
Но учитывая, что ТС хочет всего лишь проверить таблицу прерываний, можно и правда влезть руками в *.hex и поправить пару первых строк.
0
|
||||
|
51 / 49 / 2
Регистрация: 23.01.2019
Сообщений: 380
|
||
| 28.09.2025, 11:44 | ||
![]() Наверное многие столкнулись с такой ситуацией первый раз, невзирая на опыт. Поэтому и не сразу вопрос разрешился. А нужно было всего лишь, или использовать gcc, или писать полную таблицу векторов на асме, или не использовать непонятную запись (1<<1), а вместо неё писать 0b0000_0001 или (1<<TOIE0). Вобщем я за соблюдение элементарных правил + подсветку синтаксиса, тогда и отвлекаться меньше придётся
0
|
||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||||||
| 28.09.2025, 14:13 | ||||||||
P.S. кстати, я не следил, в стандарт языка С ввели наконец 0b или оно так и остается "нестандартным".
0
|
||||||||
| 28.09.2025, 14:13 | |
|
Мигание светодиода по переполнению счетчика
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
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|