CAN网络上数据采集的嵌入式系统任务调度

2019-07-14 17:39发布

我正在努力解决如何安排任务的问题。我的设置:STM32F103连接在CAN上。通过I2C使用Lidar V3模块通信进行测量,然后在CAN上分配该测量值中断1是1ms定时器中断,用于启动CAN上的消息发送接收到CAN报文后,中断2有效我还必须在LIDAR单元上通过I2C轮询寄存器,以确保测量完成后再使用I2C读取距离寄存器,下面显示的代码片段
status = CheckLidarStatus();

        while ((status & LIDAR_BUSY) == LIDAR_BUSY)
        {
            status = CheckLidarStatus();
        }
我认为我的程序应采取的正确流程如下所示: 1.png 我主要担心的是:
  • 这种流程似乎是一种合乎逻辑的方法吗?
  • 如果我优先考虑用于CAN传输的定时器中断(而不是RX int),这是否会对CAN网络产生负面影响,即不能及时处理收到的CAN消息?
  • 如果在I2C通信期间任何一个中断处于活动状态,它是否会导致I2C通信“掉线”?
  • 坐在一个等待Checklidar状态的while循环中是否可以接受,因为不忙,或者有更好的方法吗?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
lingjianghui
2019-07-16 06:25
我并没有说清楚。如果您需要从CAN控制器的FIFO中读取数据以使其准备好接收下一条消息,那么您绝对应该在ISR中执行此操作,将数据放入合适的内存缓冲区,然后设置标志或其他任何内容。背景线程。但是,通过I2C接口传输数据需要时间,这不应该在ISR中完成,相反,后台线程应该从内存缓冲区读取数据并以任何所需的速度将其传输到LIDAR。

一周热门 更多>