Не даёт покоя один момент в коде программы.
Вкратце - есть прога на С, которую компилирует IAR C/C++ Compiler for AVR
5.10A/W32 (5.10.1.5).
Оптимизация на макс. скорость.
Вот фрагмент сгенерированного кода:
Код
159 for (a = length; a>0; a--)
\ 00000028 2F01 MOV R16, R17
160 {
161 *pBuffer++ = *text++;
\ ??usartSendCommand_4:
\ 0000002A 01F9 MOVW R31:R30, R19:R18
\ 0000002C 9115 LPM R17, Z+
\ 0000002E 019F MOVW R19:R18, R31:R30
\ 00000030 931D ST X+, R17
162 }
\ 00000032 950A DEC R16
\ 00000034 F7D1 BRNE ??usartSendCommand_4
\ 00000028 2F01 MOV R16, R17
160 {
161 *pBuffer++ = *text++;
\ ??usartSendCommand_4:
\ 0000002A 01F9 MOVW R31:R30, R19:R18
\ 0000002C 9115 LPM R17, Z+
\ 0000002E 019F MOVW R19:R18, R31:R30
\ 00000030 931D ST X+, R17
162 }
\ 00000032 950A DEC R16
\ 00000034 F7D1 BRNE ??usartSendCommand_4
Вот думаю, для чего надо выполнять каждую итерацию цикла команды MOVW?
Почему бы не выполнять их один раз перед/после цикла?
Не подскажете, уважаемые, каким образом образумить тупонький компилятор?

А то запарил он повсюду создавать подобную конструкцию...
ЗЫ: вспомнил, что по ИАРу есть отдельная ветка, если нужно, то пусть модераторы перекинут тему туда, извиняюсь...