.comment-link {margin-left:.6em;}

r-fukai's Diary ausf blogger

火曜日, 11月 22, 2005

問題が一つ解決しても

昨日から引っかかっていた問題は、クロス開発環境において、ホスト側では何の問題も発生せず、組み込み側で派手にデータが壊れるという、まぁ大概の場合はメモリリークしてスタックなりを破壊している場合に起きる症状を示していたのであった。
んが、コードをいくら探してみたところでそのような場所は見当たらず、途方に暮れるしかなかったのが昨日までの私であった。
昨日は、組み込み環境側ではprintfが使えないと書いたのだけれども、探してみたらちゃんと使えることが判り、動作の怪しげな箇所に仕込んでみたところ、どうも内部で持っているテーブルに関連する辺りで変な値が入っているということまで判った。
しかしながらそのテーブルは、組み込み側では浮動小数点演算ができないのであらかじめ計算しておいたものを持たせているもので、削って自前で計算させるわけにも行かない。
さてどうするかと思いつつ、開発環境のドキュメントを読んでいるとこんな記述にぶつかった。
「この環境では、大域変数と静的変数は使えません」
まさにテーブルというのは大域変数だったり静的変数だったりするわけで、動かないんだったらホスト側のコンパイラなりエミュレータなりで警告してくれれば良いものを、全くのスルーで全く正常に動いたりするのである。勘弁して。
しょうがないのでリソースから(何故か文字列とイメージとこの環境で使用する特殊なデータ形式しか登録できないので、文字列で持たせて読み込んでから変換しなければならなかったのだが)読み込むことにしてやっと一件落着。まぁ大域変数なんか使ってる私が悪いのだけれども、元はJavaのコードだったので、そちらでは定数にして持たせていたものなのだった。それをCに持ってくる場合に、大域変数以外の実装はちょいとばかり面倒だったのである(この辺は私の知識が足りないだけなのかもしれない)。
というわけで、当面の懸案はなくなったのだけれども、年末年始は働き通しになりそうなスケジュールが申し渡されたので忙しい状況に変化はまるでないのである。どっとはらい。