Other Parts Discussed in Thread: TMS320C6657
Hi,
My platform is TMS320C6657. I try to send message form Core0 to Core1 by MessageQ after Core0 receive data through network. When I run the program, Core0 can open the queue and MessageQ_put is passed, while Core1 abort and print the message:
[C66xx_1] ti.sdo.ipc.MessageQ: line 441: assertion failure: A_invalidQueueId: Invalid queueId is used
xdc.runtime.Error.raise: terminating execution
I get queueId form "status = MessageQ_open(queueName, &queueId)".
The IPC is 1.24.3.32, the MCSDK is 2.1.2.6, the major code as the follows:
Core0:
Int status;
/* Register this heap with MessageQ */
MessageQ_registerHeap((IHeap_Handle)SharedRegion_getHeap(0), HEAP_ID);
/* Open the 'next' remote message queue. Spin until it is ready. */
do {
status = MessageQ_open(queueName, &queueId);
}
while (status < 0);
printf("queueId = %d\n",queueId);
message = (Message *)MessageQ_alloc(HEAP_ID, sizeof(Message));
if (message == NULL) {
System_abort("MessageQ_alloc failed\n");
}
message->num[1] = i;
status = MessageQ_put(queueId, (MessageQ_Msg)message);
if (status < 0) {
System_abort("MessageQ_put failed\n");
}
Core1:
syncSemHandle = SyncSem_create(NULL, NULL);
MessageQ_Params_init(&messageQParams);
messageQParams.synchronizer = SyncSem_Handle_upCast(syncSemHandle);
/* Create a message queue. */
messageQ = MessageQ_create(queueName, &messageQParams);
if (messageQ == NULL) {
System_abort("MessageQ_create failed\n" );
}
Int status;
int i;
/* Get a message */
status = MessageQ_get(messageQ, (MessageQ_Msg *)&message, MessageQ_FOREVER);
if (status < 0) {
System_abort("MessageQ_get failed\n");
}
i = message->num[1];
// free the Message.
MessageQ_free((MessageQ_Msg)message);
Do I miss something?