TI中文支持网
TI专业的中文技术问题咨询交流网站

MessageQ传递的信息到底在哪个变量里?

还是想做核间的数据传递,Semaphore 不能核间传递,Notify应该可以,但是写的程序就是传递不起来,现在在看MessageQ,IPC自带的例子C:\ti\ipc_3_50_04_08\examples\C6678_bios_elf\ex11_ping里文件太多,看着头大,看了2天也没理出到底传递的是啥信息。

通读software-dl.ti.com/processor-sdk-rtos/esd/docs/06_03_00_106/AM437X/rtos/index_Foundational_Components.html#messageq-module里的4.4.6.3 MessageQ Module 后有一个 疑问,这章讲了如何创建,打开,分配内存,存放信息,读取信息,释放内存,可是我翻来翻去也没找到到底信息在哪里? 

整理一下

1.接收方 创建:
MessageQ_HandlemessageQ;
MessageQ_ParamsmessageQParams;
SyncSem_HandlesyncSemHandle;
syncSemHandle = SyncSem_create(NULL, NULL);
MessageQ_Params_init(&messageQParams);
messageQParams.synchronizer = SyncSem_Handle_upCast(syncSemHandle);
messageQ = MessageQ_create(CORE0_MESSAGEQNAME, &messageQParams);



2.发送方 打开:
do {status = MessageQ_open(CORE0_MESSAGEQNAME, &remoteQueueId);
}
while (status < 0);

3.发送方 注册一个Heap:
status = MessageQ_registerHeap( HeapBufMP_Handle_upCast(heapHandle), HEAPID);

4.发送方 分配内存:
msg = MessageQ_alloc(HEAPID, sizeof(MessageQ_MsgHeader)); if (msg == NULL) { System_abort("MessageQ_alloc failed\n"); }

5.发送方写入信息:
status = MessageQ_put(remoteQueueId, msg);

6.接收方 读取信息:
status = MessageQ_get(messageQ, &msg, MessageQ_FOREVER);
if (status < 0) {System_abort("Should not happen; timeout is forever\n");
}

7.后续操作,至少到这里没有看到哪里表示 信息 在哪里,比如我要传递一个 123456给 接收方,我这信息往哪里装啊?

只看到一个结构体:

typedef struct MyMsg {MessageQ_MsgHeader header;// RequiredSomeEnumTypetype// Can be any field...// ...
} MyMsg;

这个结构体 在讲解中也没有使用啊?那么到底传递的什么啊?这个结构体怎么用呢?我传递了半天传递了个寂寞?

这是一个小白的问题,但是确实不理解信息到底放在哪里了。

Lucius Green:

回复 Nancy Wang:

Nancy, Thanks.虽然例子没看懂,但是至少知道了信息是存放在结构体里的,你给的代码里用App_Msg * msg 定义了msg,然后给msg里存入信息0x00000000(App_CMD_NOP) ,然后将该信息put,至于put里的Module.slaveQue是啥暂时还不明白,先自己写个代码在板上跑跑试试了,再次感谢。

赞(0)
未经允许不得转载:TI中文支持网 » MessageQ传递的信息到底在哪个变量里?
分享到: 更多 (0)