09/03/05 00:32:45
>>72
いまCodeWarriorっていうIDEのOSSなプラグインを改造して、WIN(VC++)+UNIX(gcc)で
使えるツールに仕立てようとしています。機能は組み込み開発用デバッグアダプタの
USB越しのコマンド制御で、レジスタ読んだりMCUステップ実行させたりします。
扱う型自体はu?int(8|16|32)_t(かそれをtypedefした/enumで結果的にいずれかに
落ちた)型だけです。パック・アンパックはホスト側でだけですが、ターゲットのエンディアンは
MCUで異なるのと、ホストもx86以外もあるのでhtonlなどの他、htoll(host-to-littelong)
なども用意して使っています。
memcpyだとエンディアン変換で面倒云々は
myfunc(uint32_t hoge) {
hoge = htoll(hoge);
memcpy(buff, &hoge, 4)
などアドレス取るために行数が倍になるという話です。ここは一行にまとめて書けるstructや
パッキング関数に渡す方法のほうがすっきりします。
既に一度ざっと移植したのですが、元ソースが
*(unsigned int *)(data + 2) = hogehoge;
data[6] = hoge;
*(unsigned char *)(data + 7) = fugafuga & 0xFF;
とかややぐちゃっとしてるので、もっとすっきりとUSBで流し込むバイト列の生成が
できないかなぁと質問してみました。まあせいぜいコマンド1つあたり5変数程度
パックするだけなんで、大問題というより途中から面白くなってきたのでやってるのですが。