|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
||||||||||||||||||||||||||||||||||||||||||||||
Некорректно работает прошивка. Должна мигать светодиодом при переполнении TIMER023.09.2025, 17:24. Показов 1835. Ответов 47
Здравствуйте!
Когда-то давно, для общего развития, учился писать на ассемблере для avr и достиг неких результатов. Всё благодаря участникам данного форума, которые проявили ко мне невероятную терпимость! Теперь было решено, одну из программ переписать с ассемблера на си в рамках факультатива. Но что-то пошло не так и я не смог разобраться что именно, но зацепка есть. Программа на ассембере
Проверил с помощью `avr-objdump`, судя по всему, некорректно формируются первые ячейки program memory, через которые и происходит прыжки при прерывании. `avr-objdump` программы на ассемблере:
Добавлено через 1 час 13 минут Смог найти в чём проблема. Нужно убрать флаг `-nostdlib`. Добавлено через 56 минут Гыгы, ещё в ассемблерной части, была ошибка, было так:
А совсем правильно так:
1
|
||||||||||||||||||||||||||||||||||||||||||||||
| 23.09.2025, 17:24 | |
|
Ответы с готовыми решениями:
47
SysTick можно ли с его помощью мигать светодиодом Не работает TIMER0 OVF Не работает TIMER0 OVF |
|
44 / 42 / 2
Регистрация: 23.01.2019
Сообщений: 326
|
||
| 25.09.2025, 11:35 | ||
![]() IntelHex 32-х битный, а avrasm2 создаёт 16-ти битные, если я ничего не путаю.. Возможно, если вы переведёте в другую битность, то и адреса поменяются. Я так глубоко не вникаю. Просто мне интереснее заниматься более творческими занятиями, чем биться с разными форматами и создавать и преодолевать прочие ненужные сложности. Что в результате получаю я? Работающие устройства. Что в результате получаете вы? То что у вас срабатывают прерывания, которые вы не разрешали. Тогда пожалуйта - дизассемблер вам в руки и ковыряйте вместо того, что бы создать что-то полезное Мне не жалко. В архиве тестовый исходник и файл скомпилированный в avrasm2. test.rar Но повторюсь, вы сами себе придумываете сложности.
0
|
||
|
1184 / 460 / 68
Регистрация: 22.09.2023
Сообщений: 1,397
|
|
| 25.09.2025, 11:39 | |
|
В документации указаны адреса векторов в словах. гцц использует байтовую адресацию. Одно слово из документации (и avrasm) равно двум байтам гцц. Знатная подлянка, подложенная авторами ядра AVR.
1
|
|
|
44 / 42 / 2
Регистрация: 23.01.2019
Сообщений: 326
|
||
| 25.09.2025, 11:43 | ||
|
Но почему у ТС прерывания срабатывают, которые он не назначал
0
|
||
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
|||||||||||||
| 25.09.2025, 11:45 [ТС] | |||||||||||||
|
Поскольку прошивка получается в бинарном формате, чтобы её отправить plain text'ом, её можно перевести в формат base64. А ещё, я не обратил внимание, что тут есть возможность прикрепить файл, я обычно общаюсь на форумах, где такой возможности нет. Затупил. )))Вот:
1
|
|||||||||||||
|
1184 / 460 / 68
Регистрация: 22.09.2023
Сообщений: 1,397
|
|||||
| 25.09.2025, 11:50 | |||||
|
Добавлено через 5 минут
0
|
|||||
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
||||
| 25.09.2025, 12:17 [ТС] | ||||
|
Конкретно данная проблема решена тем, что убрал флаг `-nostdlib`, т.к. с ним не формируется секция памяти программы для прерываний (векторов). Сейчас вопрос уже в другом. :^)
Но всё равно уточню. Повторюсь, что с этими проблемами разобрался. Добавлено через 18 минут При этом с кодом на ассемблере таймер работает как надо независимо от того, какие прерывания для timer0 я разрешил, главное, что разрешил. Могу привести более актуальный код, если интересно поучаствовать. (Но правильнее, наверное, будет создать новый топик.)
0
|
||||
|
44 / 42 / 2
Регистрация: 23.01.2019
Сообщений: 326
|
|||
| 25.09.2025, 12:51 | |||
Скажу больше, число 64 меня несколько возмутило ![]() Объясню почему. Не так давно я пытался преобразовывать *.bmp изображения для вывода на дисплей. Сначала решил "выдирать" данные из бмп при помощи хекс-редактора. Но то что я увидел под виндой, было далеко от 8-ми или 16-ти бит ![]() В результате пришлось поизучать паскаль Работа с *.bmp изображением В содержание темы можно не вникать, там картинок достаточно. Добился кодирования изображений в RLE-сжатии до 8-ми цветов. Но это уже совсем другая история.. ))
0
|
|||
|
4078 / 2676 / 432
Регистрация: 09.09.2017
Сообщений: 11,887
|
||
| 26.09.2025, 08:46 | ||
|
1
|
||
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
||||||||||||
| 26.09.2025, 10:30 [ТС] | ||||||||||||
0
|
||||||||||||
|
1184 / 460 / 68
Регистрация: 22.09.2023
Сообщений: 1,397
|
||
| 26.09.2025, 19:09 | ||
Сообщение было отмечено Medusa Kaiser как решение
РешениеВсе другие прерывания тоже срабатывают пока таймер дотикает до переполнения. Просто в ассемблерном исполняемом коде у вас на месте остальных векторов пусто, там остается код "все единицы" из стертого флеша, которые (кажется) являются кодом операции NOP и при возникновении любого разрешенного прерывания исполнение "проваливается" по этим кодам до существующего обработчика переполнения, а в библиотечном коде гцц все неиспользуемые вектора забиты "заглушками" из одной команды reti и попав в любое другое прерывание ядро выполняет reti и выходит из него.
2
|
||
|
44 / 42 / 2
Регистрация: 23.01.2019
Сообщений: 326
|
|
| 26.09.2025, 19:15 | |
|
1
|
|
|
44 / 42 / 2
Регистрация: 23.01.2019
Сообщений: 326
|
|||||||||||
| 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
|
|||||||
|
1184 / 460 / 68
Регистрация: 22.09.2023
Сообщений: 1,397
|
|
| 28.09.2025, 01:35 | |
|
Напишите свою таблицу векторов по примеру https://github.com/avrdudes/av... t1/gcrt1.S, подключите к проекту (с -nostartfiles, чтобы не было конфликтов) и пересоберите.
Скормить дизассемблированный код ассемблеру - задача непростая, тут уж точно, проще hex-редактором поправить двоичный код.
0
|
|
|
649 / 402 / 76
Регистрация: 21.09.2008
Сообщений: 1,385
|
||
| 28.09.2025, 09:42 | ||
![]() Можно попробовать 010 Editor. Испытательный срок 30 дней. Поддерживает множество форматов.
0
|
||
|
44 / 42 / 2
Регистрация: 23.01.2019
Сообщений: 326
|
|
| 28.09.2025, 09:55 | |
|
Я может меркантильный
, но какой практический смысл нопить сишную прошивку..И вообще, как я раньше жил без этих знаний ..и даже писать что-то получалось
0
|
|
|
4078 / 2676 / 432
Регистрация: 09.09.2017
Сообщений: 11,887
|
||||
| 28.09.2025, 11:11 | ||||
|
Но учитывая, что ТС хочет всего лишь проверить таблицу прерываний, можно и правда влезть руками в *.hex и поправить пару первых строк.
0
|
||||
|
44 / 42 / 2
Регистрация: 23.01.2019
Сообщений: 326
|
||
| 28.09.2025, 11:44 | ||
![]() Наверное многие столкнулись с такой ситуацией первый раз, невзирая на опыт. Поэтому и не сразу вопрос разрешился. А нужно было всего лишь, или использовать gcc, или писать полную таблицу векторов на асме, или не использовать непонятную запись (1<<1), а вместо неё писать 0b0000_0001 или (1<<TOIE0). Вобщем я за соблюдение элементарных правил + подсветку синтаксиса, тогда и отвлекаться меньше придётся
0
|
||
|
4078 / 2676 / 432
Регистрация: 09.09.2017
Сообщений: 11,887
|
||||||||
| 28.09.2025, 14:13 | ||||||||
P.S. кстати, я не следил, в стандарт языка С ввели наконец 0b или оно так и остается "нестандартным".
0
|
||||||||
| 28.09.2025, 14:13 | |
|
Помогаю со студенческими работами здесь
40
Мигание светодиода по переполнению счетчика
MP430. Timer0. Compare mode Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|