0
私はARM(SAM4)を使用していますが、2つのUARTがあり、fprintfを使用して両方で印刷できるようにストリームを設定する必要があります。fprintfで使用するUARTから複数のストリームを定義する方法
はすでに運なしfwopen
を試してみました:
FILE * debug;
debug_writefn(void *cookie, const char *buf, int n);
void comm_init(void) {
debug = fwopen(NULL, &debug_writefn);
if (debug == NULL) {
printf("Error");
}
fprintf(debug, "Test");
}
しかし、debug_writefnは新しいと呼ばれています。
私はarm-none-eabi-*
ツールチェーン(newlibを使用していると思います)、ASF、FreeRTOSを使用しています。
_write()
または
write_r()
システムコールする必要が
この質問は、より密接にあなたのコンパイラとの細目に関連していますMCUやハードウェアよりも標準的なライブラリを実装しているので、作業しているものを手助けすることができます。おそらく、完全な例(例えば 'fwopen'のエラーリターンをチェックしたかどうか)とともに。私は 'snprintf 'を経由して中間バッファに書き込む代わりに、UARTに_that_を転送するという簡単でポータブルな回避策をとることはできないと思いますか? – doynax
どのツールチェーンですか?どのような実行環境(OS、ベアメタル)?一般的に、ベアメタルシステムでは、ライブラリのターゲットを変更する必要があります。そこでは、データをstdoutまたはstderrストリームに両方のポートに送信するだけです。 – Clifford
あなたがベアメタルである可能性が高い場合(RTOSを使用している場合)、ベアメタルではないと感じるように、非常に大きなコードをここに追加するように求めています。文字列を出力したいだけなら、非常に大きなCライブラリコードを必要とせず、バイトをUARTに送るだけで済みます。 –