This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI-RTOS
你好。
我 正在尝试更好地了解 heapmem 和 sysmem 的使用情况。
在我的 CFG 文件中:
如果我使用 BIOS.heapSize = 50000;// BIOS heapmem
malloc 不起作用。
如果我使用 Program.heap = 50000;//sysmem
malloc 有效、但占用的内存量 是两倍、我不能允许... (请参见附加的映像:一次位于 heapmem: ti_sysbios_b堆_HeapMem_instance_State_0_Buf__a 中,一次位于 rtsv7M4_T_le_v4SPD16_eabi.lib:memory.obj (.sysmem)中。
我在这里出了什么问题?
谢谢
我使用的是 TiRTOS 2.16.00.08、驱动程序包2.1.2.111
Shlomo、您好!
对于非 TI-RTOS (即非 SYS/BIOS)应用程序、Program.heap 用于确定系统堆的大小(例如、malloc 使用的内容)。
对于 TI-RTOS 应用程序、BIOS.heapSize 用于确定系统堆(也称为默认堆)的大小。
出于传统目的、如果 BIOS.heapSize 未设置、但 Program.heap 为、TI-RTOS 应用程序将使用 Program.heap 设置。
如果.cfg 文件中都有、则忽略 Program.heap 并在构建输出中用以下公式表示:
"警告:TI.SYSBIOS.BIOS:"c:/ti/tirtos_tivac_2_16_01_14/products/bios_6_45_02_31/packages/ti/sysbios/BIOS.xs "、第328行:TI.SYSBIOS.BIOS heapSize:BIOS.heapSize 和 Program.heap 均已设置。 程序堆被忽略。 使用 BIOS.heapSize。"
您可以在 CCS->Tools->Runtime Object View->HeapMem->Detailed 中确认堆的大小。 例如、我使用了.cfg 文件并得到了以下结果:
当我注释掉 BIOS.heapSize 时、上面的 totalSize 为50000。
对于 TI-RTOS 应用程序、malloc (和 Memory_alloc (NULL、...)) 使用系统堆。 调用 malloc 时、会分配额外的内存以存储缓冲区之前的 size 字段。 因此、如果堆大小为50000字节、malloc (50000)将失败、这并不奇怪。 malloc (50000-8)将会成功(假设堆没有分配其他内存)。
Todd