(资料图片)
问题描述1问题描述程序刷写过程中,Sender和Receiver在多帧传输过程中,Sender端偶发性地
3、中断嵌套引发状态错序
Sender端打包FF数据,数据打包后,使能发送中断;t0时刻,数据成功发送到总线,Tx Interrupt发生,程序进入Tx InterrupyRoutine;t1时刻,接收到FC帧,由于配置的接收中断优先级比发送中断优先级高,发送中断例程被打断,执行接收中断例程(Rx Interrupt Routine)。在接收中断例程中,识别到收到的报文是FC类型,将Sender的状态机切换到Send_CF状态;t2时刻,程序返回发送中断例程,将Sender的状态机由Send_CF切换到Wait_FC;t3时刻,发送中断例程执行完毕,Sender继续处理下一帧发送,由于识别到Sender状态处于Wait_FC,Sender不发送CF,一直等待对方发送FC,而Receiver实际已经将FC发送完成,导致Sender一直处于Wait_FC状态而不能发送CF,最终导致程序刷写失败。问题示意如下所示:不出问题时,Tx Interrupt Routine执行完成,Rx Interrupt没有打断Tx Interrupt Routine,Sender的状态机可以正常切换,如下所示:所以,这也问题偶发的原因,发送中断例程被接收中断打断的时候,问题产生,没有被打断时,问题不产生。3解决措施可以看出,上述问题的实质是中断抢占导致状态机被切换。因此处理策略是:使能发送中断之前将状态机提前切换到Wait_FC状态。
当然,解决策略可能远不止这一种方式,比如:提高发送中断的优先级,避免被抢占。
关键词: