アルゴリズムからの入力を最終的な char 配列にコピーし、シリアル (UART) 経由でラズベリー pi に送信する小さな C プログラムがあります。問題は、char 配列の最後の文字が常に ÿ (\xff) のラテン 1 文字であることです。
sprintf フォーマットはうまく機能しますが、新しい char バッファーを作成して配列のサイズを制限し、コンテンツのみをコピーすると、\n が取り除かれ、pi で使用しているエンコーディングに応じて \xff または ÿ が追加されるようです。シリアルリーダー用。
char accel_string[50] = "";
sprintf(accel_string, "B:%d|A:%d\n", dataB, dataA)
// I can see "B:123|A:123\n\0" in the char array now
int str_length = strlen(accel_string);
char trunc_str[str_length];
strncpy(trunc_str, accel_string, str_length);
// Now it sets trunc_str to "B:123|A:123\xff
// Blocking TX right now - write over serial
eResult = adi_uart_Write(ghUART, trunc_str, sizeof(trunc_str));
trunc_str は、「\n」で終わると予想されるときにÿで終わり続けます
私が間違っていたところを助けてください。
更新 #2 char 配列の任意の場所にある '\n' が削除され、ÿ に置き換えられることを確認しました。char 配列のウォッチ変数を調べたところ、uart_write に送信されたときに \n が存在します。uart コードでバッファが unit8_t に変換された後、\n が削除されたように見えます。unit8_t を '\n' で試してみたところ、uart_write コードを呼び出した後に削除されました。私は analog.com に連絡を取り、問題が解決され次第、この投稿を更新します。