IAR ARM v4.40a.
Недавно очень долго боролся с программкой, которая никак не работала. Определенно глюк компилера.
CODE
volatile int x;
void func1()
{
... код какой-то
// если отработал, х не меняем и выходим
x=0;
}
int main()
{
x=1; func1();
if (x) ...; else ...
x=0; ....
return 0;
}
Суть: потом допер, полез в дизасм. Если в последних строках убрать х=0, то все как-бы работает. Но переменная используется дальше, так что это как-бы и не выход. А в том виде, как оно выглядит, первое присваивание х=1 просто выкидывается. Чтобы он этого не делал, нужно выключать оптимизацию напрочь. Но это ведь не выход, ибо текущий объем прошивки уже за 100 кб вышел.
Поборол косвенно - перестроив порядок команд. То есть искривив программу.
Вопрос: сталкивался ли кто и есть ли смысл обновлять до версии 5? Всё ли там пучком с оптимизатором?