|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
||||||||||||||||||||||||||||||||||||||||||||||
Некорректно работает прошивка. Должна мигать светодиодом при переполнении TIMER023.09.2025, 17:24. Показов 3080. Ответов 47
Здравствуйте!
Когда-то давно, для общего развития, учился писать на ассемблере для avr и достиг неких результатов. Всё благодаря участникам данного форума, которые проявили ко мне невероятную терпимость! Теперь было решено, одну из программ переписать с ассемблера на си в рамках факультатива. Но что-то пошло не так и я не смог разобраться что именно, но зацепка есть. Программа на ассембере
Проверил с помощью `avr-objdump`, судя по всему, некорректно формируются первые ячейки program memory, через которые и происходит прыжки при прерывании. `avr-objdump` программы на ассемблере:
Добавлено через 1 час 13 минут Смог найти в чём проблема. Нужно убрать флаг `-nostdlib`. Добавлено через 56 минут Гыгы, ещё в ассемблерной части, была ошибка, было так:
А совсем правильно так:
1
|
||||||||||||||||||||||||||||||||||||||||||||||
| 23.09.2025, 17:24 | |
|
Ответы с готовыми решениями:
47
SysTick можно ли с его помощью мигать светодиодом Не работает TIMER0 OVF Не работает TIMER0 OVF |
|
54 / 52 / 2
Регистрация: 23.01.2019
Сообщений: 385
|
||
| 25.09.2025, 11:35 | ||
![]() IntelHex 32-х битный, а avrasm2 создаёт 16-ти битные, если я ничего не путаю.. Возможно, если вы переведёте в другую битность, то и адреса поменяются. Я так глубоко не вникаю. Просто мне интереснее заниматься более творческими занятиями, чем биться с разными форматами и создавать и преодолевать прочие ненужные сложности. Что в результате получаю я? Работающие устройства. Что в результате получаете вы? То что у вас срабатывают прерывания, которые вы не разрешали. Тогда пожалуйта - дизассемблер вам в руки и ковыряйте вместо того, что бы создать что-то полезное Мне не жалко. В архиве тестовый исходник и файл скомпилированный в avrasm2. test.rar Но повторюсь, вы сами себе придумываете сложности.
0
|
||
|
1519 / 534 / 78
Регистрация: 22.09.2023
Сообщений: 1,698
|
|
| 25.09.2025, 11:39 | |
|
В документации указаны адреса векторов в словах. гцц использует байтовую адресацию. Одно слово из документации (и avrasm) равно двум байтам гцц. Знатная подлянка, подложенная авторами ядра AVR.
1
|
|
|
54 / 52 / 2
Регистрация: 23.01.2019
Сообщений: 385
|
||
| 25.09.2025, 11:43 | ||
|
Но почему у ТС прерывания срабатывают, которые он не назначал
0
|
||
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
|||||||||||||
| 25.09.2025, 11:45 [ТС] | |||||||||||||
|
Поскольку прошивка получается в бинарном формате, чтобы её отправить plain text'ом, её можно перевести в формат base64. А ещё, я не обратил внимание, что тут есть возможность прикрепить файл, я обычно общаюсь на форумах, где такой возможности нет. Затупил. )))Вот:
1
|
|||||||||||||
|
1519 / 534 / 78
Регистрация: 22.09.2023
Сообщений: 1,698
|
|||||
| 25.09.2025, 11:50 | |||||
|
Добавлено через 5 минут
0
|
|||||
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
||||
| 25.09.2025, 12:17 [ТС] | ||||
|
Конкретно данная проблема решена тем, что убрал флаг `-nostdlib`, т.к. с ним не формируется секция памяти программы для прерываний (векторов). Сейчас вопрос уже в другом. :^)
Но всё равно уточню. Повторюсь, что с этими проблемами разобрался. Добавлено через 18 минут При этом с кодом на ассемблере таймер работает как надо независимо от того, какие прерывания для timer0 я разрешил, главное, что разрешил. Могу привести более актуальный код, если интересно поучаствовать. (Но правильнее, наверное, будет создать новый топик.)
0
|
||||
|
54 / 52 / 2
Регистрация: 23.01.2019
Сообщений: 385
|
|||
| 25.09.2025, 12:51 | |||
Скажу больше, число 64 меня несколько возмутило ![]() Объясню почему. Не так давно я пытался преобразовывать *.bmp изображения для вывода на дисплей. Сначала решил "выдирать" данные из бмп при помощи хекс-редактора. Но то что я увидел под виндой, было далеко от 8-ми или 16-ти бит ![]() В результате пришлось поизучать паскаль Работа с *.bmp изображением В содержание темы можно не вникать, там картинок достаточно. Добился кодирования изображений в RLE-сжатии до 8-ми цветов. Но это уже совсем другая история.. ))
0
|
|||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
|
||
| 26.09.2025, 08:46 | ||
|
1
|
||
|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
||||||||||||
| 26.09.2025, 10:30 [ТС] | ||||||||||||
0
|
||||||||||||
|
1519 / 534 / 78
Регистрация: 22.09.2023
Сообщений: 1,698
|
||
| 26.09.2025, 19:09 | ||
Сообщение было отмечено Medusa Kaiser как решение
РешениеВсе другие прерывания тоже срабатывают пока таймер дотикает до переполнения. Просто в ассемблерном исполняемом коде у вас на месте остальных векторов пусто, там остается код "все единицы" из стертого флеша, которые (кажется) являются кодом операции NOP и при возникновении любого разрешенного прерывания исполнение "проваливается" по этим кодам до существующего обработчика переполнения, а в библиотечном коде гцц все неиспользуемые вектора забиты "заглушками" из одной команды reti и попав в любое другое прерывание ядро выполняет reti и выходит из него.
2
|
||
|
54 / 52 / 2
Регистрация: 23.01.2019
Сообщений: 385
|
|
| 26.09.2025, 19:15 | |
|
1
|
|
|
54 / 52 / 2
Регистрация: 23.01.2019
Сообщений: 385
|
|||||||||||
| 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
|
|||||||
|
1519 / 534 / 78
Регистрация: 22.09.2023
Сообщений: 1,698
|
|
| 28.09.2025, 01:35 | |
|
Напишите свою таблицу векторов по примеру https://github.com/avrdudes/av... t1/gcrt1.S, подключите к проекту (с -nostartfiles, чтобы не было конфликтов) и пересоберите.
Скормить дизассемблированный код ассемблеру - задача непростая, тут уж точно, проще hex-редактором поправить двоичный код.
0
|
|
|
658 / 411 / 76
Регистрация: 21.09.2008
Сообщений: 1,412
|
||
| 28.09.2025, 09:42 | ||
![]() Можно попробовать 010 Editor. Испытательный срок 30 дней. Поддерживает множество форматов.
0
|
||
|
54 / 52 / 2
Регистрация: 23.01.2019
Сообщений: 385
|
|
| 28.09.2025, 09:55 | |
|
Я может меркантильный
, но какой практический смысл нопить сишную прошивку..И вообще, как я раньше жил без этих знаний ..и даже писать что-то получалось
0
|
|
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
|
||||
| 28.09.2025, 11:11 | ||||
|
Но учитывая, что ТС хочет всего лишь проверить таблицу прерываний, можно и правда влезть руками в *.hex и поправить пару первых строк.
0
|
||||
|
54 / 52 / 2
Регистрация: 23.01.2019
Сообщений: 385
|
||
| 28.09.2025, 11:44 | ||
![]() Наверное многие столкнулись с такой ситуацией первый раз, невзирая на опыт. Поэтому и не сразу вопрос разрешился. А нужно было всего лишь, или использовать gcc, или писать полную таблицу векторов на асме, или не использовать непонятную запись (1<<1), а вместо неё писать 0b0000_0001 или (1<<TOIE0). Вобщем я за соблюдение элементарных правил + подсветку синтаксиса, тогда и отвлекаться меньше придётся
0
|
||
|
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,087
|
||||||||
| 28.09.2025, 14:13 | ||||||||
P.S. кстати, я не следил, в стандарт языка С ввели наконец 0b или оно так и остается "нестандартным".
0
|
||||||||
| 28.09.2025, 14:13 | |
|
Мигание светодиода по переполнению счетчика
MP430. Timer0. Compare mode Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|