PIC32+Harmony System Service LibrariesのConsole SYS_CONSOLE_Writeでハマる

この関数の第2パラメータは,コンソール出力先がUSARTの時は関係ない.
関数内部で第2パラメータは見ていない.

これは大した問題ではないが.

大問題なのは,第3パラメータの文字列配列は,auto変数だとバグるということ.
関数内宣言の変数配列のポインタを渡すときは,static宣言する.
あるいはグローバル変数配列のポインタを渡すこと!.

というのも,SYS_CONSOLE_Writeの内部ではFIFOにてデータを一時ストックし,順次USARTにデータ出力している.
が,そのFIFOは文字データを覚えているのではなく,文字データへのポインタをPush・Popしている.
実際の通信処理はsystem_tasks.のSYS_CONSOLE_Tasks関数呼び出しで行っているため,SYS_CONSOLE_Write関数を呼び出した関数内のauto変数は,SYS_CONSOLE_Tasks関数が実行されているときにはすでに消滅(破壊)されている.
これを防ぐために,static宣言かグローバル変数化が必須となっている.

なんでヘルプに書いてないねん!!
っていうか,文字データ実体のFIFOにしろよ!そっちのほうがメモリ効率いいでしょ・・・たぶん.


コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください