我有一个小的 c 程序将输入从算法复制到最终的 char 数组中,然后通过串行(UART)发送到树莓派。问题是 char 数组中的最后一个字符始终是 ÿ (\xff) 的 latin-1 字符。
sprintf 格式效果很好,但是当我创建一个新的字符缓冲区来限制数组的大小并且只复制内容时,它似乎会剥离 \n 并附加 \xff 或 ÿ,具体取决于您在 pi 中使用的编码对于串行阅读器。
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 数组上的 watch 变量,当它发送到 uart_write 时,\n 存在。在缓冲区被转换为 uart 代码中的 unit8_t 之后,它似乎剥离了 \n。我什至尝试了一个带有 '\n' 的 unit8_t,它在调用 uart_write 代码后被删除。我已经联系了analog.com,一旦有解决方案,我会更新这篇文章。