项目背景:
项目中,快恢复时间是100ms,最小Tx报文周期也是100ms
问题描述
CAN高短接低快慢恢复时间正常,但通过canoe干扰特定位,时间超最短周期时间
解决方案:
解决方法1:调整offset,10个100ms的tx报文分别偏移0,10…100,这样模拟10ms周期报文发送。
但此方法注意:所有报文都发出的时间的需求要满足大于100ms
解决方法2:在BswM中添加rule和action,在监测到发生busoff时,关闭com通信,使得内部计数清零;busoff消失时,重新打开com。涉及到函数是com_IpduGroupControl()
原因分析:
第一步:首先确认在什么地方时间超了,测试中断时间
void Can_17_McmCan_IsrBusOffHandler(const uint8 HwKernelId,
const uint8 NodeIdIndex)
{
...
{
Dio_FlipChannel(DioConf_DioChannel_xxx);//发现中断时间就超了
}
Can_17_McmCan_lBusOffHandler(CntrlIndx, CoreGlobalPtr, CoreConfigPtr);
发现中断时,时间就已经超了
第二步:排查是否是硬件还是软件问题
在busoff中断处,打断点,Tec(错误发生计数器)都达到0xF8
第三步:排查是否和任务调度有关系
BswM,CanSM,CoMM,COM