FreeRTOS介绍与源码结构分析

FreeRTOS简介

FreeRTOS,全称Free Real Time Operating System,即免费的实时操作系统。相比于计算机中用到的Windows,MacOS,Linux等操作系统,实时操作系统(RTOS)是一种轻量级的操作系统,适用于嵌入式硬件中,用于解决单片机类裸机轮询方式在处理多个任务时的实时性不高的问题。

目前的实时操作系统有好多种,除FreeRTOS外,还有μCOS、RT-Thread、RTX、Alios Things、Huawei LiteOS等。

什么是RTOS?

实时操作系统(RTOS)的主要特点是可以实现多任务,与多任务系统相对的是裸机系统。

裸机系统

裸机系统就是最初我们学习单片机编程时接触的那种编程方式,main函数中一个while大循环依次处理各个模块的任务,对于需要及时检测的事件会使用中断。这种使用大循环的程序运行方式也叫轮询系统,加上中断处理函数后又称前后台系统,中断处理称作前台,无限循环称作后台。

多任务系统

多任务系统是将各个处理模块编写为单独的任务,每个任务本身是个无限循环,程序运行初期会创建各个子任务,通过任务调度的方式,利用各任务的阻塞时刻不断切换运行各个任务,达到一种看起来是多个任务在同时运行的一种效果。并且,通过中断标志以及任务间通信的相关机制,可以实现任务之间的快速响应。

FreeRTOS特点

  • 使用免费!
  • 系统简单小巧、文件数量少、通常情况下内核占用4~9k字节空间
  • 抢占式内核
  • 代码主要由C编写,可移植性高,已实现在30多种架构的芯片上移植
  • 任务与任务,任务与中断间的通信方式包括:信号量、消息队列、事件标志组、任务通知
  • 具有优先级继承特性的互斥信号令,避免优先级反转问题
  • 高效的软件定时器

FreeRTOS源码目录结构

这里以FreeRTOS v9.0.0版本为例,代码包含FreeRTOS和FreeRTOS-Plus文件夹,后者是一些补充文件,初学者用不到,可以先忽略。在FreeRTOS文件夹中主要关注source文件夹,这里是FreeRTOS的全部源码,包括6个c文件和include文件夹下的多个h文件。另外,在portable文件夹下,是针对不同硬件平台的单独区分使用的代码,目前考虑使用Keil开发STM32F407,所以portable文件夹只需使用RVDS的ARM_CM4F以及MemMang。

关于各个c文件的主要用途:

  • port.c : 针对不同硬件平台的接口
  • heap_4.c : 内存管理相关
  • croutine.c : 协程相关
  • event_groups.c : 事件标志组相关
  • list.c : 列表,FreeRTOS的一种基础数据结构
  • queue.c : 队列相关
  • tasks.c : 任务创建、挂起、恢复、调度相关
  • timers.c : 软件定时器相关

另外在Demo文件夹下还需要用到一个FreeRTOSConfig.h,该文件中通过各种宏定义的方式来配置FreeRTOS需要使用哪些资源。
在这里插入图片描述
FreeRTOS v9.0.0源码链接:

https://pan.baidu.com/s/1WDygPLTDZJBAeNQ0uWaJsQ 提取码:ky2e