I am having some difficulty with Syslink on the C6A816x EVM, using code that is largely cut-and-pasted from the Syslink MessageQ sample, the heap creatiion fails:
DSP message Queue = TaskParamMSGQ_03
ARM message queue = TaskParamMSGQ_30
Heap name = HeapMemMP30
Heap align = 128
Heap Size = 128
Heap Id = 0
Registered remote event number 10 with Notify module for processor 0
Registered remote event number 11 with Notify module for processor 0
Registered remote event number 12 with Notify module for processor 0
Registered remote event number 13 with Notify module for processor 0
Registering heapId 0 with MessageQ for procId: 0
Assertion at Line no: 1087 in /home/lholeva/ti-ezsdk_c6a816x-evm_5_00_00_56/sysl
ink_02_00_00_56/ti/syslink/ipc/hlos/usr/MessageQ.c: (cmdArgs.args.registerHeap.h
eap) : failed
Creating the Host's message queue
Error in MessageQ_create -1 : procId 0
Opening the DSP's message queue
The relevent bit of code (on the ARM side):
/* Create Heap and register it with MessageQ */
HeapMemMP_Params_init (&heapMemParams);
heapMemParams.sharedAddr = NULL;
heapSize = ( HeapMemMP_sharedMemReq (&heapMemParams)
+ (theInfo->heapNumMsg * theInfo->heapMsgSize));
srHeap = SharedRegion_getHeap (0);
if (srHeap == NULL) {
status = MessageQ_E_FAIL;
Osal_printf ("SharedRegion_getHeap failed for %d processor."
" srHeap: %d\n",
procId,
srHeap);
}
else {
ptr = Memory_alloc (srHeap,
heapSize,
0,
NULL);
if (ptr == NULL) {
status = MessageQ_E_FAIL;
Osal_printf ("Memory_alloc failed for %d processor."
" ptr: [0x%x]\n",
procId,
ptr);
}
}
if (status >= 0) {
/* Register this heap */
Osal_printf ("Registering heapId %d with MessageQ for procId: %d\n",
theInfo->heapId,
procId);
MessageQ_registerHeap (HeapMH, theInfo->heapId);
}
/* Construct the local MessageQ for receiving messages from the DSP */
Osal_printf("Creating the Host's message queue\n");
MessageQ_Params_init(&mesQP);
*mesQH = MessageQ_create (theInfo->lMsgqName, &mesQP);
if (*mesQH == NULL) {
status = MessageQ_E_FAIL;
Osal_printf ("Error in MessageQ_create %d : procId %d\n",
status,
procId);
}
The first block of statements comes from Ipc_readConfig(), so I know that the DSP code is running. Any idea what may be wrong?
Lee Holeva