Я не берегу каждый такт, но и раскидываться ими, особенно где код выполняется десяток раз за миллисекунду, не хочется. Но вообще при программировании придерживаюсь некоторых правил, по которым компилятор МОЖЕТ оптимизировать. Просто использую эти правила для увеличения быстродействия, а если компилятор этот момент не оптимизирует, исправить это не смогу, но каждый раз проверять стоит ли использовать это правило с компилятором для оптимизации или нет, не буду, просто буду этого правила придерживаться. К примеру, знаю, что с некоторыми компиляторами при условии if с ИЛИ, если первое выражение true, второе уже не проверяется, поэтому на первое место ставлю то выражение, которое по моим представлениям чаще другого истинно. При этом я не знаю как ведёт себя avr компилятор и использует ли такую оптимизацию. Вообще до AVR я программировал только на Object Pascal, Free Pascal. А тут в Си заинтересовала возможность объявления переменных перед первым использованием. Так код намного лучше понимаем и комментировать проще.
Из того, что удалось выяснить. Если команды asm
- Код: Выделить всё • Развернуть
cpc r25, r1
brcc .+24
это и есть сравнение и прыжок при "false", то разницы никакой, сравнение происходит на одной и той же по счёту инструкции. Но вот размер скомпилированной программы отличается. Скомпилированная программа с объявлением переменной в начале функции, а не перед первым использованием, почему-то на 20 байтов меньше. Как в gdb дизассемблировать всю программу, а не только функцию, я пока не нашёл.
В итоге, моё исследование показало, что объявление переменной перед её использованием в блоке if на скорость до if не влияет, а вот размер программы увеличивает, почему-то. А размер программы для контролера критичен. Так что лучше объявлять переменные в начале. ИМХО. Но исследование может быть ошибочно в силу не знания asm для котроллера avr.