时序问题的实际案例分析
传感器数据缺失或重复问题
传感器数据缺失或重复是一个经典的时序问题,它有几个典型特征:一是偶尔发生;二是多数情况下,一开始会被认为是功能问题;三是如果在设计之初就考虑时序问题,很容易预防。
例如,底盘部门的一个项目中,原始设备制造商(OEM)在子系统测试站发现CAN消息时不时丢失。奇怪的是,每隔几分钟就会有规律地出现丢包,而且不同电子控制单元(ECU)的丢包时间间隔不同,有的大约每14分钟出现一次问题,有的则是每18分钟。
通过追踪可以快速找到问题。CAN接收程序会为每条接收到的相关消息记录一个“用户事件”,在追踪中显示为一条垂直线,接收时间可以与调度(即任务、中断和可运行程序的执行)相关联。
追踪显示,受影响的消息每10毫秒接收一次,但有一定抖动,即有时早一点,有时晚一点。消息中的数据由一个周期性执行的可运行程序用于计算,执行也会有抖动。在出现错误的情况下,会先进行计算,之后不久收到消息,大约10毫秒后又收到消息,结果计算使用的是最新值,之前收到的数据就未被使用,这就是“丢失”的数据报文。另一种错误情况是数据被使用了两次,即收到数据、进行计算后,在收到下一个数据点之前,计算又使用了已经处理过的数据。
之所以接收和计算不能像齿轮一样完美配合,是因为发送方和接收方都有自己的晶体来生成处理器时钟。消息发送的10毫秒周期和接收系统的10毫秒周期时间基准不同,晶体存在制造公差,其频率会与标称频率有偏差,且这种偏差还受温度等环境因素影响。
时间久了,两个时间基准会相互漂移,而且传输和接收都有抖动。只有总线仲裁能确保在高优先级消息占用总线时,低优先级消息会延迟。这两种效应(漂移和抖动)共同导致了数据丢失和重复
超级会员免费看
订阅专栏 解锁全文
4225

被折叠的 条评论
为什么被折叠?



