Ubuntu 9.10 + Codesourceryで、textサイズがデカくなることがわかったので、MP3プレーヤのコードをちゃんとビルドできるかどうかが心配になりました。なにしろ、450KBになっていますので。実際に引っ越し作業をやってみると。。
やっぱり512KBのフラッシュに収まらなくなってしまいました。
「オイオイ、70KBも激太りかよ。」と悪態をつきたくなります。じつは、textだけでなくUSB RAM空間も足りなくなっていたのですが、そちらは aligned 属性を使ってUSB OHCI用のバッファのメモリ境界を指定した場合の、メモリ確保動作が変わったらしく、複数のバッファを構造体に整理しなおすことで回避しました。textについては、不要なデバック用ルーチンを#ifdef で切り離してサイズ削減を計ったのですが、それでもまだ4KBも足りません。これ以上のダイエットも大変なので方針変更。これまで、-O2でコンパイルしていたところを-Osに変更。ビルドしてみると、効果てきめん!あっさり400KBに!!
サイズを優先するとスピードが犠牲になるのですが、MP3やAACの再生処理には充分な余裕があったので、とりあえず動作には問題はないようです。いやはや、新しい環境への引っ越しがこんなに面倒だとは。今後、いよいよ保守的になってしまいそうです。
やっぱり512KBのフラッシュに収まらなくなってしまいました。
/opt/arm-2009q3/bin/../lib/gcc/arm-none-eabi/4.4.1/../../../../arm-none-eabi/bin/ld: nxpmp3.elf section `.rodata' will not fit in region `flash' /opt/arm-2009q3/bin/../lib/gcc/arm-none-eabi/4.4.1/../../../../arm-none-eabi/bin/ld: region `flash' overflowed by 4692 bytes collect2: ld returned 1 exit status make: *** [nxpmp3.elf] エラー 1 $
「オイオイ、70KBも激太りかよ。」と悪態をつきたくなります。じつは、textだけでなくUSB RAM空間も足りなくなっていたのですが、そちらは aligned 属性を使ってUSB OHCI用のバッファのメモリ境界を指定した場合の、メモリ確保動作が変わったらしく、複数のバッファを構造体に整理しなおすことで回避しました。textについては、不要なデバック用ルーチンを#ifdef で切り離してサイズ削減を計ったのですが、それでもまだ4KBも足りません。これ以上のダイエットも大変なので方針変更。これまで、-O2でコンパイルしていたところを-Osに変更。ビルドしてみると、効果てきめん!あっさり400KBに!!
$ arm-none-eabi-size nxpmp3.elf text data bss dec hex filename 402296 1976 78184 482456 75c98 nxpmp3.elf $
サイズを優先するとスピードが犠牲になるのですが、MP3やAACの再生処理には充分な余裕があったので、とりあえず動作には問題はないようです。いやはや、新しい環境への引っ越しがこんなに面倒だとは。今後、いよいよ保守的になってしまいそうです。