TMS320C6678: 关于 HeapBuf 内存空间分配失败

Part Number: TMS320C6678
Other Parts Discussed in Thread: SYSBIOS

void printHeapInfo(IHeap_Handle heap)
{
    Memory_Stats stats;
    Memory_getStats(heap, &stats);

    System_printf("Heap total : %u bytes\n", stats.totalSize);
    System_printf("Free total : %u bytes\n", stats.totalFreeSize);
    System_printf("Largest blk: %u bytes\n", stats.largestFreeSize);

    /* 简单碎片判断 */
    if (stats.largestFreeSize < 1024) {
        System_printf("WARNING: largest free block < 1 KB!\n");
    }
}





// 查询 ukf 堆状态
System_printf("Before ukf update.\n");
printHeapInfo((IHeap_Handle)ukfHeapBuf);


ukf.update(WatcheState);
// 部分内存分配语句如下,保证了每次分配都有释放
float *Pkzz = (float *)Memory_alloc((IHeap_Handle)ukfHeapBuf, 16, 8, NULL);

// 查询 ukf 堆状态
System_printf("After ukf update.\n");
printHeapInfo((IHeap_Handle)ukfHeapBuf);

问题:为什么连续调用3次以上的函数,会导致内存分配失败?

连续调用3次的输出结果为:
// 第1次
Before ukf update.
Heap total : 384 bytes
Free total : 384 bytes
Largest blk: 64 bytes
WARNING: largest free block < 1 KB!
After ukf update.
Heap total : 384 bytes
Free total : 384 bytes
Largest blk: 64 bytes
WARNING: largest free block < 1 KB!
// 第2次
Before ukf update.
Heap total : 384 bytes
Free total : 384 bytes
Largest blk: 64 bytes
WARNING: largest free block < 1 KB!
After ukf update.
Heap total : 384 bytes
Free total : 384 bytes
Largest blk: 64 bytes
WARNING: largest free block < 1 KB!
// 第3次
Before ukf update.
Heap total : 384 bytes
Free total : 384 bytes
Largest blk: 64 bytes
WARNING: largest free block < 1 KB!
xdc.runtime.Memory: line 52: out of memory: heap=0xc070120, size=16
xdc.runtime.Error.raise: terminating execution

堆的属性如下:

var HeapBuf = xdc.useModule('ti.sysbios.heaps.HeapBuf');
var heapBufParams = new HeapBuf.Params();
heapBufParams.blockSize = 64;
heapBufParams.numBlocks = 6;
heapBufParams.align = 8;
heapBufParams.sectionName = "ukfHeapBuf";
Program.global.ukfHeapBuf = HeapBuf.create(heapBufParams);