将数据发送到流缓冲区的代码:
从流缓冲区读取数据的代码:
如图箭头所示,其中发送和接收任务位于不同的MCU内核上:
(资料图片仅供参考)
接收任务尝试从空的消息缓冲区中读取数据,并进入阻止状态以等待数据到达。
发送任务将数据写入消息缓冲区。
sbSEND_COMPLETED()在正在执行接收任务的内核中触发一个中断。
但是,要考虑有两个或更多消息缓冲区的情况,ISR必须首先确定哪个消息缓冲区包含数据。
如果消息缓冲区的数量很少,则有几种方法可以实现:
如果硬件允许,则每个消息缓冲区可以使用不同的中断线,从而使中断服务程序和消息缓冲区之间保持一对一的映射。
中断服务例程可以简单地查询每个消息缓冲区以查看其是否包含数据。
使用sbSEND_COMPLETED()的实现:
中断服务例程从控制消息缓冲区中读取包含数据的消息缓冲区的句柄,然后将该句柄传递给xMessageBufferSendCompletedFromISR()API函数以取消阻止接收任务,该任务现在可以从缓冲区读取,因为缓冲区不再存在空的。