FreeRtos教程
FreeRTOS 是一个轻量级的实时操作系统内核,适用于微控制器和嵌入式系统。它具有以下特点:开源免费:遵循 MIT 许可证。可移植性强:支持多种处理器架构。功能丰富:提供任务管理、信号量、队列、定时器等功能。任务是 RTOS 的基本组成单位,是一个逻辑概念,用于实现特定功能。FreeRTOS 是一个功能强大且灵活的实时操作系统,适用于各种嵌入式应用场景。通过学习任务管理、信号量、事件标志组、队列
实时系统概念
RTOS(Real Time Operating System是一种实时操作系统,能够在外部事件发生时快速响应,调度系统资源,确保实时任务协调运行。RTOS 的核心特点是**实时性**,即系统能够在规定的时间内完成任务。
硬实时系统:必须在严格的时间限制内完成任务,否则会导致系统失效(如航空航天系统)。
软实时系统:任务的时间限制较为宽松,超时不会导致系统失效(如多媒体播放器)。
系统开发与裸机开发的区别
裸机开发
单任务处理:一次只能处理一个任务。
实时性差:中断响应速度较快,但多个中断可能导致不确定性问题。
开发效率低:代码复杂时,可读性和维护性较差。
RTOS 开发
多任务支持:通过时间管理和优先级调度,支持多任务并发处理。
实时性强:任务调度可以快速响应事件。
开发效率高:代码模块化,可读性好,适合复杂功能场景。
| 特性 | 裸机开发 | RTOS 开发 |
|----------------|------------------------|-------------------------|
| 任务管理 | 单任务 | 多任务 |
| 实时响应 | 中断响应快,但多中断时不稳定 | 任务调度快速响应 |
| 开发效率 | 低 | 高 |
| 适用场景 | 简单功能 | 复杂功能 |
实时操作系统与计算机操作系统的区别
计算机操作系统
Windows:兼容性强,适合普通办公和娱乐。
MacOS:图像处理和软件开发能力强,适合开发人员。
Linux:开源、可裁剪,适合嵌入式开发和极客用户。
嵌入式实时操作系统
RTOS:专注于轻量级、实时性和稳定性,资源开销小,适合嵌入式领域。
常见 RTOS:FreeRTOS、RT-Thread、uC/OS-II。
国产 RTOS:HarmonyOS、AliOS。
RTOS 的领域
RTOS 广泛应用于以下领域:
工业控制:PLC、机器人控制。
汽车电子:车载娱乐系统、自动驾驶。
消费电子:智能家居、可穿戴设备。
-医疗设备:心脏起搏器、医疗监测设备。
FreeRTOS 介绍
FreeRTOS 是一个轻量级的实时操作系统内核,适用于微控制器和嵌入式系统。它具有以下特点:
开源免费:遵循 MIT 许可证。
可移植性强:支持多种处理器架构。
功能丰富:提供任务管理、信号量、队列、定时器等功能。
FreeRTOS 在 CubeMX 中的配置
1. 进入 CubeMX
打开 STM32CubeMX,选择目标芯片型号。
2. 下载 FreeRTOS 软件包
在 "Middleware" 选项卡中,选择 "FREERTOS",点击 "Add" 添加 FreeRTOS。


3. 配置 FreeRTOS
Core:选择非安全模式。
Heap:选择堆区管理方式(如 Heap 4)。
Tasks:添加任务并设置优先级。

多任务的相关概念
1. 什么是任务
任务是 RTOS 的基本组成单位,是一个逻辑概念,用于实现特定功能。
2. 任务的优先级
FreeRTOS 支持 57 个优先级,数字越大优先级越高。
注意:STM32 中断优先级数字越小优先级越高。
3. 任务的状态
就绪态:任务准备好运行。
运行态:任务正在执行。
阻塞态:任务等待事件(如延时、信号量)。
挂起态:任务被挂起,需手动恢复。
4. 任务调度算法
抢占式调度:高优先级任务优先执行。
时间片轮转:每个任务分配固定时间片。
FreeRTOS 实现多任务创建
1. 配置 CubeMX
设置串口引脚。
添加多个任务并设置优先级。


2. 生成代码
生成代码后,在 Keil 或 IDE 中分析主函数和任务代码。
3. 任务代码示例
void Task1(void *pvParameters) {
while (1) {
// 任务1逻辑
vTaskDelay(100); // 延时100ms
}
}
void Task2(void *pvParameters) {
while (1) {
// 任务2逻辑
vTaskDelay(200); // 延时200ms
}
}
FreeRTOS 信号量
1. 信号量概念
信号量用于解决临界区问题和任务同步。常见的信号量类型包括:
二值信号量:用于互斥访问或同步。
计数信号量:用于事件计数和资源管理。
2. 二值信号量 API
创建信号量:xSemaphoreCreateBinary()
获取信号量:xSemaphoreTake()
释放信号量:xSemaphoreGive()
3. 计数信号量 API
创建信号量:`xSemaphoreCreateCounting()`
获取信号量:`xSemaphoreTake()`
释放信号量:`xSemaphoreGive()
FreeRTOS 事件标志组
1. 事件标志组概念
事件标志组用于任务与多个事件之间的同步。每个事件位表示一个事件的状态。


2. 事件标志组 API
创建事件组:osEventFlagsNew()
设置标志位:osEventFlagsSet()
等待标志位:osEventFlagsWait()
FreeRTOS 队列
1. 队列概念
队列用于任务间通信,遵循先进先出原则。
2. 队列 API
创建队列:osMessageQueueNew()
写入数据:osMessageQueuePut()
读取数据:osMessageQueueGet()
3.队列的操作步骤

FreeRTOS 软件定时器
1. 定时器概念
定时器用于在指定时间点执行任务,支持一次性和周期性模式。
2. 定时器 API
创建定时器:osTimerNew()
启动定时器:osTimerStart()
停止定时器:osTimerStop()
删除定时器:osTimerDelete()
总结
FreeRTOS 是一个功能强大且灵活的实时操作系统,适用于各种嵌入式应用场景。通过学习任务管理、信号量、事件标志组、队列和定时器等核心功能,开发者可以高效地构建复杂的嵌入式系统。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)