常见问题
4 Dec 2024
Read time: 1 minute(s)
接收线程打印导致丢帧问题
如果接收线程中存在打印,那么当总线波特率较高,发送数据较多时,易出现丢帧问题。
问题原因:打印速率较慢,接收的一帧 CAN 数据还没打印完,后续的 CAN 数据又接收了,容易发生 overflow,导致丢帧。
解决办法:在接收线程中不要加打印。SDK 中示例 demo 的接收线程有打印只是为了展示是否有接收到数据。
RTT 硬件过滤器 hdr 设置
在 RT-Thread 的 CAN 框架中,hdr 用来表示硬件过滤器的编号。该 CAN 模块硬件上不支持过滤器编号,所以在接收时,
rxmsg.hdr
只能设置为-1。如下图
static void can_rx_thread(void *parameter)
{
int i;
rt_size_t size;
struct rt_can_msg rxmsg = {0};
while (1)
{
rt_sem_take(&rx_sem, RT_WAITING_FOREVER);
rxmsg.hdr = -1;
size = rt_device_read(can_rx_dev, 0, &rxmsg, sizeof(rxmsg));
...
}