东方红锁车版本死机问题分析
现象:与东方红ecu交互过程中,程序进入hardfault异常;
查找过程:
方式1、通过keil软件调试功能,在hardfault处打断点,查看call stack窗口。call stack窗口处,有函数调用过程,但全是freertos系统函数调用,没有自己定义的函数,系统函数是没问题的,故想通过查看call stack窗口查找问题行不通了;
方式2、软件版本,从哪一版程序开始出现此问题的;
方式3、通过排除法定位问题,屏蔽新加入的内容,注释掉yto_ecu_opt()函数(与ecu交互函数),死机问题不在复现了;故,是yto_ecu_opt()函数导致死机。下面要找根本原因了。yto_ecu_opt()函数内又调用了两个函数(最终调用can发送函数发送数据),其中一个是aes加解密函数(此函数是从网上cp下来的)。
用can分析盒子发现,每次死机时,ecu都会发送三次此帧(程序死掉,ecu重发几次);这就有规律了,每次ecu发送此帧数据时,程序就挂掉了
然后用can盒子模拟发送此帧数据,发现无论can数据是什么,都会导致程序挂掉,故,问题就是can数据接收处理那的问题了。屏蔽代码,找到根本问题了。
回想以前种种线索,泰山版本问什么不死机(没有此帧数据)
本次问题,关键点是每次ecu发送此帧数据,程序就会挂掉!
0708
试验环境:
没有接ecu
用can盒子模拟发送此帧数据
试验结果:
没有复现死机问题
0710
试验环境:
昆明云内ecu
试验结果:
复现死机问题,具体解决方法详见:https://www.cnblogs.com/chino-ll/p/18295557
如果,感到此时的自己很辛苦,那告诉自己:容易走的都是下坡路。坚持住,因为你正在走上坡路,走过去,你就一定会有进步。如果,你正在埋怨命运不眷顾,开导自己:命,是失败者的借口;运,是成功者的谦词。命运从来都是掌握在自己的手中,埋怨,只是一种懦弱的表现;努力,才是人生的态度。