|
gcc для AVR, слишком большой код |
|
|
|
Oct 5 2010, 06:41
|
Группа: Новичок
Сообщений: 7
Регистрация: 10-08-10
Пользователь №: 58 849

|
Здравствуйте. Я программирую на языке C для микроконтроллеров AVR при помощи компилятора gcc. Нашел такую интересную особенность. В приведенном ниже коде программа занимает место порядка 200 байт. Если раскомментировать закомментированную строку с объявлением функции delay_ms, программа резко полнеет до 350 байт. Никак не могу разобраться, почему. Не могли бы вы мне помочь. Упорное чтение Кернигана и Ричи не помогает. Куда гуглить просто не знаю. Заранее спасибо за ответ. Код #define WDR asm("wdr") //void delay_ms(int time);
void main(void) { delay_ms(1); delay_ms(1); }
void delay_ms(int time) { volatile int Timer, Timer1;
for (Timer=0; Timer<time; Timer++) for (Timer1=0; Timer1<51; Timer1++) WDR; } Заодно сразу показываю опции, которые передаю компилятору. Сам ничего крамольного в них не обнаружил. Код -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
|
|
|
|
|
 |
Ответов
|
Oct 5 2010, 07:53
|

developer
   
Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032

|
Не понятно для чего вы используете volatile для локальной переменной. Если без volatile, то тогда компилятор скорее всего разместит ее в регистре. Вот еще один путь снижения объема кода Код void delay_ms(int time) { int Timer1 = 51;
while(time--) while(Timer1--) WDR; } Здесь переменная Timer вообще не нужна. Операция сравнения с нулем выполняется быстрее, чем с каким-либо другим числом.
--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
|
|
|
|
Сообщений в этой теме
609 gcc для AVR Oct 5 2010, 06:41 777777 Цитата(609 @ Oct 5 2010, 10:41) Здравству... Oct 5 2010, 06:56 609 Цитата(777777 @ Oct 5 2010, 10:56) А како... Oct 5 2010, 06:59  777777 Цитата(609 @ Oct 5 2010, 10:59) Build suc... Oct 5 2010, 07:08 609 Компилирую при помощи WinAVR-20081205, прикрученно... Oct 5 2010, 07:24 777777 Цитата(609 @ Oct 5 2010, 11:24) Компилиру... Oct 5 2010, 07:30  609 Цитата(777777 @ Oct 5 2010, 11:30) 4.18 b... Oct 5 2010, 08:26   MrYuran Цитата(609 @ Oct 5 2010, 12:26) Вопрос не... Oct 5 2010, 08:35   Сергей Борщ Цитата(609 @ Oct 5 2010, 11:26) Если не и... Oct 5 2010, 10:23   zhevak Цитата(609 @ Oct 5 2010, 14:26) Вопрос не... Oct 5 2010, 10:50   609 Цитата(609 @ Oct 5 2010, 12:26) 4.18 b700... Oct 6 2010, 10:03    MrYuran Цитата(609 @ Oct 6 2010, 14:03) Листинг с... Oct 6 2010, 10:37     609 Цитата(MrYuran @ Oct 6 2010, 14:37) Если ... Oct 6 2010, 11:33   MrYuran Цитата(dimka76 @ Oct 5 2010, 14:39) А там... Oct 5 2010, 11:10    XVR Цитата(MrYuran @ Oct 5 2010, 15:10) Цитат... Oct 6 2010, 06:57 Dx! А чем макросы _delay_ms() и _delay_us() что идут с... Oct 5 2010, 20:58 MrYuran Вот ключи для более тонкой настройки инлайна и анр... Oct 6 2010, 11:42 609 Цитата(MrYuran @ Oct 6 2010, 15:42) Вот к... Oct 6 2010, 12:39
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|