我将 FreeRTOS 堆放在 F469I-Disco 板的扩展内存中。
让内存正常工作(LTDC 显示器需要在那里工作)。
FreeRTOS 需要将 configAPPLICA
tiON_ALLOCATED_HEAP 选项设置为 1。CubeMXIDE 设置选项(在版本 1.8.0 中)不会在任何地方提供该选项,并且此参数默认为 0。
在 FreeRTOS.h 中设置变量有效,但会一直持续到进行更改并从 IOC 文件重新生成代码为止。
此外,需要修改 heap4c 文件以允许 FreeRTOS(@第 58 行)搜索命名的扩展内存块。
这在重新生成代码时也会被清除。
一个简单的解决方法是让最后一部分(静态堆)仅以变量 == 0 为条件。
然后用户可以使用预处理器指令在用户部分添加自己的代码。
另一种方法是在需要用户堆时添加具有现有结构的用户代码部分。
需要添加的代码(抱歉缺少格式,提问时不可用)是:
#if (configAPPLICATION_ALLOCATED_HEAP == 1)
/* 应用程序编写者已经定义了用于 RTOS 的数组
堆 - 可能是这样它可以放在一个特殊的段或地址中。*/
// 外部 uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
uint8_t ucHeap[ configTOTAL_HEAP_SIZE ] __attribute__ ((section (".freertos_data")));
#别的
static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
#endif /* configAPPLICATION_ALLOCATED_HEAP */
因此需要进行两个修复,一个在用户堆的 IDE 代码选项中,第二个用于更改 heap4c(其他实现可能需要)。
不,没有考虑使用堆 5C,因为我不希望堆分裂,只是优雅地重新定位。