最近正在学习FreeRTOS, 觉得每次都要照着流程手动给工程安装, 很麻烦. 一天在无聊乱翻Keil时, 发现Keil内部居然自带FreeRTOS包. 废话不多说, 马上开始操作.
软硬件详情
平台: Keil MDK 5.29 系统: Win10 21H1 设备: 德州仪器TM4C123GH6PM单片机(TM4C123GXL评估板)
操作流程
一、为Keil安装FreeRTOS支持包
打开Keil, 点击工具栏那个像三个饼干装在碗里一样的图标 在Packs一栏里, 找到这个FreeRTOS包, 点击Install, 它会自动开始安装.
Keil内可安装CMSIS-FreeRTOS或Native FreeRTOS, 本文两种方式都会介绍, 按工程需求选择安装类型.
二、为已有工程安装Native FreeRTOS
你能在
Arm/Packs/ARM/CMSIS-FreeRTOS/10.4.6/CMSIS/Documentation/General/html/cre_freertos_proj.html#cmsis_freertos_config
路径下找到官方的安装教程, 只不过是英语的 为了方便大家, 我用中文简单的讲一遍.
任意打开一个简单的空白工程, 我们以Blinky闪灯项目为例(如果硬件型号在Keil PackInstaller里面找得到, 并且资源够用, 一般都能成功安装)
在确保你的工程编译没问题后, 点开这个像一块饼干一样的图标 像我这样勾选(勾多了或是勾少了下面都会有提示) 点击OK, 你就会发现FreeRTOS和芯片Startup的有关源码自动的插入了进去. 接下来兴冲冲的编译, 发现报了几个错. 首先报了一个这个:
#error configUSE_TIMERS must be set to 1 to make the xTimerPendFunctionCall() function available.
可能是原生BUG? 在FreeRTOSConfig.h里面把configUSE_TIMERS改成1就不报错了.
继续编译, 又有一个错
.\output\model.sct(7): error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.
Not enough information to list image symbols.
Not enough information to list load addresses in the image map.
Finished: 2 information, 0 warning and 1 error messages.
".\output\model.axf" - 1 Error(s), 0 Warning(s).
网上查了查, 这类错误一般是startup文件有重复导致的. 把startup文件删得只剩一个, 编译, 不报错了.
三、注意事项
- 原工程文件夹里面千万不要有和FreeRTOS有关源代码重名的文件, 如: task.h, list.h等, 这样会导致文件冲突, 报莫名其妙的错.
- FreeRTOSConfig.h已经按照你用的硬件改好了, 像中断优先级那些都不用改
- 加在里面的RTOS源代码并没有添加进工程文件夹, 而是呆在了Keil的安装目录里面. 这样一来可能可移植性不会太好, 而且在Git代码时无法把那堆源码Git上去, 在大型项目合作时用之前要三思
四、为工程安装CMSIS-FreeRTOS
该类型和Native FreeRTOS安装流程基本一样, 有以下几点不同:
- RTOS Config选项不一样(注意红线处)
- 这个方式生成的FreeRTOSConfig.h可以用内置Configuration Wizard工具来编辑(两种方式生成的FreeRTOSConfig.h文件是不一样的)
下一篇文章将着重介绍用CMSIS-FreeRTOS实现Blinky(亮灯)功能.
|