问题一
问题描述
工作环境:ECU外接canoe
操作:使用CANoe模拟发送NM报文,然后停发或者断开CANoe
现象:程序跑死,调用call stack查看压栈情况如下图所示
定位代码如下图所示。可见是由于CAN模块在设置Controller状态时由于Can LOOP导致的,联想到CAN模块的Hardware loop check问题
查找相关文档,发现需要对下图中几个模块设置exclusive area,与《如何解决OS ErrorHook 的E_OS_DISABLED_INT错误》解决方法一致。
问题二
按上述修改后,运行代码发现初始化就挂掉了,call stack情况如下图所示。可见是由于CanSM在切换状态时,CAN模块尚未初始化,因此应该调整初始化顺序。
当前有问题的初始化顺序如下
最终将Can初始化放到CanSM初始化之前,问题解决。