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.

[参考译文] RTOS/TM4C129XNCZAD:了解 Heapme/sysmem

Guru**** 2033770 points
Other Parts Discussed in Thread: SYSBIOS
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/743426/rtos-tm4c129xnczad-understanding-heapmem-sysmem

器件型号:TM4C129XNCZAD
Thread 中讨论的其他器件:SYSBIOS

工具/软件: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)中。

我在这里出了什么问题?

谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我建议、如果我没有专门为 BIOS.heapSize 分配一个大小、它将采用与为 systmem 分配的大小相同的大小?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Shlomo、您好!

    是否可以附加.cfg? 此外、您使用的是 TI-RTOS 的哪个版本?

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我使用的是 TiRTOS 2.16.00.08、驱动程序包2.1.2.111  

    e2e.ti.com/.../expEmbedded.cfg

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    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