第一章 FreeRTOS简介

warren
2025-02-19 / 0 评论 / 2 阅读 / 正在检测是否收录...

1.1初识FreeRTOS

1.1.1 什么是FreeRTOS?

 FreeRTOS的名字由两部分构成,Free+RTOS。Free就是免费的意思,RTOS的全称是RealTimeOperatingSystem,中文名就是实时操作系统。RTOS 不是指某一个确定的系统, 而是指一类系统。 比如 UCOS, FreeRTOS, RTX, RT-Thread 等这些都是 RTOS 类操作系统。
 一般操作系统允许多个任务同时允许,但实际上一个处理器在同一时刻只能运行一个任务。所谓的多个任务同时运行是操作系统在各个任务之间进行切换,且该操作非常的快,就给人一种同一时刻有多个任务同时运行的错觉。在操作系统中决定某一个时刻运行哪个任务是由 任务调度器 来决定的。
 操作系统的分类方式可以由任务调度器的工作方式决定。比如Unix操作给每个任务分配了同样的运行时间,时间到了就轮到下一个任务。RTOS类的操作系统的任务调度器被设计为可预测的。原因是实时环境中要求操作系统必须对某一个事件做出实时的响应。 FreeRTOS 这种传统的 RTOS 类操作系统是由用户给每个任务分配一个任务优先级, 任务调度器就可以根据此优先级来决定下一刻应该运行哪个任务。

1.1.2 为什么选择 FreeRTOS?

  1. 免费
  2. 其他半导体厂商的SDK使用FreeRTOS
  3. 简单
  4. 文档齐全
  5. 在各种微处理器上都有使用
  6. 设备占有量较高

1.1.3 FreeRTOS 特点

  • FreeRTOS 的内核支持抢占式, 合作式和时间片调度
  • SafeRTOS 衍生自 FreeRTOS, SafeRTOS 在代码完整性上相比 FreeRTOS 更胜一筹
  • 提供了一个用于低功耗的 Tickless 模式
  • 系统的组件在创建时可以选择动态或者静态的 RAM, 比如任务、消息队列、信号量、软件定时器等等
  • 已经在超过 30 种架构的芯片上进行了移植
  • FreeRTOS-MPU 支持 Corex-M 系列中的 MPU 单元, 如 STM32F103
  • FreeRTOS 系统简单、小巧、易用, 通常情况下内核占用 4k-9k 字节的空间
  • 高可移植性,代码主要 C 语言编写
  • 支持实时任务和协程(co-routines 也有称为合作式、 协同程序, 本教程均成为协程)
  • 任务与任务、 任务与中断之间可以使用任务通知、消息队列、二值信号量、数值型信号量、 递归互斥信号量和互斥信号量进行通信和同步
  • 创新的事件组(或者事件标志)
  • 具有优先级继承特性的互斥信号量
  • 高效的软件定时器
  • 强大的跟踪执行功能
  • 堆栈溢出检测功能
  • 任务数量不限
  • 任务优先级不限

    1.2 磨刀不误砍柴工

    1.2.1 资料查找

     其实找资料没有这么复杂,官网是最好的地方, FreeRTOS的官网是 www.freertos.org

    1.2.2 FreeRTOS 官方文档

    FreeRTOS 有一个在线文档,可以直接在官网浏览文档链接

    1.2.3 Cortex-M 架构资料

     学习FreeRTOS 任务切换的时候需要我们了解 Cortex-M 内核架构相关的知识,否则的话根本看不懂任务切换的过程。参考《ARM Cortex-M3 与 Cortex-M4 权威指南(第三版)》,oseph Yiu 著,吴常玉、曹孟娟、王丽红译,清华大学出版社

    1.3 FreeRTOS 源码初探

    1.3.1 FreeRTOS 源码下载

     在官网的主页点击下载按钮即可下载最新版本的FreeRTOS源码
    m7bz3hqa.png
     下载完成后可以进行解压,在FreeRTOS-LTS\FreeRTOS\FreeRTOS-Kernel下查看FreeRTOS的源码。
     当前是2025-02-19 21:59:57 星期三。目前最新的源码版本为v202406.01-LTS。本人的学习资料为正点原子的STM32F1 FreeRTOS开发手册_V1.1。教材中使用的版本为FreeRTOSv9.0.0。所以后续的笔记还是使用9.0.0的源码。

    1.3.2 FreeRTOS 文件预览

    m7bzn56z.png

    1.3.2.1 FreeRTOS 文件夹

    打开 FreeRTOS 文件夹,里面有三个文件夹, Demo、 License 和 Source。

  • Demo 文件夹里面就是 FreeRTOS 的相关例程
  • License文件夹里面就是相关的许可信息
  • Source文件夹就是 FreeRTOS 的本尊了
    m7bzw7rl.png
    include 文件夹是一些头文件,下面的这些.C 文件就是 FreeRTOS 的源码文件了;重点来看一下 portable这个文件夹。portable 文件夹里面的东西就是 FreeRTOS系统和具体的硬件之间的连接桥梁! 不同的编译环境
    m7c0dh5q.png
    从上图中可以看出FreeRTOS 针对不同的编译环境和 MCU 都有不同的“桥梁”。MemMang 这个文件夹是跟内存管理相关的。这个在移植时候是必须的。再看Keil文件夹。里面提示查看RDVS文件夹。打开RVDS文件夹我们可以看到对于不同的MCU有着不同的分类。
    m7c0hjrk.png
    我们要往STM32F1的MCU上移植。它属于CM3架构。打开后我们可以看到一个port.c和portmacro.h文件。我们在移植的时候是必须的。

    1.3.2.2 FreeRTOS-Plus 文件夹

    打开FreeRTOS-Plus文件夹我们可以看到也是有三个文件夹,与FreeRTOS文件夹一样。我们再打开Source文件夹。
    m7c0lgxr.png
    可以看出, FreeRTOS-Plus 中的源码其实并不是 FreeRTOS 系统的源码, 而是在 FreeRTOS系统上另外增加的一些功能代码, 比如 CLI、 FAT、 Trace 等等。 就系统本身而言, 和 FreeRTOS里面的一模一样的

0

评论 (0)

取消