FreeRTOS 从入门到精通2
导言
在上一讲
笔者简单介绍了实时操作系统(RTOS-Real Time Operating System)的一些基础概念和在嵌入式系统中引入实时系统的必要性。这一讲将讲述如何基于STM32平台进行软件的开发和移植FreeRTOS的一些注意事项。
认识”瑞士军刀”软件的启动画面
俗话说得好,工欲善其事,必先利其器。STM32CubeIDE是意法半导体公司推出的一款免费的开发软件,基于GCC + Eclipse,并整合了STM32CubeMX(一个通过简单配置自动生成STM32代码的程序),借助Eclipse丰富的第三方资源可以方便地添加各种插件,堪称IDE界中得心应手的”瑞士军刀”。
主要特点:1.集成STM32CubeMX:STM32微控制器选择引脚分配,时钟,IP和中间件配置项目创建和初始化代码的生成 2.基于Eclipse™/CDT,支持ECLIPSE的™插件,GNU C / C ++中ARM®工具链和GDB调试器。 3.其他高级调试功能:CPU内核,IP寄存器和内存视图实时变量观看视图系统分析和实时跟踪(SWV)CPU故障分析工具 4.支持ST-LINK和J-Link调试探针下载安装及界面
STM32CubeIDE的下载地址如下所示,在下载之前需要登记下自己的姓名和邮箱地址,之后你的邮箱便会收到程序的下载链接。安装过程也比较简单,按照步骤就可以了。
STM32CubeIDE的程序界面
进行调试时的程序界面
程序界面如上图所示,用过eclipse的童鞋们是不是有种似曾相识的感觉?
移植FreeRTOS
STM32CubeIDE已经把FreeRTOS深度整合到了自家的系统中去了,所以移植FreeRTOS变得非常方便。在项目文件里有个ioc文件,ioc文件是负责配置stm32参数的文件,FreeRTOS的设置就在那个文件里。如果你是新建项目的话,程序首先会自动跳到配置stm32芯片的画面中去并把最后的结果保存成ioc文件。比如下图中双击templete.ioc文件便会弹出配置画面。
配置stm32参数的画面
在配置界面中可以对芯片进行配置。在这里我使用的是意法半导体推出的官方开发板stm32f4-discovery,采用的单片机芯片型号是stm32f429zitx。
性能参数内核:采用Crotex M4内核主频:最高主频 180MHzFPU:具有单精度浮点运算单元SRAM:256KB串口:最多有8个UART串口。I2C:可以提供3个I2C接口。ADC:3个12位的独立ADC, 可以提供 24 个输入通道。ADC最大采样频率可达2.4Msps,3路交替采样可达7.2MspsDMA:16个DMA 通道,每个DMA通道有4*32位FIFOSPI:最高可到45MHzTIM:TIM2和TIM5有 32 位上下计数功能I2S:2个I2S接口,支持全双工,放音和录音可以同时进行
选择Middleware(中间件)选项卡,从中选择FREERTOS选项卡得到如下的画面
FreeRTOS选项卡
在interface中根据需求选择CMSIS_V1或者CMSIS_V2后便移植好了。你此时可以看到FreeRTOS前面有个绿色的勾,这个代表FreeRTOS已经设置好了。当设置好一切后点击保存按钮,系统便会自动生成代码。STM32CubeIDE帮助开发者节省了很多开发的时间,移植从此就成了点个鼠标的事。
FreeRTOS的架构FreeRTOS的文件夹
如上图所示,在项目的结构中,Middleware(中间件)包含有FreeRTOS文件夹,里面便包含有FreeRTOS的所有源代码。
FreeRTOS的源文件说明
其中重要的几个文件如下:
tasks.c: 任务相关的代码(必须调用)list.c: 一个双向链表的代码(必须调用)queue.c: 队列用于任务间通讯的代码(大多数情况会使用)croutine.c: 多任务调度的代码(可选项)event_groups.c:事件标志组的代码(可选项)time.c : 内部实现的一个软件定时器的代码(可选项)
通常来说,在一个FreeRTOS的项目中,tasks.c和list.c与queue.c是必须要的,其它的文件是可选的。
CMSIS v1 VS v2应用开发的架构图
CMSIS RTOS是ARM公司设计的对操作系统的一个抽象封装。它提供了一种标准化的API接口让开发者可以调用嵌入式操作系统的功能而不必理会底层到底采用的是哪种操作系统。举个通俗的例子,比如读者想尝试其它的操作系统如鸿蒙LiteOS等又害怕移植会很花精力,如果LiteOS支持CMSIS-RTOS接口的话,读者基本可以不做修改就可以直接运行了,因为CMSIS RTOS API接口会负责调用系统的相关功能。(当然目前STM32CubeIDE只有针对FreeRTOS的直接选项)
CMSIS RTOS v1是为基于Cortex-M内核的单片机设计的。CMSIS RTOS v2是CMSIS RTOS v1的扩展添加了对适用于Armv8-M内核和多核芯片的操作系统的支持。如果从战未来的角度考虑(没错大声喊出来AMD Yes!)笔者在这里推荐选择CMSIS RTOS v2,方便以后移植切换到性能更强大的芯片上。
CMSIS RTOS版本号适用芯片型号RTOS v1Cortex-M0/M0+/M3/M4/M7RTOS v2所有的 Cortex-M, Cortex-A5/A7/A9常见操作系统API
CMSIS RTOS和FreeRTOS的一些常用API函数罗列在下图
CMSIS RTOS API对比FreeRTOS APIOne More Thing
图片来源:网络
关于STM32Cube的更多内容介绍可参考下面这本书
在下一篇文章中笔者将开发第一个HelloWorld程序。