[an error occurred while processing this directive]
WinAvr вопрос по компилируемому коду. Поясните.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Igor 16 августа 2005 г. 15:21

Проект писался под 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: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru