目录
1、Timebase Source 为什么不能设置为 SysTick?
一、FreeRTOS相关概念
1、什么是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操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行,其最新版本为10.4.4版。
2、选择FreeRTOS的原因
- FreeRTOS 是免费的;
- 很多半导体厂商产品的SDK(Software Development Kit)软件开发工具包,就使用FreeRTOS 作为其操作系统,尤其是WIFI、蓝牙这些带有协议栈的芯片或模块;
- 简单,因为FreeRTOS的文件数量很少;
- FreeRTOS,最简单(只实现了内核),出货量最大,”使用的资料多,深入的资料少;
- RT-Thread,对比学习,社区成熟,组件丰富,快速上手。
3、FreeRTOS与Linux、单片机的区别
4、FreeRTOS 资料与源码下载
官网资料:点击直达官网
5、裸机开发与FreeRTOS
祼机(Bare Machine)是指硬件系统上没有任何操作系统支持的情况。在祼机开发中,开发者需要自己编写所有的驱动程序和操作系统,以实现设备控制和任务管理等功能。
FreeRTOS是一款面向嵌入式系统的实时操作系统,具有轻量级、可移植、开放源代码等特点。在祼机开发中,可以使用FreeRTOS作为操作系统,来简化开发过程。
在祼机开发中使用FreeRTOS,需要进行以下步骤:
- 在硬件系统上移植FreeRTOS操作系统。
- 编写任务函数,实现任务的具体功能。
- 使用FreeRTOS提供的API接口来进行任务管理、内存管理、时间管理、中断处理等操作。
- 根据具体需求,编写设备驱动程序,以实现对硬件设备的控制。
需要注意的是,在祼机开发中使用FreeRTOS,需要对系统硬件和软件进行深入的了解和掌握,因此开发过程较为复杂。同时,由于没有操作系统的支持,所以开发者需要对任务管理、内存管理等方面进行更加细致和严密的设计,以确保系统的稳定性和可靠性。
举个例子,妈妈要一边给小孩喂饭,一边加班跟同事微信交流,怎么办?
// 经典单片机程序 void main() { while (1) { 喂一口饭(); 回一个信息(); } } ------------------------------------------------------ // RTOS程序 喂饭() { while (1) { 喂一口饭(); } } 回信息() { while (1) { 回一个信息(); } } void main() { create_task(喂饭); create_task(回信息); start_scheduler(); while (1) { sleep(); } }
6、FreeRTOS实现多任务原理
- 严格来说 FreeRTOS 并不是实时操作系统,因为它是分时复用的。
- 系统将时间分割成很多时间片,然后轮流执行各个任务。
- 每个任务都是独立运行的,互不影响,由于切换的频率很快,就感觉像是同时运行的一样
二、将FreeRTOS移植到STM32F103C8T6
1、手动移植
过程复杂且繁琐,对新手不友好。如有需要手动移植,可参照大佬:FreeRTOS手动移植到STM32
2、使用CubeMX快速移植
2.1 在 SYS 选项里,将 Debug 设为 Serial Wire ,并且将 Timebase Source 设为 TIM2 (其它定时器也行)
2.2 将 RCC 里的 HSE 设置为 Crystal/Ceramic Resonator
2.3 配置时钟
2.4 串口配置
2.5 选择 FREERTOS 选项,并将 Interface 改为 CMSIS_V1
2.6 配置项目信息,并导出代码
2.7 导出代码之后打开文件,加入下面代码和打开Use MicroLIB 使printf重定向到串口
2.8 移植测试
三、使用Cubemx配置FreeRTOS的常见问题
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内核配置说明