This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于CAN中断处理未完成时,原邮箱再次收到信息的疑问



我有一个关于28335 CAN收发机制的疑问:在邮箱A接收到信息,触发接收中断处理接收数据时(过程中可能会因为和其他线程互斥写保护被挂起),若在中断清除前,上位机又向此邮箱发送数据,这时的状态会是什么样的呢?
是收发两端都被阻塞,中断清除后,再写入邮箱,触发下一个中断?
还是邮箱数据被覆盖,但并不触发中断?
还是邮箱被写保护,上位机跳过这个数据,发送下一个数据?
求各位大神们解答呀!
  • 中断清除前不会有新的中断产生,如果该邮箱的OPC位被清零,新的消息直接覆盖还没被读取的消息。如果该邮箱的OPC被置位,在没有其它邮箱配置相同的标识符的情况下,新的消息被丢弃,如果有其它邮箱配置相同的标识符,则存入其它邮箱。

  • Hank Zhao 说:

    中断清除前不会有新的中断产生,如果该邮箱的OPC位被清零,新的消息直接覆盖还没被读取的消息。如果该邮箱的OPC被置位,在没有其它邮箱配置相同的标识符的情况下,新的消息被丢弃,如果有其它邮箱配置相同的标识符,则存入其它邮箱。

    谢谢您的回复

    那为了不使发送的信息丢失,更好一些的解决办法,是不是增加几个冗余的同ID邮箱,将OPC位都置位,对每个邮箱数据独立的处理?

    这样情况下,被迫存入冗余邮箱的数据,在原邮箱中断清除后,是否还会继续触发这个冗余邮箱对应的邮箱中断?(抱歉我中断机制学得不好)

  • 是的,置位OPC并且增加冗余邮箱可以防止消息丢失。冗余邮箱接收消息后,其中断处于等待状态。原邮箱中断清除后,CPU会响应等待中的中断。