0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FreeRTOS通俗理解指南:基础概念 + 架构+ 内核组件+练手实验

华清远见工控 ? 2025-05-30 13:40 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

RTOS 基础概念

想象一下,你是一个忙碌的厨师,在厨房里同时要完成煎牛排和煮意大利面两项任务。

1.传统单线程模式(没有RTOS)

如果你只能按顺序一项一项地做,就会是这样的过程:

  • 先煎一会儿牛排
  • 然后去看看意大利面煮得怎么样
  • 再回来煎牛排

如果煎牛排的过程比较复杂,需要频繁翻面和控制火候,那么意大利面就可能会煮过头。反之,如果一直盯着意大利面,牛排就可能煎糊了。这种方式就类似于传统的单片机开发,没有使用操作系统任务之间相互影响,效率较低

用代码来表示就是:

8c233fe1000a4dad890df941870b7939~tplv-obj.image?lk3s=ef143cfe&traceid=202505301331498801F88247CDF942646A&x-expires=2147483647&x-signature=j1VW5081jWwmiTCsUlPDKLxpvyk%3D

2.使用 RTOS 的多任务模式

当引入 RTOS 后,就可以 “同时” 进行多项任务。你可以这样安排:

  • 启动一个 “煎牛排任务”,让它自己在那里煎着
  • 同时启动一个 “煮意大利面任务”,让它也自己煮着
  • 你只需要在适当的时候去查看一下每个任务的进度,比如每隔一会儿去给牛排翻个面,或者看看意大利面有没有煮好

这样,牛排和意大利面都能在合适的时间完成,而且不会相互干扰。这就是 RTOS 的基本概念,它可以让单片机同时处理多个任务,提高系统的效率和实时性。

RTOS 的全称是 Real-time operating system,即实时操作系统。与我们日常使用的 Windows 等通用操作系统不同,RTOS 更注重实时性,能够确保任务在规定的时间内完成。例如,在一个工业控制系统中,如果某个传感器的数据采集任务不能及时完成,可能会导致整个系统的失控。

下面是一个简单的 RTOS 程序示例,用 C 语言编写:

e3f65f1c9beb403aabf60b4194649716~tplv-obj.image?lk3s=ef143cfe&traceid=202505301331498801F88247CDF942646A&x-expires=2147483647&x-signature=n4y7Ew73v9xCokqLf8xM%2FxOdQ2I%3D

在这个示例中,我们创建了两个任务:Task_FrySteakTask_CookPasta。每个任务都有自己的独立运行逻辑,通过 vTaskDelay 函数来控制任务的执行时间间隔。xTaskCreate 函数用于创建任务,vTaskStartScheduler 函数用于启动任务调度器,开始调度各个任务的执行。

FreeRTOS 简介

为什么选择 FreeRTOS

在众多的 RTOS 中,FreeRTOS 是一个非常受欢迎的选择,它有以下几方面优点:

  • 开源免费:FreeRTOS 是开源的,任何人都可以免费使用和修改,这对于降低开发成本非常有帮助。
  • 轻量级:它的内核非常小巧,占用的资源很少,适合在资源有限的单片机上运行。
  • 实时性好:FreeRTOS 提供了高效的任务调度算法,能够确保任务在规定的时间内完成,满足实时性要求。
  • 易于使用:FreeRTOS 提供了丰富的 API 函数,易于学习和使用。同时,它还支持多种硬件平台,包括 ARMRISC-V 等常见的架构。

FreeRTOS 的架构

FreeRTOS 的架构可以分为以下几个层次:

1.硬件抽象层(HAL)

这一层负责与硬件进行交互,包括处理器、内存、外设等。它提供了一些基本的函数,如中断处理、时钟管理等,使得 FreeRTOS 能够在不同的硬件平台上运行。

2.内核层

这是 FreeRTOS 的核心部分,包括任务调度器、内存管理、信号量、互斥量等组件。任务调度器负责决定哪个任务应该在当前时刻运行,内存管理组件负责分配和释放内存,信号量和互斥量用于任务之间的同步和通信

3.应用层

这一层是用户编写的应用程序,包括各种任务和函数。用户可以根据自己的需求创建和管理任务,使用 FreeRTOS 提供的 API 函数来实现各种功能。

FreeRTOS 内核组件详解

1.堆内存管理

FreeRTOS 提供了多种堆内存管理方案,用户可以根据自己的需求选择合适的方案。常见的堆内存管理方案包括:

  • 简单分配器:这种方案简单易用,但内存利用率较低,可能会产生内存碎片。
  • 最佳适配分配器:这种方案能够更好地利用内存,减少内存碎片的产生,但实现相对复杂一些。

2.任务管理

任务是 FreeRTOS 中最基本的执行单元。FreeRTOS 支持多任务,每个任务都有自己的优先级和堆栈空间。任务可以处于以下几种状态之一:

  • 运行态:当前正在执行的任务。
  • 就绪态:任务已经准备好运行,但由于其他任务正在运行,暂时无法执行。
  • 阻塞态:任务因为等待某个事件(如信号量、消息队列等)而暂停执行。
  • 挂起态:任务被挂起,暂时不会被调度执行。

3.队列管理

队列是 FreeRTOS 中用于任务之间通信的重要机制。任务可以通过队列发送和接收数据,实现数据的共享和传递。队列具有以下特点:

  • 先进先出(FIFO):数据按照发送的顺序依次被接收。
  • 支持中断安全:可以在中断服务程序中安全地使用队列。

4.软件定时器

软件定时器是 FreeRTOS 提供的一种定时机制,它可以在指定的时间间隔后触发一个回调函数。软件定时器可以用于实现一些周期性的任务,如数据采集、系统监控等。

5.中断管理

中断是单片机中非常重要的机制,它可以让 CPU 及时响应外部事件。FreeRTOS 提供了对中断的支持,用户可以在中断服务程序中调用 FreeRTOS 的 API 函数,实现任务的切换和通信。

6.临界区

临界区是指一段代码,在这段代码执行期间,不允许其他任务或中断打断。FreeRTOS 提供了进入和退出临界区的函数,用户可以在需要保护的代码段前后调用这些函数,确保代码的原子性。

7.互斥量

互斥量是一种用于保护共享资源的机制,它可以确保在同一时刻只有一个任务能够访问共享资源。FreeRTOS 提供了互斥量的实现,用户可以通过获取和释放互斥量来控制对共享资源的访问。

8.守门任务

守门任务是一种特殊的任务,它可以用于控制对某些资源的访问。只有当守门任务允许时,其他任务才能访问这些资源。

9.事件组

事件组是一种用于任务之间同步的机制,它可以让一个任务等待多个事件的发生。任务可以通过设置和清除事件组中的事件来通知其他任务。

10.任务通知

任务通知是一种轻量级的任务间通信机制,它可以让一个任务向另一个任务发送通知。任务通知可以用于实现一些简单的任务间同步和通信。

FreeRTOS 实验部分

为了帮助读者更好地理解和掌握 FreeRTOS 的使用方法,我们的课程提供了丰富的实验内容。实验部分采用了两种不同的开发板:华清远见STM32F103 和 STM32F407,并分别使用了 MDK-ARM 和 STM32CubeIDE 两种集成开发环境。

d838e674f04a4ccf954209f37d496255~tplv-obj.image?lk3s=ef143cfe&traceid=202505301331498801F88247CDF942646A&x-expires=2147483647&x-signature=t0MGTEMbQrYM7QjT24BrAAzVDjw%3D

在实验中,我们将逐步引导初学者完成以下内容:

使用 STM32CubeMX 配置 FreeRTOS:通过图形化界面快速配置 FreeRTOS 的各项参数,生成初始化代码。

创建和管理任务:学习如何创建、启动、停止和删除任务,以及如何设置任务的优先级和堆栈大小。

使用队列和信号量进行任务间通信:了解如何通过队列和信号量实现任务之间的数据传递和同步。

使用软件定时器和中断:掌握软件定时器和中断的使用方法,实现周期性任务和外部事件的响应。

内存管理和性能优化:学习如何优化内存使用,提高系统的性能和稳定性。

通过这些实验,让初学者深入了解 FreeRTOS 的工作原理和使用方法,掌握如何在实际项目中应用 FreeRTOS 来开发高效、稳定的实时系统。

总之FreeRTOS 是一款功能强大、易于使用的实时操作系统,它为单片机开发提供了丰富的功能和高效的任务管理机制。通过学习 FreeRTOS,读者可以掌握实时系统的开发方法,提高自己的编程能力和解决实际问题的能力。

在我们的嵌入式体系课:STM32全栈工程师实战课》里有专门的FreeRTOS课程(如下图红框),课程全面覆盖FreeRTOS基础与使用、任务创建方法、任务参数使用、任务的优先级、相对延时函数、队列、定时器等,通过理论讲解、案例分析和实验操作相结合的方式,帮助用户深入理解 FreeRTOS 的架构和应用。无论你是初学者还是有一定经验的开发者,都能从课程中获得有益的知识和技能,为自己的嵌入式学习奠定坚实的基础。

a27a4ffb545e4212bfbe222e4910a84e~tplv-obj.image?lk3s=ef143cfe&traceid=202505301331498801F88247CDF942646A&x-expires=2147483647&x-signature=ABq5Uddk7ThcO3XoIWHhKef%2F6kg%3D

这部分课程不单卖,可以直接购买嵌入式VIP/SVIP会员(按月/半年),就可以看上面红框内容的教学视频。当然如果您想学习更多嵌入式领域的知识点,比如GPIO控制器、串口控制器、LVGL、原理图与PCB设计等,或实战嵌入式体系课的综合项目,购买嵌入式会员都可以在会员有效期内观看。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6068

    文章

    45032

    浏览量

    652151
  • 嵌入式
    +关注

    关注

    5158

    文章

    19730

    浏览量

    318623
  • STM32
    +关注

    关注

    2295

    文章

    11034

    浏览量

    365929
  • FreeRTOS
    +关注

    关注

    13

    文章

    493

    浏览量

    64541
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【资料分享】FreeRTOS编程指南

    FreeRTOS使用指南繁星电子开发团队制作作为一个轻量级的操作系统,FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要
    发表于 03-21 15:15

    FreeRTOS实时内核使用指南_中文

    FreeRTOS实时内核使用指南_中文.pdf
    发表于 04-08 17:38

    FreeRTOS实时内核实用指南

    FreeRTOS实时内核实用指南
    发表于 09-18 08:02

    FreeRTOS实时内核使用指南_中文

    本帖最后由 lee_st 于 2018-2-3 14:18 编辑 FreeRTOS实时内核使用指南_中文
    发表于 02-03 14:17

    什么是FreeRTOS?怎样去移植FreeRTOS

    FreeRTOSFreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要也许在百度百科截取的这段解
    发表于 02-23 07:12

    Armv8-R架构中的虚拟化概念和可能性

    指南介绍了Armv8-R架构中的虚拟化概念和可能性。我们用四个例子来解释这些概念,其中大部分是基于汽车行业的应用程序。这些示例可以帮助您理解
    发表于 08-02 09:27

    FreeRTOS内核实现与应用开发实战指南

    本书是野火嵌入式教学丛书“RTOS 内核实现与应用开发实战指南的”FreeRTOS 版本,其中机械工业出版社出版的《RT-Thread 内核实现与应用开发实战
    发表于 09-28 08:05

    FreeRTOS实时内核使用指南-中文

    FreeRTOS实时内核使用指南-中文版,Using the FreeRTOS Real Time Kernel - A Practical Guide的中文版本
    发表于 07-13 15:11 ?126次下载

    FreeRTOS 使用指南

    FreeRTOS 使用指南
    发表于 10-24 13:37 ?25次下载
    <b class='flag-5'>FreeRTOS</b> 使用<b class='flag-5'>指南</b>

    FreeRTOS 内核实现与应用开发实战指南PDF电子书免费下载

    本书是野火嵌入式教学丛书“RTOS 内核实现与应用开发实战指南的”FreeRTOS 版本,其中机械工业出版社出版的《RT-Thread 内核实现与应用开发实战
    发表于 11-18 08:00 ?1861次下载
    <b class='flag-5'>FreeRTOS</b> <b class='flag-5'>内核</b>实现与应用开发实战<b class='flag-5'>指南</b>PDF电子书免费下载

    关于FreeRTOS内核的配置说明

    FreeRTOS内核是高度可定制的,使用配置文件FreeRTOSConfig.h进行定制。每个FreeRTOS应用都必须包含这个头文件,用户根据实际应用来裁剪定制FreeRTOS
    的头像 发表于 02-01 10:37 ?2983次阅读

    【RTOS的最通俗理解】行业大佬用一篇文章带你快速理解RTOS

    电子产品2.2 要深入理解RTOS就必须深入理解CPU架构3. 课程重点系统课程学习 5分钟拿下你的三连,RTOS的最
    发表于 12-20 19:08 ?17次下载
    【RTOS的最<b class='flag-5'>通俗</b><b class='flag-5'>理解</b>】行业大佬用一篇文章带你快速<b class='flag-5'>理解</b>RTOS

    FreeRTOS学习(1)——FreeRTOS移植

    FreeRTOSFreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要也许在百度百科截取的这段解
    发表于 12-29 19:47 ?12次下载
    <b class='flag-5'>FreeRTOS</b>学习(1)——<b class='flag-5'>FreeRTOS</b>移植

    FreeRTOS系列第6篇---FreeRTOS内核配置说明

    FreeRTOS内核是高度可定制的,使用配置文件FreeRTOSConfig.h进行定制。每个FreeRTOS应用都必须包含这个头文件,用户根据实际应用来裁剪...
    发表于 01-26 17:57 ?15次下载
    <b class='flag-5'>FreeRTOS</b>系列第6篇---<b class='flag-5'>FreeRTOS</b><b class='flag-5'>内核</b>配置说明

    FreeRTOS内核实现与应用开发实战指南

    本书是首本系统讲解 FreeRTOS 的中文书籍,共分为两个部分,第一部分为“从 0 到 1教你写 FreeRTOS 内核”,即重点讲解 FreeRTOS 的原理实现,从 0 开始,不
    发表于 05-24 16:26 ?283次下载