月別アーカイブ: 2010年4月

AVR gcc

LEDを点滅させるプログラムをコンパイルしていたら次の様なエラーがでました。
avr-gcc -mmcu=attiny2313 -Os -o m1-5-1List.out m1-5-1List.c
m1-5-1List.c: In function ‘_delay_ms’:
m1-5-1List.c:72: internal compiler error: Illegal instruction
Please submit a full bug report,
with preprocessed source if appropriate.
See
for instructions.

別のプログラムは問題無くコンパイル出来るので調べてみると
gcc 4.3.2(WinAVR20081205)とgcc 4.3.3(WinAVR20100110)のどちらでも発生
ネットでは同じ問題はみつからなかった
最適化しないと問題ない(しかしdelay.hで警告がでる)
_delay_ms()を使わなければ問題ない
PCを変えると発生しない(2000=NG,XP=OK)
メモリのサイズなのかOSの問題なのかは不明
もしかして Illegal instructionて使ってCPUが古いから?
対応のCPUの種類までは書いてなかったような気が

4/17追記
_delay_msでエラーになる問題は
-fno-guess-branch-probability
を追加することで出なくなりました。でもまだIllegal instructionがでるプログラムがあります。
やはり最適化のロジックで使用しているCPUにない機能を使っているようです。
gccをソースからコンパイルすれば解決しそうですが環境を作る必要があります。