嵌入式技术william hill官网
直播中

马占云

7年用户 1555经验值
私信 关注
[问答]

CAN和serial线程调用rt_device_write函数出现卡死是为什么?

在调试程序时发现,CAN和serial线程里面都调用rt_device_write函数会导致rt_device_write函数卡死。CAN是用中断接收和发送,serialDMA接收,轮询发送。会不会就是两个线程之间会有影响呢,导致rt_device_write堵死呢?程序本身不会死掉,运行灯还一直运行,但是serial和can会死掉

回帖(1)

泡芙奶昔

2022-5-6 09:45:07
rt_device_write的函数很简单的,断言,判断ref_count, 调用dev->write函数。代码如下所示:

serial和can死掉,那就是这两个外设的写操作死掉了,建议再深入去查一下原因,更加准确说明现象、提供详细的log等。在drv_usart.h/drv_can.c中具体的写操作函数中找原因。

rt_size_t rt_device_write(rt_device_t dev,

                          rt_off_t    pos,

                          const void *buffer,

                          rt_size_t   size)

{

    RT_ASSERT(dev != RT_NULL);

    RT_ASSERT(rt_object_get_type(&dev->parent) == RT_Object_Class_Device);

    if (dev->ref_count == 0)

    {

        rt_set_errno(-RT_ERROR);

        return 0;

    }

    /* call device_write interface */

    if (device_write != RT_NULL)

    {

        return device_write(dev, pos, buffer, size);

    }

    /* set error code */

    rt_set_errno(-RT_ENOSYS);

    return 0;

}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分