初识FreeRTOS

2024/10/20 FreeRTOS
第1章 初识FreeRTOS

一、为何学习RTOS

  1. RTOS(Real Time Operation System 实时操作系统)
  2. 传统的单片机中,通常采用的是裸机编写。
    • 编写简单,容易掌控代码
  3. 对于复杂的,庞大的,多功能的项目,裸机编写就会非常困难,这时可以引入操作系统,实现项目多任务的执行。
  4. 常用的RTOS 有国外的FreeRTOS、μC/OS、RTX 和国内的 RT-Thread、Huawei 5. 引入RTOS对项目进行多任务的管理
  5. 作为嵌入式软件工程师,学习这个是必要的

二、如何学习RTOS

  1. 最简单的就是在别人移植好的系统之上,看看 RTOS 里面的 API 使用说明,然后调用这些 API 实现自己想要的功能即可。
  2. 如果是学习,只会简单的调用API,那是不可取的,我们应该深入的学习其中一款 RTOS。
  3. 这里有一个最有效也是最难的方法,就是阅读 RTOS 的源码,深究内核和每个组件的实现方式,这个过程枯燥且痛苦。

三、FreeRTOS特点介绍

FreeRTOS 是一个可裁剪的小型 RTOS 系统,其特点包括:

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

四、为何选择FreeRTOS

  1. FreeRTOS版权
    • 美国一个公司在2013年发布
    • 市场占有率最高
    • 2018年被亚马逊收购,改名AWSFreeRTOS
  2. FreeRTOS收费问题
    • FreeRTOS(收费)
    • OpenRTOS
    • SaveRTOS(做了一些安全性方面,收费)

alt text

五、获取FreeRTOS资料

  1. 官网 www.freertos.org获得。

pAaG0Lq.png

  1. 如果想下载以往版本的可从托管网址:https://sourceforge.net/projects/freertos/files/FreeRTOS

pAaG6FU.png

六、FreeRTOS编程风格

  1. 数据类型

pAaGRSJ.png

  • 在FreeRTOS中,int型是从来不使用的
  • short是16位的,long是32位的
  • 详细数据类型定义:在一个头文件:Portmacro.h中
    1. 变量名
  • 比如 char 型变量的前缀是 c,short型变量的前缀是s,long 型变量的前缀是l,portBASE_TYPE 类型变量的前缀是x。还有其他的数据类型,比如数据结构,任务句柄,队列句柄等定义的变量名的前缀也是 x。
  • 如果一个变量是无符号型的那么会有一个前缀 u,如果是一个指针变量则会有一个前缀 p。因此,当我们定义一个无符号的 char 型变量的时候会加一个 uc 前缀,当定义一个char型的指针变量的时候会有一个pc前缀。
  1. 函数名
    • 如果是私有的函数则会加一个prv(private)的前缀。
    • ①vTaskPrioritySet()函数的返回值为 void 型,在task.c 这个文件中定义。
    • ②xQueueReceive()函数的返回值为 portBASE_TYPE 型,在 queue.c 这个文件中定义。
    • ③vSemaphoreCreateBinary()函数的返回值为 void 型,在 semphr.h 这个文件中定义。
  2. 宏定义
    • 宏定义前缀:

pAaJKtU.png

  • 通用宏定义

pAaJMhF.png

文档信息

搜索

    Table of Contents