首页 > 技术知识 > 正文

该打印只是起提醒作用,并非错误。

主从级联应用场景中,主从之间完成一个消息的通信过程如下:

从侧发起一个消息写,随后触发主侧一个中断,主侧响应中断,在共享内存区中取得消息;接下来主片可能会回复消息给从片,采用同样的程序,先写消息到共享内存,然后触发从侧中断。从侧进入中断服务程序,处理已经存在共享内存的消息。

按照最初的想法,本侧每次向对端提交中断的时候,先查看对端中断状态,若中断状态未被清除,则等待,待对端中断处理完毕,再触发对端中断。这种方法能保证一个消息,一个中断,但会造成对端频繁进入中断服务程序,效率较低。为提高消息交互的效率,考虑以下方法,对实时性要求较低的消息,通过定时器对多个消息进行一次性处理。每次发送消息后,即使上一个中断还没有被响应,触发对端中断时不需要等待对端的中断状态被清除,直接提交中断。这样就存在一种情况,本侧发送一个消息过去后,写了对端的中断,但还没来得及触发对端中断,这个对端的上一个中断刚好正在处理,顺便也把本次发送的消息给处理了;这个时候对端的中断状态也被清除了。等到本侧触发对端中断的时候,对端在检测中断状态的时候,却没有找到相应的中断状态标志,于是就打印了上面那个信息(“unknow Hi-irq triggered”)。

以上这个机制经过深入分析,不会导致丢消息,也不会有其他异常!

猜你喜欢