开发环境:Windows
软件:
1、STM32CubeMX 6.3.0
2、MDK 5.14
一、初识freeRTOS系统
1.什么是FreeRTOS?
- Free 即免费的,RTOS 全称是 Real Time Operating System,中文就是实时操作系统。注意,RTOS 不是指某一个确定的系统,而是指一类系统。比如 uC/OS,FreeRTOS,RTX,RT-Thread 等这些都是 RTOS 类操作系统。
- 操作系统允许多个任务同时运行,这个叫做多任务。实际上,一个处理器核心在某一时刻只能运行一个任务。操作系统中任务调度器的责任就是决定在某一时刻究竟运行哪个任务。任务调度在各个任务之间的切换非常快,就给人们造成了同一时刻有多个任务同时运行的错觉。
- 某些操作系统给每个任务分配同样的运行时间,时间到了就轮到下一个任务,比如Unix 操作系统。 FreeRTOS 操作系统则是由用户给每个任务分配一个任务优先级,任务调度器就可以根据此优先级来决定下一刻应该运行哪个任务。
- FreeRTOS 是 RTOS 系统的一种,FreeRTOS 十分的小巧,可以在资源有限的微控制器中运行,当然,FreeRTOS 不仅局限于在微控制器中使用。但从文件数量上来看 FreeRTOS 要比uC/OSII 和 uC/OSIII 小的多。
2.为什么选择 FreeRTOS ?
RTOS 类系统有很多,比如 uC/OS,资料很多,尤其是中文资料,那为什么要选择 FreeRTOS 呢?
- FreeRTOS是免费的,学习RTOS操作系统的话 uC/OS是首选,但要做产品的话,免费的FreeRTOS操作系统就是个不错的选择。
- 许多半导体厂商产品的 SDK(Software Development Kit—软件开发工具包) 包就使用 FreeRTOS 作为其操作系统,尤其是 WIFI、蓝牙这些带协议栈的芯片或模块。
- 简单,因为FreeRTOS 的文件数量很少。
3.FreeRTOS 特点
FreeRTOS 是一个可裁剪的小型 RTOS 系统,其特点包括:
- FreeRTOS 的内核支持抢占式,合作式和时间片调度。
- 提供了一个用于低功耗的 Tickless 模式。
- 系统的组件在创建时可以选择动态或者静态的 RAM,比如任务、消息队列、信号量、软件定时器等等。
- FreeRTOS-MPU 支持 Corex-M 系列中的 MPU 单元,如 STM32F429。
- FreeRTOS 系统简单、小巧、易用,通常情况下内核占用 4k-9k 字节的空间。
- 高可移植性,代码主要 C 语言编写。
- 高效的软件定时器。
- 强大的跟踪执行功能。
- 堆栈溢出检测功能。
- 任务数量不限。
- 任务优先级不限
二、CubeMx配置
1、打开FREERTOS选择
2、因为 freeRTOS需要用到系统的SysTick, 系统时基需要修改为其他的定时器
Systick用到FreeRTOS上的调度,所以要求Systick为最低优先级15,这样可以保证systick不会对进程造成影响,仅存在延时
时基中断优先级改为最高级0
3、将系统分配的HEAP(堆)大小改大些,这里我分配了10k字节。
3、点击生成代码,MDK打开工程,添加代码
在默认的任务中StartDefaultTask添加如下代码,实现LED闪烁。
编译下载,即可。
三、总结
我们在上一节的内容基础上,添加了freeRTOS系统,为后期的代码做了基础的框架。