DSP

dsp MessageQ消息队列

2019-07-13 10:05发布

dsp 重要的通信机制MessageQ: 这个通信机制使用的很广泛,比Notif的优点就是其可以传递大于32bit的数据, 而notify机制只能传递小于32bit的数据。 我们需要对Heapbuf进行初始化并申请Heapbuf内存。 HeapBufMP_Params_init(& heapBufParams);
heapBufParams.regionId = headId;
heapBufParams.name = "zuoxiaonian";
heapBufParams.numBlocks = 1;
heapBufParams.blockSize = sizeof(struct mymsg);
heapHandle = HeapBufMP_create(&heapBufParams);
if (heapHandle == NULL)
{
System_printf("HeapBufMp_create failed ");
}
对消息申请消息ID: status = MessageQ_registerHeap((IHeap_Handle)heapHandle, headId);
if (status < 0 )
{
System_printf("MessageQ_registerHeap failed ");
}
对消息申请内存。
zuoxiaonian_msg = (struct mymsg *)MessageQ_alloc(headId, sizeof(struct mymsg));
之后就是对MessageQ的打开,关闭, 消息的发送和接受。 MessageQ_create(),MessageQ_delete(); 对消息的创建和删除。
MessageQ_open(); MessageQ_close(); 对消息通道的打开和关闭。 MessageQ_put();MessageQ_get();消息的接受和发送。 注意: 1.一个消息队列可以有多个写者,但是只能有一个读者。(一般有几个核就创建几个消息通道, 一个核对应一个消息通道) 2.消息队列由谁创建就有谁删除,对打开就有谁关闭, (通常为写端打开,写端关闭,读端创建,读端删除) 3.可以对发送消息的结构体进行自由封装