问题现象
在使用CubeMX创建FreeRTOS工程时,若CMSIS-RTOS API版本选择了V2,最开始编译会出现错误:
../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2/freertos_os2.h(31): error: #13: expected a file name
错误提示缺少文件
解决办法
在CubeMX打开该工程并切换到如下界面
取消右侧的勾选并将选项改成V1.8.5版本
之后点击右上角的代码生成按钮更新程序并在Keil内进行编译即可
错误原因
在V1.8.6的版本框架中,根据编译器的错误提示可以定位到freertos_os2.h文件的如下位置
这行代码的作用是包含 CMSIS 设备头文件,但编译器找不到文件“CMSIS_device_header”
即使将这行代码注释也会有其他的错误出现。
在该版本的框架中可以看到cmsis_os2.c文件包含了以下两个库文件:
- freertos_os2.h
- freertos_mpool.h
其中错误行就是出现在freertos_os2.h中
当我们在CubeMX把框架切换成V1.8.5之后,cmsis_os2.c文件就不会包含这两个库文件,软件框架的不同就规避掉了这个问题。