我试图使用DX22库和FTDI USB-UART与恩智浦芯片进行交互。我在使用C创建缓冲区时遇到问题,该缓冲区抓取所有可用数据,将其附加到字符串,然后继续执行该程序。来自恩智浦芯片的所有数据都应以" CR LF"结束。我应该创建一个函数来搜索传入的数据并构造一个字符串,终止于" CR LF"?
while (FT_Read != FT_OK)
{
if (RxBytes > 0) {
FT_status = FT_Read(handle, RxBuffer, RxBytes, &BytesReceived);
if (FT_status == FT_OK) {
printf("RX: %s\n", RxBuffer);
}
else {
printf("RX buffer empty.\n");
}
}
else {
break;
}
答案 0 :(得分:2)
一般情况下,是的,但CR和LF可能会在单独的读取调用中到达,因此您必须允许这样做。使用逐字节状态机来处理流链接lile serial / TCP上的协议并不罕见。
注意:
printf(“RX:%s \ n”,RxBuffer);
假设缓冲区包含的是以null结尾的字符串。这通常不太可能,因此使用'BytesReceived'作为索引在数据末尾插入null,并确保缓冲区始终包含足够的空间。