我希望使用 sciReceive API 来接收每次长度不同的数据。
void sciReceive (sciBASE-t * sci、uint32 length、uint8 * data)
示例:
如果我想接收数据,这是第一次:abc (3字节长度)
第二次如果我想接收数据:qwerty (5字节)
如果我的串行端口上的数据长度每次都不同、该怎么办?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我希望使用 sciReceive API 来接收每次长度不同的数据。
void sciReceive (sciBASE-t * sci、uint32 length、uint8 * data)
示例:
如果我想接收数据,这是第一次:abc (3字节长度)
第二次如果我想接收数据:qwerty (5字节)
如果我的串行端口上的数据长度每次都不同、该怎么办?
您好!
您可以定义两个 UART 器件之间的通信协议。 在发送真实数据(2字节、3字节或...)之前,设备首先发送长度。
2.您可以向 sciReceive()函数添加超时代码。
TIME_OUT = 0;
while (length > 0U) //您可以使用较大的 length 值(例如 length=100);也可以将循环更改为 while (1)
{
TIME_OUT++:
/*SAFETYMCUSW 28 D MR:NA "找到可能无限的循环-执行序列的硬件状态检查"*/
while (((sci->FLR &(uint32) SCI_RX_INT)== 0U)
{
如果(TIME_OUT > xxx)
中断或返回
}/*等待*/
/*SAFETYMCUSW 45 D MR:21.1 "仅此驱动程序允许有效的非 NULL 输入参数"*/
*data =(uint8)(sci->RD & 0x000000FFU);
/*SAFETYMCUSW 45 D MR:21.1 "仅此驱动程序允许有效的非 NULL 输入参数"*/
/*SAFETYMCUSW 567 S MR:17.1,17.4 "需要指针增量"*/
Data++;
长度--;
}