1.什么是FreeRTOS?
FreeRTOS是一个迷你的实时操作系统内核。是一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。
在嵌入式领域,FreeRTOS是不多的同时具有实时性,开源性,可靠性,易用性,多平台支持等特点的嵌入式操作系统。目前,FreeRTOS已经发展到支持包含X86,Xilinx,Altera等多达30种的硬件平台,其广阔的应用前景已经越来越受到业内人士的瞩目。
2.为什么选择FreeRTOS?
问:什么精神鼓励你开发了FreeRTOS?
Richard Barry(FreeRTOS的创始人): 开发FreeRTOS的想法来自大约10多年前我经历的一个服务的项目,我的一个任务是选择一个合适的RTOS。当时可以选择的一个RTOS已经使用在该公司的商业产品里面了,但是版税极为昂贵。 而且,我们的应用仅仅需要一个很小的RTOS解决方案, 一个大的、商业的RTOS在我们这个项目中一点也没有价值。 我转而寻找一个适合的开源的RTOS,然而令我失望的是,因为没有好的文档,开源软件的学习周期太长了,还没有技术支持,软件的质量也难以让人满意。最终我只好推荐了一个商业的、没有产品版税的RTOS。
当项目结束的时候,我开始思考,有多数人会经历同样的寻找过程呢?我想只是应该有数千人计吧。 因为我是一个极客,我开始自己开发一个解决方案,从中我也找到了乐趣。 最初的FreeRTOS 版本发表了之后,很明显我的预计是正确的,的确有数千计的工程师寻找这种解决方案。
之后,我就更正式的安排和计划这个工作。首先我把使用开源的免费软件的风险列了出来,比如质量、知识产权侵权和技术支持问题,接着制定了一个可以减少以上风险的FreeRTOS开发和发行的模式。举三个例子吧,FreeRTOS遵守MISRA规范,进而保证产品的质量,使用FreeRTOS没有知识产权侵权的风险,而且通过社区和专业公司提供技术支持。可以这样说,FreeRTOS基本上就是一个商业RTOS,但是完全免费,这也就是今天人们看到FreeRTOS如此受到欢迎的原因。———— 对话FreeRTOS创始人
———此处内容来自博客(https://blog.csdn.net/liyuanbhu/article/details/7911163)
开发环境:CubeMX Vesion 5.4.0
Keil Vesion 5.28
(一)首先,像往常一样需要先设置RCC、SYS以及时钟树,这里不做详细介绍。
需要提醒一点的是:裸机的时钟源默认是SysTick,但是开启FreeRTOS后,FreeRTOS会占用SysTick,所以需要需要为其他总线提供另外的时钟源。具体步骤如下图(以TIM7例)
(二)开启FreeRTOS(选择CMSIS_V1,V2我没用过),进行相关配置。详情如下:
在FreeRTOS的配置列表中有七种不同属性的配置,为其标上序号,其对应的内容为:
详情如下:
1. Task and Quenes 任务与队列
关于任务和队列的创建,这里不做详细介绍,因为后面还会继续更新博客专门讲任务和队列创建以及对应的API函数。这里主要提醒一点:任务与队列不一定需要在CubeMX中创建,也可以在其生成的工程中调用FreeRTOS源码手动创建任务与队列。在CubeMX中创建任务本质上和在工程内创建没有什么不同,都是都调用FreeRTOS源码,只不过CubeMX会对FreeRTOS源码进行二次封装。如果不想所有任务都挤在一个C文件中,那么就可以手动创建任务。
2. Timers and Semaphores 定时器与信号量
用于定时器和信号量的创建
3. Mutexes 互斥量
用于互斥量的创建
4. FreeRTOS Heap Usage 堆使用情况
FreeRTOS Heap Usage 用于查看FreeRTOS堆的使用情况(关于堆与栈的区别)。就像电脑下载软件会占用电脑内存一样,FreeRTOS内创建任务也会占用单片机内存。除了任务,还有队列、信号量等等都会占用内存,从FreeRTOS Heap Usage 栏就能看出各部分的内存占用情况(以Bytes为单位)。
对于各个内核参数的理解,内容非常多,可以参考以下文章:
1 . FreeRTOS系列第6篇—FreeRTOS内核配置说明
注:作者对FreeRTOS内核的理解非常深入,建议反复观看。
2 . STM32CubeMX中的FreeRTOS的设置之内核参数
注:作者将参数整理成表格,非常直观,也非常容易理解。如果看得不爽可以点击下载它的PDF:(CSDN下载链接)。
注意: 参数中的 Enable代表1,Disable代表0。最终内核参数的设置会生成在工程中的FreeRTOSConfig_template.h文件中。
6. Include parameters 函数使能
各函数的功能如下图:
各函数的详细使用方法可以参考博客:
7. User Constants 用户常量
下面列出的是FreeRTOS比较好的学习资料:
1. FreeRTOS官网(可以下到源码与官方配套文档)
2. FreeRTOS相关API函数手册
3. 正点原子 《STM32F407+FreeRTOS开发手册》
4. 野火《FreeRTOS 内核实现与应用开发实战指南——基于Stm32》
4. FreeRTOS任务案例教学