Edit online

常见问题

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));
    ...
}