|
5 / 5 / 0
Регистрация: 03.09.2013
Сообщений: 79
|
||||||||||||||||||||||||||||||||||||||||||||||
Некорректно работает прошивка. Должна мигать светодиодом при переполнении TIMER023.09.2025, 17:24. Показов 2949. Ответов 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
|
||
|
1508 / 525 / 76
Регистрация: 22.09.2023
Сообщений: 1,660
|
|
| 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
|
|||||||||||||
|
1508 / 525 / 76
Регистрация: 22.09.2023
Сообщений: 1,660
|
|||||
| 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
|
||||||||||||
|
1508 / 525 / 76
Регистрация: 22.09.2023
Сообщений: 1,660
|
||
| 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
|
|||||||
|
1508 / 525 / 76
Регистрация: 22.09.2023
Сообщений: 1,660
|
|
| 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|