для использования функций _delay_ms() и _delay_us() оптимизация должна быть включена, иначе они сожрут всю память и не факт, что будут работать, как надо.
In order for these functions to work as intended, compiler optimizations must be enabled, and the delay time must be an expression that is a known constant at compile-time. If these requirements are not met, the resulting delay will be much longer (and basically unpredictable), and applications that otherwise do not use floating-point calculations will experience severe code bloat by the floating-point library routines linked into the application.
аналогично. отслеживаете в цикле приход 0 (старт бит)
делаете половинную задержку (чтобы попасть на середину импульса)
А потом через каждую полную задержку считываете состояние порта и добавляете их в регистр памяти со сдвигом
- сплошная плавающая арифметика. Без оптимизации все будет скомпилировано "как есть", с подключением плавающей точки. Что и вынесет всю память и задержку еще увеличит. Если включена оптимизация, и аргументом функции является константа (а это тоже необходимое условие), то компилятор сам все посчитает и соптимизирует код до нескольких(или до одного) пустых циклов с вычисленными заранее значениями счетчиков. Если оптимизацию включить, но передавать в функцию не константу, а значение переменной, то толку тоже не будет, т.к. опять все вычисления будут в процессе выполнения с использованием плавающей точки.
пытаюсь выловит баг в проге
после выполнения тела обработчика прерывания рабочая точка с какого то дуру прыгает ПРЯМО сюда
mode_button я нигде принудительно в ноль не выставлял !
это шшо баг студии или баг моей проги ?
как понять ?
Для Atmega128 пишу программу, скажем для "домофона". Только учусь. Возникла проблема, на которую не могу найти конкретного решения. Смотрел по темам- подобное находил но проблему они, к сожалению, не решали. Вот что пишу:
Вот выдержка из программы. Когда пробую проверить работоспособность программы, на моменте ".DB 0b00000001 , 0 " выдает ошибку "AVR Simulator: Invalid opcode 0x0001 at address 0x000024". Подскажите пожалуйста как же ее можно побороть.
У тебя управление попадает в секцию с данными!
Оно тебе надо так?
Или вынеси данные заведомо за область выполнения кода, или "перепрыгнуть" данные можно. Спойлер
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Скажи "СПАСИБО", что 4.19 ПОКА еще бесплатная...
А 6-я основана на компонентах микрософта - без оных работать не будет в принципе.
Это "привязка" к продукту, абы не соскочили.
FreshMan, они дают AVR toolchain под линукс. А редакторов (сред разработки) под линкус и так хватает. Ну, разве что, с симулятором не так всё гладко.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)