Diary/2007-2-13
MICSでSHプログラミング
MICS上のSHで動作させるサンプルプログラムとして,
とりあえずビットマップ画像のローダーでも書いてみようかと思った.
これに伴い,まずビットマップが表示できるデバイスをMICSに追加.
で,普通にCでプログラムを書いて走らせてみると,
アクセスしないはずのメモリエリアにがんがんアクセスする...
で,原因
- リトルエンディアンとビッグエンディアンの違いによる値の間違い
- bmpフォーマットの解析に使っていた構造体でalignされて予期しないアドレスの値を使用
1番目の方は,やれやれと思いながら,ntohみたいな関数を用意.解決.
2番目の方にはなかなか気づかなかった.
そして,MICSでプログラムを走らせる場合のデバッグの難しさを痛感.
これどうにか解決しないとなぁ.
ちなみに,解決方法は,gccの場合,構造体にattributeつけて
struct bitMapFileHeader{ unsigned short bfType __attribute__((packed)); unsigned int bfSize __attribute__((packed)); unsigned short bfReserved1 __attribute__((packed)); unsigned short bfReserved2 __attribute__((packed)); unsigned int offBits __attribute__((packed)); };
やれやれ.