Part Number:PROCESSOR-SDK-AM64X
MailBox做核间通信是通过一组寄存器和相关的中断信号,在两个处理器(用户)之间建立通信通道,那么在收发消息之前是不是得把其他中断全部关闭?如果不关闭在发送信息的时候正好遇到别的中断正在进行那么此时是如何处理的?
Gary Lu:
并不一定要求关闭其他所有中断。
nub 说:如果不关闭在发送信息的时候正好遇到别的中断正在进行那么此时是如何处理的?
中断优先级允许更重要的中断能够中断或者延后处理其他较低优先级的中断。
2.中断嵌套允许一个高优先级的中断处理程序中断一个正在执行的低优先级中断处理程序
,
nub:
我在官方给的RPMessage_send()和IpcNotify_sendMsg()里面看到在消息发送之前都调用
HwiP_disable()
uintptr_t HWI_SECTION HwiP_disable() {return _set_interrupt_priority(HwiP_NVIC_PRI_DISABLE); }我的理解此API是用于关闭高于IPC发送消息的中断级别的中断,这个理解对吗?如果是对的那么在发送消息期间搞级别的中断正好也出现了,怎么处理?
,
Gary Lu:
你的理解基本上是正确的。`HwiP_disable()` 用于禁用中断,在执行关键代码段时不会被高优先级的中断所打断。这是一个常见的做法,用于保护代码执行的原子性,避免在执行关键任务时数据的不一致性。
在你提到中,`HwiP_disable()` 被用来确保在IPC消息发送的过程中,不会被优先级更高的中断所中断。这是因为IPC消息的发送需要保持事务的完整性,防止数据在发送过程中被破坏。
对于你提出的情况——如果在消息发送期间,一个高优先级的中断发生了怎么办,实际上由于`HwiP_disable()`已经禁用了这些高优先级的中断,所以它们不会在消息发送过程中被执行。这些中断会被挂起,直到消息发送完成,通过调用相应的`HwiP_enable()`或其他恢复中断的函数之后,这些挂起的中断才会得到处理。
这种做法的一个副作用是,如果消息发送的操作耗时较长,那么会延迟处理高优先级中断,这在一些对实时性要求很高的应用中可能是不可接受的。
,
nub:
明白了,谢谢