ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
245766
bialix-lazy (31.03.2011 14:26, просмотров: 7334)
проблема с avr-gcc: столкнулся с тем, что avr-gcc переставляет инструкции как считает нужным, при этом ломается логика программы. Как с этим бороться?Простой пример: нужно проверить, что 2х байтная переменная не равна нулю. Переменная может изменяться в прерываниях, поэтому я использую защитный код для временного отключения прерываний:bool test(unsigned short *var){ unsigned char sreg_copy = SREG; cli(); bool result = *var != 0; SREG = sreg_copy; return result;}После компиляции вижу, что в ассемблерном коде порядок выполнения такой:bool test(unsigned short *var){ unsigned char sreg_copy = SREG; cli(); SREG = sreg_copy; bool result = *var != 0; return result;}Параметры оптимизации s (по размеру), при использовании 2 тоже самое. При худшей оптимизации имеем чересчур раздутый код.Есть ли способ сказать компилятору, что переставлять инструкции нельзя?