我将根据示例 IPC_3_50_04_08\examples\C6678_BIOS_elf\ex11_ping 创建应用。
我使用 MessageQ 在任务之间进行通信。
根据文档、MessageQ 使用具有可变长度块大小的堆(HeapMemMP)。 我担心这会导致碎片化、从而减慢执行速度。 因此、我曾尝试改用固定块大小堆(HeapBufMP)。
ipc.cfg.xs 中包含以下代码:
VAR SHAREDMEM = 0x0C000000;
VAR SHAREDMEMSIZE = 0x00200000;
SharedRegion.setEntryMeta(0、
新的 SharedRegion.MetaEntry ({
名称:"SR_0"、
基地址:SHAREDMEM、
LEN:SHAREDMEMSIZE、
ownerProcId:0、
IsValid:true、
高速缓冲存储器启用:true、
createHeap:错误
})
);
(我将变量 createHeap 更改为 false、以便可以使用不同类型的堆。)
我在 main.c 中包含以下代码:
#define IPC_HEAP_FIXED_SIZE 1.
#if IPC_HEAP_FIXED_SIZE
HeapBufMP_Params heap_params;
/*创建将用于分配消息的堆。 */
HeapBufMP_Params_init (&heap_params);
heap_params.RegionID = 0;/*使用默认区域*/
heap_params.name ="IPC_HEAP";
heap_params.align = 256;
heap_params.numBlocks = 2000;// SR_0大小为2MB
heap_params.blocksize = 1024;
heap_params.gate = NULL;/*使用系统门*/
HEAP_Handle =(IHeap_Handle) HeapBufMP_create (&heap_params);
#else /*在 ipc-cfg.xs 中的共享区域 SR_0中定义的堆*/
/*获取 SR_0堆句柄*/
HEAP_Handle =(IHeap_Handle) SharedRegion_getHeap (0);
#endif
status = MessageQ_registerHeap (heap_handle、IPC_heap);
(#else 部分是有效的原始代码。)
当我运行代码时、会发生断言故障:
TI.sdo.ipc.grant.HeapBufMP:第831行:断言失败:A_noHeap:区域没有堆
如果是单步执行、在步进到函数 HeapBufMP_create 时、该生效立即失败。
什么地方出错了? 为什么当我们刚刚创建堆时、HeapBufMP 希望共享区域有一个堆?
--
Pauli.