FreeRTOSでセミホスト表示
投稿:2013-03-22
開発環境がLPCXpressoと通信できていて、セミホストのプロジェクトならprintfで開発環境のコンソールに表示できるのだから、
FreeRTOSでもタスク間競合を別にして表示できてよさそうなので、頑張りました。
セミホストのプロジェクトを実行してアセンブラのステップ実行でセミホストの仕掛けを探った訳です。
あ、コレを使う時はプロジェクトのデバッガで起動時にセミホストを使う設定にしてください。
本当は__asmに対してパラメタを渡せるようで関数のパラメタを__asmへきちんとつなぐべきなのですが__asmへの渡し方がわからないので
関数の逆アセンブラを見て第1パラメタがr0に入るのがわかったのでそのまま利用しています。
ソースに手を加えるとr0に第1パラメタが入らないケースが出てくるのでご注意ください。
// デバッグ用コンソールへ文字列(終端\0)を表示
void ksrk_trace_s(char *msg)
{
// 第1パラメタmsgがr0に来ます。
__asm volatile (
" push {r1, r2}\n"
// バイト数取得
" mov r1, #0\n"
"loop: ldrb r2, [r0, r1]\n"
" teq r2, #0\n"
" itt ne\n"
" addne r1, #1\n"
" bne loop\n"
// パラメタ設定
" push {r1}\n"
" push {r0}\n"
" mov r0, #1\n"
" push {r0}\n"
" mov r0, #5\n"
" mov r1, sp\n"
// r0 = 5
// r1 = &{文字列バイト数, 文字列の先頭アドレス, 1}
" bkpt 0x00ab\n"
" add sp, #12\n"
" pop {r1, r2}\n"
);
}
今回はありません。ほっ。
