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.
器件型号:RM48L930
支持路径:/Product/Help、带器件选择/
您好!
我正在运行使用 HALCoGen 和 FreeRTOS 构建的 CCSv7项目。 在项目属性的 ARM 连接器-基本选项下、设置 C/C++动态内存分配的堆大小。 该存储 器位于.sysmem 中、在编译之后、.sysmem 的位置在创建的.map 文件中可见。 运行时支持库(rtsv7R4)中的 malloc()函数(file = memory.c)使用此堆区域。 C++运算符'new'的工作方式与我的代码中预期的一样。
另请注意、在 FreeRTOSConfig.h 中、configTOTAL_HEAL_SIZE 设置。 os_heap.c 中的 HALCoGen 代码使用此函数来创建其自己的堆(ucHEAP[])、该堆由 pvPortMalloc()使用。 pvPortMalloc()也按预期工作。 请注意,FreeRTOS 在创建任务和操作系统对象时使用 pvPortMalloc()。
因此、在我的当前设置中、我有2个不同的堆、如果每个堆被轻轻使用、这对于有限的 RAM 来说似乎是非常浪费的。 为什么 HALCoGen 有一个与运行时库分开的堆? 我可以合并这2个堆、以便最大限度地减小存储器占用空间吗? 您是否建议应用程序代码从不调用 pvPortMalloc(),而是使用 RTS 库(memory.c)中的 malloc()?
谢谢、
Keith
与.sysmem 在 RAM 中的位置相关的后续问题。 我的 linker.cmd 文件如下所示:
部分
{
.intvecs:{}>向量
闪存受保护区域中的/* FreeRTOS 内核*/
.kernelTEXT:{}>内核
.cinit:{}>内核
.pinit:{}>内核
/*将其余代码转换为用户模式闪存区域*/
.text:{}> FLASH0| FLASH1
.const:{}> FLASH0| FLASH1
/* RAM 受保护区域中的 FreeRTOS 内核数据*/
.kernelbss:{}>Kram
.kernelHEAP:{}> RAM
.bss:{}> RAM
.data :{}> RAM
/*用户代码开始(4)*/
.sysmem:{}>RAM
/*用户代码结束*/
}
构建后、我的映射文件显示 sysmem 位于.bss 段之后、但位于.data 段之前。 我希望.sysmem 位于.data 段之后。 如何配置 link.cmd 文件来执行此操作?
好的、谢谢 Chuck。