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循环中是否可以接受,因为不忙,或者有更好的方法吗?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。