TOPPERS/ASP用に、今までC++で作っていたライブラリをCに置き換えた。
ラッパだけ作ろうかと思っていたのだが、ASPでC++が動くかどうかよくわからなかったので、いつかやろうと思っていたこともあり、移植したのだ。
全部じゃないけど、RC-S620/SからACKが返ってきそうなコマンドの実装が終わったので、組み込む。
ライブラリなので、arm-none-eabi-arでまとめて.aファイルにし、リンク。
途中、memcpy()類がないということで怒られ、newlibを入れようかどうしようか迷ってビルドまで通しかけたものの、遅くてもいいや、ということで自前実装した。
NFCIDの生成にrand()も使ってたのだけど、そっちはもう固定値にした。
通ればよかろう、なのだ。
リンクが通ってasp.exeもできたので、TINY-Hを使って焼き、実行。
うん、CPU例外が発生するね。
default_exc_handler()の中でexcnoに例外番号が入る。
これは「例外のタイプ」らしく、私は3になった。
3は、ハードフォールト。英語で書くと、HardFault。
うーむ。
こういうときは、逆アセンブル表示させて細かく追おう。
これが、飛ぶ寸前のところ。
blx ?
Cortex-M3のことで検索すると、しばしば出てくるような気がする。
http://morizzos-buglife.blogspot.jp/2011/11/gcccortex-m3.html
ああ、blxというのはCortex-M3では使えないらしい。
gccで
- -mcpu=cortex-m3
- -mthumb
- -mthumb-interwork
くらいをつければよさそうだ。
これがまた、なかなかうまくいかなくてねぇ。
`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.
cc1plus: error: bad value (cortex-m3) for -mtune= switch
などといわれるので、ずっとあーだこーどやってた。
しかし、ここで文句を言っているのはcc1plus、コンパイルする前らしい。
そういえば、依存関係のために-MMしてたなあ。
というわけで、-MMのときにはインクルードパスの設定だけ渡して、コンパイル時に-mcpuなんかを渡すようにした。
blxもなくなった。
実行すると、CPU例外を起こさなくなった。
・・・起こさなくなっただけで、まだまだうごかんねー。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。