一、FreeRTOS 介绍
什么是 FreeRTOS ?
Free即免费的,RTOS的全称是Real time operating system,中文就是实时操作系统。
注意:RTOS不是指某一个确定的系统,而是指一类操作系统。比如:uc/OS,FreeRTOS,RTX, RT-Thread等这些都是RTOS类操作系统。
FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管 理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满 足较小系统的需要。 由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、 embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对μC/OS-II、 embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移 植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行。
为什么选择 FreeRTOS ?
- FreeRTOS 是免费的;
- 很多半导体厂商产品的SDK(Software Development Kit)软件开发工具包,就使用FreeRTOS 作为其操作系统,尤其是WIFI、蓝牙这些带有协议栈的芯片或模块。
- 简单,因为FreeRTOS的文件数量很少。
FreeRTOS 资料与源码下载
官网资料:点击直达官网
祼机开发与 FreeRTOS
祼机(Bare Machine)是指硬件系统上没有任何操作系统支持的情况。在祼机开发中,开发者需要自己编写所有的驱动程序和操作系统,以实现设备控制和任务管理等功能。
FreeRTOS是一款面向嵌入式系统的实时操作系统,具有轻量级、可移植、开放源代码等特点。在祼机开发中,可以使用FreeRTOS作为操作系统,来简化开发过程。
在祼机开发中使用FreeRTOS,需要进行以下步骤:
- 在硬件系统上移植FreeRTOS操作系统。
- 编写任务函数,实现任务的具体功能。
- 使用FreeRTOS提供的API接口来进行任务管理、内存管理、时间管理、中断处理等操作。
- 根据具体需求,编写设备驱动程序,以实现对硬件设备的控制。
需要注意的是,在祼机开发中使用FreeRTOS,需要对系统硬件和软件进行深入的了解和掌握,因此开发过程较为复杂。同时,由于没有操作系统的支持,所以开发者需要对任务管理、内存管理等方面进行更加细致和严密的设计,以确保系统的稳定性和可靠性。
FreeRTOS 实现多任务的原理
- 严格来说 FreeRTOS 并不是实时操作系统,因为它是分时复用的。
- 系统将时间分割成很多时间片,然后轮流执行各个任务。
- 每个任务都是独立运行的,互不影响,由于切换的频率很快,就感觉像是同时运行的一样
二、移植 FreeRTOS 到 STM32F103C8T6
手动移植
过程复杂且繁琐,对新手不友好。如有需要手动移植,可参照大佬:FreeRTOS手动移植到STM32
使用CubeMX快速移植
快速移植流程
1. 在 SYS 选项里,将 Debug 设为 Serial Wire ,并且将 Timebase Source 设为 TIM2 (其它定 时器也行)。为何要如此配置?下文解说。
2. 将 RCC 里的 HSE 设置为 Crystal/Ceramic Resonator 。
3. 时钟配置
4.打开串口
5. 选择 FREERTOS 选项,并将 Interface 改为 CMSIS_V1 。V1 和 V2 有啥区别?下文解释。
6. 配置项目信息,并导出代码
7.导出代码之后打开文件,加入下面代码和打开Use MicroLIB 使printf重定向到串口
8.测试是否移植成功
一些常见问题
1. Timebase Source 为什么不能设置为 SysTick ?
裸机的时钟源默认是 SysTick,但是开启 FreeRTOS 后,FreeRTOS会占用 SysTick (用来生成1ms 定时,用于任务调度),所以需要为其他总线提供另外的时钟源。
2. FreeRTOS 版本问题
V2 的内核版本更高,功能更多,在大多数情况下 V1 版本的内核完全够用。
3. FreeRTOS 各配置选项卡的解释
- Events:事件相关的创建
- Task and Queues: 任务与队列的创建
- Timers and Semaphores: 定时器和信号量的创建
- Mutexes: 互斥量的创建
- FreeRTOS Heap Usage: 用于查看堆使用情况
- config parameters: 内核参数设置,用户根据自己的实际应用来裁剪定制 FreeRTOS 内核 Include parameters: FreeRTOS 部分函数的使能
- User Constants: 相关宏的定义,可以自建一些常量在工程中使用
- Advanced settings:高级设置
4. 内核配置、函数使能的一些翻译
内核参数的理解内容非常多,可以参考大佬:FreeRTOS内核配置说明