在使用STM32H750的芯片移植FreeRTOS过程中遇到的该问题记录,为什么会出现该问题后续深入分析。

将FreeRTOS的源码在Keil中添加了文件和头文件路径(具体怎么添加网上随便搜都有)

使用Keil编译后出现下图所示的两行的报错:

如何解决该问题,那就是在FreeRTOSConfig.h的文件中将configSUPPORT_STATIC_ALLOCATION配置为0,然后重新编译。

根据Keil内部自带的查找工具查找vApplicationGetIdleTaskMemory函数,发现其在下图所示的函数中进行了调用:

可以发现在FreeRTOSConfig.h中将configSUPPORT_STATIC_ALLOCATION使能后,就会编译以下代码段,而下面代码段中就包含了vApplicationGetIdleTaskMemory这一函数。

继续查找,会来到定义vApplicationGetIdleTaskMemory函数的代码段,但该函数默认状态下是被取消编译的:

还有vApplicationGetTimerTaskMemory函数情况也是一样的:

这其中就涉及到了三个配置项:

1.configSUPPORT_STATIC_ALLOCATION

2.configKERNEL_PROVIDED_STATIC_MEMORY

3.portUSING_MPU_WRAPPERS

至于后面两个配置项的作用后续进行分析,大致看下来一个是和MPU封装相关、另一个是内核提供静态内存相关

在FreeRTOS官网有定制配置项相关的内容,其中就包含了FreeRTOSConfig.h中各个配置项的含义和用法,取configSUPPORT_STATIC_ALLOCATION配置项的说明,如下所示:

从描述来看,在使能configSUPPORT_STATIC_ALLOCATION时,需要我们自己定义vApplicationGetIdleTaskMemory、vApplicationGetTimerTaskMemory这两个函数。

下面是官方示例以及函数建立的说明:

以下是对上面两个函数注释的机翻:

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐