在C6678上使用IPC的MessageQ在核间发送消息,使用的是TransportShm,先MessageQ_alloc,成功后MessageQ_put,如果MessageQ_alloc失败,就要过一会儿再调用MessageQ_alloc,这段时间不可预知。
问题:在MessageQ_alloc前能否预先阻塞在一个信号量上,等有空间时候该阻塞返回,这时申请MessageQ_alloc一定会成功。即如何实现阻塞发送?
Kevin Cai:
Hi, 您好!
可以实现阻塞发送,不需要用到信号量, 您可以参考下面的代码:
do{
msg = MessageQ_alloc (0, MESSAGEQ_RPMSG_MAXSIZE);
}while(!msg);
谢谢!
Vincent Han:
您好:
您还可以使用硬件Semaphore的方式,使用硬件Semaphore的话如果两个核同时申请一个信号量可以维护互斥操作,另外,如果一个核申请某个硬件信号量时该信号量正在被别的核占用的话,通过配置可以让硬件Semaphore在一个核释放这个信号量以后通过中断依次通知之前那个获取失败的核已告知其资源的可用,附件是C6678上可以运行的硬件Semaphore代码,请参考,多谢!