2010年7月2日金曜日

下で、kitaxさんからコメントをいただいている通り、じつはこれ、リンカ最適化の"-O"オプションで制御されます。
前回の結果はMakefileのこのオプションがコメントアウトされていて、"-O0"な状態でコンパイルされていたわけです。
で、これを"-Os"でやり直してみると、、

ver 3.4.6 では、

138 PORTB = 0x55;
139 84: 85 e5 ldi r24, 0x55 ; 85
140 86: 88 bb out 0x18, r24 ; 24

ver 4.4.3 でも、

120 64: 25 e5 ldi r18, 0x55 ; 85
:
152 PORTB = 0x55;
153 7c: 28 bb out 0x18, r18 ; 24

と、ちゃんと outを使った内容にコンパイルされます。コードサイズはそれぞれ、
ver 3.4.6

1 /usr/local/avr-gcc3/bin/avr-size led.elf
2 text data bss dec hex filename
3 154 0 0 154 9a led.elf

ver 4.4.3

1 /usr/local/avr-gcc4/bin/avr-size led.elf
2 text data bss dec hex filename
3 148 0 0 148 94 led.elf

と、ぎゅっと小さくなっています。 おそまつさま、、
割り込みを使わないこのプログラム、実はさらにコードサイズを小さくする秘策が、、

++ Myself ++

普通(?)のサラリーマン -- 生活のすきま時間にキーボードとはんだごてを持ち替えてプログラミングと電子工作してます