- "чудеса" в отладке AVR: Работаю сейчас с камнем mega4809, в
отладчике иногда вижу чудеса (проскакиваю через инструкции,
выполняется несколько за шаг и пр.) Попробовал сбросить галочку
кеширования флеша при отладке, - сразу всё встало на место,
поставил галочку опять - всё равно работает нормально :)) Будьте
внимательны,могёт быть и такое :) Adept(342 знак., Вчера, 02:39, AVR, картинка)
- как тут правильно выставить фузы (avrdude и m8515)? @Nest_Andart(358 знак., 14.01.2026 22:18, AVR, картинка, полностью)
- Попалась явно контрафактная Atmega328P: не читаемая маркировка (как
будто стершаяся) и device signature от ATA6614Q - AlexG(07.01.2026 19:23, AVR, полностью)
- Кто-нить может объяснить шоцетакЭ ? Размещаю .db-константы во
флеши, если даю несколько аргументов после ".db", то вроде всё
корректно, но удобно и логично было бы декларировать побайтово. Вот
тут и получается жопа, если после директивы ".db" стоит один байт,
то к нему прицепляется второй "00", приходится размещать ряд
значений с переносом строк "\" после каждого Но и тут засада :( Adept(200 знак., 18.12.2025 00:05 - 01:11, AVR, картинка, полностью)
- Асм значит асм. Попробуйте GAS (GNU Assembler). SciFi(1 знак., 18.12.2025 11:59, ссылка)
- Флешь в AVR 16-ти разрядная же! Так что всё правильно. Проц же не
может записать только половину ячейки? :)) Если младшая половина
07, а старшая не определена, то пусть старшая будет 0, это логично
(байт 07 и слово 0007 - одинаковы) - vpv.vpv(18.12.2025 11:36)
- разобрался. Этя скажу вам - эпик фейл. Пипец просто :( Adept(830 знак., 18.12.2025 00:21 - 01:14)
- Так всегда и было в авровском асме, странно, что только наткнулся.
В сях на усмотрение компилятора. Если надо подряд - то используешь
структуру и прагму паковки. - Andreas(18.12.2025 08:53)
- Ассемблер так делал ещё в незапамятные времена. GCC (у меня
старинный WinAVR 10-го года) - сам догадывается паковать
последовательные строки в памяти. Насчёт "просто" констант - не
подскажу, не требовались они мне. - Toчкa oпopы(18.12.2025 07:56)
- Давно не брал в руки шашек. У сабжевых процов вообще возможна ли
побайтовая адресация к флешу? Он жеж вроде напрочь 16-битный? - LightElf(18.12.2025 04:42)
- да ну... есть DB, DW - всегда своя директива под разрядность. Я хз
за АВР, но мне кажется это глупостью... POV(95 знак., 18.12.2025 00:24)
- Вопросы выравнивания были всегда, начиная с i8086. - vpv.vpv(18.12.2025 11:39)
- это мешает много где. Если размещаешь, к примеру, таблицу функций,
ну скажем состоящую из кусков, и если в каком-то куске - нечётное
количество точек, то получишь в этом месте "0". Очень неприятный
эффект :( или вот как у меня в данном примере: Adept(547 знак., 18.12.2025 00:55)
- да, так и есть, .DB, .DW, .DQ (подозреваю, что в настройках IDE или
опций компилятора где-то стоит "птичка" "выравнивать флеш-константы
по чётным адресам"... Но да, глупость какая-то. Обнаружил
соверщенно случайно на отладке в симуляторе :( - Adept(18.12.2025 00:25)
- __attribute__((packed)) в объявлении переменной или ее типа, не
помогает? - Nikolay_Po(18.12.2025 00:24)
- Проблема: измеряю напряжение с АЦП - контроллер Mega8535. Использую 2 канала (пока). По 1-му каналу считывается ок, по 2-му - ощущение, что 1-й канал влияет на 2-й, потому что при изменении напряжения на 1-м канале напряжение на 2-м такое же минус OlegALL(8226 знак., 17.02.2014 23:44 - 19.02.2014 08:53, AVR, полностью)
- Господа, что можно прикупить чтобы через USB шить атмеги, но
обязательно с прогой от AvReal? Ибо куча написано батников для всей
продукции, сейчас надо перейти с самопального программатора на
что-то что можно без проблем купить на Озоне. Батники переделывать
лень и неохота наделать ошибки которые потом возвращать с
какого-нибудь Сахалина... - Ralex(01.12.2025 19:15, AVR, полностью)
- Мы на производстве, при массовом тиражировании, используем клон AVR
ISP-II от Olimex, работает везде и со всем, на что фантазии хватит.
Командная строка (STK500, AtBackEnd), GUI всякие - студии,
CodeVision, ну и AvReal, разумеется. Очень практичная и надёжная
вешь! Запитывает сам схему по +5В (платы не нужно запитывать от
БП). Рекомендую! vpv.vpv(89 знак., 02.12.2025 08:56, ссылка)
- Типа такого, наверное? reZident(2 знак., 01.12.2025 20:18, ссылка, картинка)
- Дык FTDI. Конкретнее FT2232C. Не помню, довел ли Александр до
завершения свою идею заюзать более распространенную FT232R, но "С"
у меня уже много лет исправно трудится... - Гyдвин(01.12.2025 19:49 - 20:00)
- Работа m4809 (AVR0) под отладчиком при пониженном питании (мож кому
пригодится) Adept(2104 знак., 13.11.2025 22:26, AVR, полностью, +1)
- Субботнее. Надо для лаборатории сделать простой девайс с
бистабильным реле, управляемым по rs232. Токи минимальные, но
требования - чтобы проц спал между командами, не создавал наводку.
Питание батарейное. Думаю сделать на arduino nano. Ток выхода 40мА
Реле управляется 20мА 5в, 1 обмотка . Вроде должно работать без
драйвера на MOSFET, это прикольно. После команды CPU отправляется в
power down с отключением кварца. Пробуждение - от GPIO
подсоединенного к ноге Rx. Должно Mty1(163 знак., 09.11.2025 00:43 - 01:37, AVR, полностью)
- вопрос пиководам - эт шо, в пиках таймеры такие уёбищные, что
мелкочип в новых мегах их засунул (timer type B). Недавно
разбирался с ними, охренел от убогости, а именно Adept(3153 знак., 20.10.2025 03:22, AVR, полностью)
- Коллеги напомните пожалуйста. Мега16. Включен внутренний опорник
2.56 в кажись. Ножку меги AREF нужно подключать к внешнему
конденсатору? Balda(75 знак., 03.10.2025 09:40, AVR, полностью)
- Без конденсатора шуметь будет. Если это не критично, например
фильтруешь/усредняешь показания АЦП, или точность нужна плюс минус
лапоть, то можно и не надо. - Codavr(10.10.2025 19:39)
- Желательно. - Cкpипaч(06.10.2025 09:07)
- Ставили 0,01 мкф. - carlosh(06.10.2025 08:44)
- Зависит от "шумности" схемы. По сути, нога AREF подключена напрямую
к внутреннему компаратору. По этой ноге мультиметром можно
замерить, например, внутренюю опору 1,1В в Меге48РА. Когда-то
ставили внешние кондёры 0,1 мкФ, после (лет 5-7 назад) перестали,
АЦП и так прекрасно работает. - vpv.vpv(06.10.2025 08:29)
- Там достаточно несколько нФ. Но ставить надо обязательно.
Нормальная работа без этого конденсатора возможна, и зависит от
партии МК, температуры и фазы луны. - il-2(03.10.2025 12:14)
- Ставили максимальный керамический Np0 - De_user(03.10.2025 11:30)
- The internal voltage reference may thus be decoupled by an external
capacitor at the AREF pin to improve noise immunity megajohn(1 знак., 03.10.2025 09:59, картинка)
- Появилось странное но неутолимое желание принудить обработчик
прерывания не сохранять и не восстанавливать регистры. С обычными
функциями __task (или как раньше __C_task) решает эту задачу, а вот
вкупе с __interrupt дает ошибку. Предложите как утолить мое желание
средствами IAR AVR. - Codavr(30.05.2025 09:10, AVR, полностью)
- У AVR-GCC была возможность глобально зарезервировать регистр(ы)
проца, тогда компилятор перестает этот регистр использовать и,
соответственно, не сохраняет-восстанавливает его. Может такое
применить? - LightElf(02.06.2025 16:21)
- Зачем? Если нужно уменьшить время в прерывании, то нужно меньше
кода в нём. Ведь сохраняются не все регистры, а только те, которые
используются в прерывании. Ещё такое может понадобиться для
переключения стека в многопоточной системе. Тогда на асме надо
обработчик делать. - Ale3000(30.05.2025 12:30)
- Если в прерывание вставить вызов другой функции, самой простейшей,
то компилятор уже НЕ видит, какие регистры используются, и пихает в стек вобще всё.
Поэтому я уже много лет использую __raw - vpv.vpv(02.06.2025 07:30)
- Вот как это выглядит в листинге. В регисторовой паре R15:R14 лежит
текущий указатель на нужную функцию. Функция "портит"только пару
регистров. Её вызов происходит мгновено (команда MOVW - 1 такт). А
вот преамбулы и послеамбулы прерывания из-за косвенного вызова
длятся невыносимо долго и бестолково. vpv.vpv(1 знак., 02.06.2025 07:42, картинка)
- Так тут у вас функция вызывается по указателю. Конечно, компилятор
не может знать, куда в данный момент указывает указатель. Если
функцию вызывать напрямую, то компилятор не будет сохранять
неиспользуемые регистры. - Ale3000(02.06.2025 09:09)
- А вот примерно то же самое, но с "__raw" и зарезервированными
регистрами под т.н. "аппаратный стек" :)) Прерывание отрабатывает в разы быстрее: vpv.vpv(1 знак., 02.06.2025 07:54, картинка)
- ХЗ, конешно, но само понятие прерывания подразумевает, что нужно
быстро вычитать куда-то или, наоборот, записать и поднять флаг, что
было такое. И всё. Когда в прерывании надо сохранять кучу
регистров, это чота в консерватории надо менять. - mse homjak(02.06.2025 10:55)
- Когда начинаешь решать реальные задачи, с ужасом осознаёшь, что мир
прерываний оказывается черевычайно велик и разнообразен. :-)))) - vpv.vpv(02.06.2025 13:25)
- Если важно выполнить действия по прерыванию, например, выполнить
расчёт параметров реального времени и это приоритетно, то почему бы
не делать это в прерывании? Я даже куски кода из main() выношу в
программные прерывания, чтобы поднять приоритет над фоном. Бывает,
из прерывания периферии, вызываю программное прерывание ниже
приоритетом, чтобы дать возможность для прерываний другой
приоритетной периферии, но, при этом обработать данные до возврата
в main(). - Nikolay_Po(02.06.2025 11:02)
- "Быстро", "куча" - это пустой звук, если нет цифр. А цифры бывают
оч. разные, такшта консерватория ещё поработает... - SciFi(02.06.2025 10:59)
- У меня с одного древнего проекта не пошедшего в серию осталась
прорва tiny15. Вот я их периодически расходую на всякую мелочевку.
А у нее стек аппаратный на 3 байта. Вот и чудю. Почти все уже
срасходовал. - Codavr(30.05.2025 12:54)
- Не удивительно, __task и __interrupt не совместимы, ибо требуют от
функции разного поведения: не сохранять и в то же время сохранять
регистры. А если так: ЫЫyкпy(121 знак., 30.05.2025 10:07)
- Делаешь вызов своей функции в ассемблере. Вот кусок кода из моего
старого проекта: il-2(344 знак., 30.05.2025 09:28)
- Взываю к силам коллективного разума - принесли плату с МК
ATMega-20AI со странными симптомами: МК работает на внутреннем
RC-генераторе до момента установки Fuse-битов, потом на выходе MISO
нули, причем SCK и MOSI от программатора просаживаются с 5 до 2
вольт. Питание 5 вольт, кварц 14.7456 Mhz функционирует и
дублируется на выходе CKOUT. - NeedHelp(04.06.2025 18:19,
, AVR, полностью)
- Опять говнокод не выходит. Дапамажице просраться! Toчкa oпopы(341 знак., 09.04.2025 23:11 - 10.04.2025 10:13, AVR, ссылка, полностью)
- Хоба!.. Проблема имеет более, чем одно решение. Нашёл у себя такую
непонятку, датированную 2022 годом. Toчкa oпopы(334 знак., 11.04.2025 12:32, ссылка)
- P.P.S. Пост вылез вверх из-за редактирования потери приложенного
файла. Оказывается, там ещё во время оно было что-то забаговано,
см. приложенный "шот" с Телесисек. Желающие - могут покопать
скрипты линкера. Сейчас мне не досуг в этом птичьем языке
разбираться. Попробую сборку от klen. Если не попустит - поставлю
все переменные глобальными. Toчкa oпopы(79 знак., 11.04.2025 00:14, ссылка, ссылка)
- Локальные переменные это стек, а указатель стека устанавливает
стартап, его смотреть и править откуда он берет его? - Andreas(10.04.2025 10:54)
- Не обижайтесь, если что. Попробуйте Arduino IDE в качестве среды с
AVR-GCC 12 или даже 14, какой там найдётся? Мне очень понравилось.
Писал свой код bare metal. Очень хорошо работает оптимизация -O3
-flto (нужно только ручками в конфигурационном файле самой IDE
прописать). Отладка, правда, не работает (я не выяснял даже, есть
ли?). Nikolay_Po(296 знак., 10.04.2025 09:44)
- Настроить параметры памяти ИДЕ mse homjak(1 знак., 10.04.2025 00:02, картинка)
- Всем привет! В среде AtmelStudio7 и CodeVisionAVR в настройках
проекта есть установка тактовой частоты МК. А в IAR где установить
этот параметр? - Fomich(03.04.2025 09:04, AVR, полностью)
- может кому пригодится, - синхронизация CMP/OVF таймеров RTC. Пока
тут искал и исправлял собственные баги, наткнулся на ожидаемое, и
неприятное поведение RTC, впрочем, вероятно свойственно и другим
таймерам, когда хочется использовать ресурсы таймера по максимуму,
в частности Adept(5820 знак., 12.03.2025 00:53 - 01:01, AVR, полностью)
- Нафига прерывание по переполнению, если можно вести счетчик и
каждый 10-й вызов выполнять дополнительные действия? - Vit(12.03.2025 08:25)
- Зачем счётчик? В прерывании будильника "А" (OCR1A или что там, в
4809) к нему прибавляется 1 мс, а в прерывании будильника "В" 10
мс. Таймер молотит без останова, с переходом FFFF -> 0000.
Будильники тоже. Арифметика вся беззнаковая, естессно, "только
вперёд". И всё. - vpv.vpv(12.03.2025 10:55)
- Любопытствую, зачем иметь в системе несколько разных часов? Вот
Эдди в прошлый раз тоже возмущался, что ему не хватает
стотыщмильенов таймеров. По-моему регулярные нечастные вызовы
вполне укладываются в КА более частых. Пришла очередь, проверили по
единым часам свой заданный timestamp - неа, еще пауза не прошла,
пропускаем - и bigloop или чего там у вас дальше движется. Главное,
чтобы часы тикали не реже, чем минимально необходимый квант времени
и переполнение их reZident(51 знак., 12.03.2025 11:13)
- Не часов, а несколько будильников иногда очень полезно. Всё от
задач зависит. У меня будильники формируют временные ворота для
приёма сигнала. Таймер молотит на основной частоте (20МГц), дискрет
50нс, счёт на доли микросекунд. Поэтому, всё максимально заведено
на аппарат. Бонус аппаратной реализации (в отличии от програмного
опороса) - отсутствие джиттера, чОткие времянки. - vpv.vpv(12.03.2025 13:50)
- обычно хватает "мягкого риалтайма" - один счетчик тикает без
остановки, а интервалы рассчитываются вычитанием беззнаковых.
"удлинить счетчик" - задача тривиальная. - Vit(12.03.2025 11:30)
- так легче и надёжнее всего разделяются два круга приоритетных
очередей задач. В быстром таймере - реалтайм драйверы, требующие
максимального внимания, в медленном, тоже реалтайм, но
второстепенные. Обычно у меня в 10mS живут драйвер какого-нить
дисплея, клавиатуры, индикаторов, всякие службы вайфаев с
блюпуппами с обработкой таймаутов и событий, звук и прочее такое. В
первом круге приоритетов - Adept(279 знак., 12.03.2025 11:19)
- Именно. Без лишних сущностей, как завещал великий Оккам. - SciFi(12.03.2025 11:14)
- чтобы не перегружать хэндлер. Во втором прерывании - второй круг
задач (обычно всякие второстепенные драйвера дисплеев, клавиатуры,
звук, шины и прочее такое - Adept(12.03.2025 10:54)