[an error occurred while processing this directive]
|
Проект писался под iar. Поэтому как рекомендует iar я все переменные поместил в структуру. В скомпилинном iar-ом коде индексный регистр, как я и ожидал не перезагружается. WinAvr же почему-то постоянно перезагружает индексный регистр. С чем это связанно? Можно ли как-то объяснить компилятору что делать это не следует? Вот например одно из мест gcc-ного компилятора:
....
++Adr->ShareSecond; // подсчитываем количество измерений
9e: e0 91 60 00 lds r30, 0x0060
a2: f0 91 61 00 lds r31, 0x0061
a6: 80 81 ld r24, Z
a8: 8f 5f subi r24, 0xFF ; 255
aa: 80 83 st Z, r24
Adr->ShareSecond=Adr->ShareSecond & 0x3F; // ограничиваем 64-мя измерениями
ac: e0 91 60 00 lds r30, 0x0060
b0: f0 91 61 00 lds r31, 0x0061
b4: 80 81 ld r24, Z
b6: 8f 73 andi r24, 0x3F ; 63
b8: 80 83 st Z, r24
i=ADCL;
ba: 24 b1 in r18, 0x04 ; 4
x=ADCH;
bc: 85 b1 in r24, 0x05 ; 5
Adr->AdcAdd+=i+(x<<8); // копим результаты замеров
be: e0 91 60 00 lds r30, 0x0060
c2: f0 91 61 00 lds r31, 0x0061
....
В конечном итоге если iar компилит код размером 439 байт, то gcc - 676. Это нормальная ситуация? К тому же в iar-e оптимизация вроде была отключена (сейчас iar-a нет, проверить не могу).
E-mail: info@telesys.ru