【Autosar从入门到精通到进阶实战篇】23 CanSM状态机实战:如何让ECU在休眠和唤醒间丝滑切换
23 CanSM状态机实战:如何让ECU在休眠和唤醒间丝滑切换开篇故事:深夜被“幽灵”报文惊醒的ECU去年我在调试一个车载T-Box项目时,遇到了一个诡异现象:晚上车辆休眠后,ECU每隔3分钟就会自动唤醒,然后又在10秒后重新休眠。客户反馈说“你们的设备在偷电”,但万用表测下来,唤醒电流确实只有正常工作的1/10,可频繁唤醒导致12V电池在3天内亏电到无法启动。我们调出CAN总线日志,发现唤醒源是一条0x7FF ID的报文——但这条报文是ECU自己在休眠前发出的“最后一条心跳”。CanSM状态机在收到这条自发的报文后,错误地认为总线有活动,立刻从WAIT_BUS_SLEEP跳回了FULL_COM状态。问题出在状态机的边沿触发条件没有过滤“自产报文”,导致ECU陷入了“睡→醒→睡”的死循环。痛点拆解:状态机设计的三个“自杀式”错误错误1:把“总线活动”等同于“外部报文”很多初学者的CanSM实现长这样:defcansm_state_machine(