1-FreeRTOS入门指南

article/2025/8/27 4:36:07

本专栏是根据官方提供的文档进行FreeRTOS的各个功能函数的说明,以及函数的使用
本专栏不涉及动手操作,只是对原理进行说明,FreeRTOS基础知识篇更新完成会对如何在开发板上进行上手实战操作。

这里不会对比其他RTOS的优缺点,因为每个OS都有自己的优点和缺点,我认为他们的优点大多数都是一样的,缺点也有相同;仅有一些功能的优化上有所不同而已。这里说明,我们只是拿来用而已,因为大多数都是可以通用的,是不存在什么问题的,只有做一些高精度,高触发等,才会考虑一些情况。但我们做的大多数产品是没有必要考虑OS系统性能问题的。因为这些OS性能相差不大。同时我也不会分享或对比哪个RTOS是第一第二之类的,因为这没有任何意义。我个人认为不管是程序语言还是一些系统性的东西,只要是属于程序软件之类的,做任何对比都没有太大意义,除非硬件本身和软件本身有巨大突破我认为这才是有意义的。以上仅代表个人观点。

1-FreeRTOS简介

1.1 历史

FreeRTOS内核最初由Richard Barry在2003年左右开发,到现在有19年的历史,可以看出无论是维护还是系统升级能持续到现在都是非常优秀得了。
不过在2017年Barry这个公司把FreeRTOS项目的管理权交给了Amazon Web Services(AWS)。但是呢,人家还是作为其中的一员,继续工作。

1.2 实现

FreeRTOS 被设计为小巧而简单。它主要用C 编程语言编写,以便于移植和维护。它还包含一些需要的汇编语言函数,主要是在特定于体系结构的调度程序例程中。

1.3 进程管理

FreeRTOS 为多个线程或任务、互斥体、信号量和软件计时器提供了方法。为低功耗应用提供无时钟模式。支持线程优先级。FreeRTOS 应用程序可以静态分配,但对象也可以使用五种内存管理(分配)方案动态分配:

  • 仅分配;
  • 使用非常简单,快速的算法进行分配和免费;
  • 具有内存合并的更复杂但快速的分配和自由算法;
  • 更复杂的方案的替代方法,该方案包括内存合并,允许跨多个内存区域分解堆。
  • 和 C 库分配和释放,具有一些互斥保护。
    RTOS 通常不具有Linux和Microsoft Windows 等操作系统中更高级的功能,例如设备驱动程序、高级内存管理和用户帐户。重点是紧凑性和执行速度。FreeRTOS 可以被认为是一个线程库而不是一个操作系统,尽管命令行界面和类似 POSIX 的输入/输出 (I/O) 抽象是可用的。
    FreeRTOS 通过让主机程序以较短的时间间隔定期调用线程时钟周期方法来实现多个线程。线程时钟周期方法根据优先级和轮循机制调度方案切换任务。通常的间隔是通过硬件计时器的中断为 1 到 10 毫秒(1/1000到 1/100秒),但此间隔通常会更改以适应给定的应用程序。
    软件分发包含为每个端口和编译器准备的配置和演示,允许快速应用程序设计。项目网站提供文档和RTOS教程,以及RTOS设计的详细信息。

1.4 支持的架构和部分芯片

1.5 特点

  • FreeRTOS 具有无滴答模式,可直接支持低功耗应用。
  • FreeRTOS 设计简单易用:只需要 3 个所有 RTOS 端口通用的源文件和一个特定于微控制器的源文件,其 API 设计简单直观。
  • RL78 端口可以在 4K 字节的 RAM 下创建 13 个任务、2 个队列和 4 个软件定时器!
  • 为许多不同的体系结构和开发工具提供单一且独立的解决方案。
  • 具有最小的 ROM、RAM 和处理开销。通常,RTOS 内核二进制映像将在 6K 到 12K 字节的范围内。
  • 非常简单 - RTOS 内核的核心仅包含在 3 个 C 文件中。有大量的演示例程
  • 真正免费用于商业应用程序(有关详细信息,请参阅许可条件)。
  • 我们的合作伙伴WITTENSTEIN 高完整性系统以 OPENRTOS形式提供的商业许可、专业支持和移植服务。
  • 具有SafeRTOS 的迁移路径,其中包括医疗、汽车和工业领域的认证。
  • 拥有庞大且不断增长的用户群。
  • 包含每个端口的预配置示例。无需弄清楚如何设置项目 - 只需下载并编译!
  • 有一个优秀且活跃的论坛。
  • 文档资料丰富
  • 扩展性强,简单实用
  • 为ecos、Linux、ucLinux等提供了更简单的替代处理方案。

2-FreeRTOS下载

2.1 FreeRTOS源码下载

FreeRTOS的源码可以通过官网进行下载,也可以在GitHub上进行下载。当前最新版本已经更新到10.xx版本。当然也可以下载之前的旧版本。

2.2FreeRTOS文档获取

FreeRTOS文档可以在这个网站进行下载FreeRTOS 文档。同时我们在官网也可以看到,有对这些函数进行说明的一些网页。
图2:文本文档下载页面
图2
图3是官方文档说明网页
图3

2.3 FreeRTOS 目录结构

2.3.1 基本目录结构

我下载的是这个版本,最新版本演示例程没有,所以就下载了这个,如图4:
图4:

把压缩包解压出来,打开可以看到有两个个文件夹:分别是:

  • FreeRTOS-Plus : FreeRTOS+组件和演示例程
  • FreeRTOS : FreeRTOS实时内核源文件和演示例程

2.3.2 FreeRTOS 内核目录结构

FreeRTOS 内核源文件和演示项目包含在两个子目录中,如下所示

FreeRTOS|+-Demo      包含演示应用程序项目|+-Source    包含实时内核源代码。|+-Test      包含对通用代码和可移植层代码执行的测试,并包含自己的自述文件


RTOS代码包含在三个文件中,分别称为tasks.c,queue.c和list.c。这三个文件位于FreeRTOS/Source目录中。同一目录包含两个可选文件,分别称为timers.c和croutine.c,它们分别实现软件计时器和协程功能。如下图:

每个支持处理器体系结构都需要少量特定于体系结构的 RTOS 代码。这是 RTOS 可移植层,它位于FreeRTOS/Source/Portable/[compiler]/[architecture] 子目录中,其中[compiler] 和 [architecture]分别是用于创建端口的编译器和运行端口的架构。
就是下面这些,例如我要用STM32单片机进行移植,找到STM32对应的芯片,

示例堆分配方案也位于可移植层中。各种示例 heap_x.c 文件位于FreeRTOS/Source/portable/MemMang目录中。 FreeRTOS/Source目录的结构如下所示。

    FreeRTOS| +-- Source  FreeRTOS内核代码文件|   |+-- include          FreeRTOS内核代码头文件|   |+-- Portable         处理器特定代码|   |  |+--Compiler x     支持编译器x的所有移植包|   |  |+--Compiler y     支持编译器y的所有移植包|   |  |+--MemMang        内存堆实现范例

FreeRTOS 中还包含适用于每个处理器架构和编译器端口的演示应用程序。大多数演示应用程序代码对所有端口都是通用的,并且包含在FreeRTOS/Demo/Common/Minimal 目录中(位于FreeRTOS/Demo/Common/Full目录中的代码是遗留代码,仅由 PC 模拟使用)。
FreeRTOS/Demo目录结构:

    FreeRTOS|+-- Demo|  |+-- Common          所有例程都可以使用的演示例程文件|  |+-- Dir x           用于x平台的演示例程工程文件|  |+-- Dir y           用于y平台的演示例程工程文件

http://chatgpt.dhexx.cn/article/BxTmiZu4.shtml

相关文章

freeRTOS调度

freeRTOS调度策略 背景 嵌入式的设备开发通常有两种模式:裸机开发和OS开发。像功能较为强大的SOC通常都会先一直linux或其他OS然后进行业务逻辑的开发;而单片机则有很多简单的应用场景直接使用裸机开发的模式,稍微复杂些的场景,会…

FreeRTOS 解析

目录 Task Task State Task Priority Idle Task Run Time Statistics Task Scheduling Single-core 单核处理器 AMP 非对称多核处理器 SMP 对称多核处理器 Context Switch Inter-task Communication and Synchronization Queue 队列 Binary Semaphore 二值信号量 …

FreeRTOS队列

在实际的应用中,常常会遇到一个任务或者中断服务需要和另外一个任务进行“沟通交流”,这个“沟通交流”的过程其实就是消息传递的过程。在没有操作系统的时候两个应用程序进行消息传递一般使用全局变量的方式,但是如果在使用操作系统的应用中…

FreeRTOS任务状态

1. 任务状态介绍 FreeRTOS中的任务状态,可以简单的分为运行态(running)和非运行态(not running)。 但是对于非运行态我们还可以继续细分: 阻塞状态(Blocked)暂停(挂起…

FreeRTOS延时

1、相对延时函数 将当前任务添加到阻塞列表pxDelayedTaskList,任务进入阻塞态。 vTaskDelay → prvAddCurrentTaskToDelayedList → vListInsert( pxDelayedTaskList, &( pxCurrentTCB->xStateListItem ) )。任务的阻塞时间更新到状态列表项xStateListItem x…

FreeRTOS多任务管理

文章目录 1、任务1.1 任务简介1.2 任务调度1.3 任务的状态 (就绪态 / 运行态 / 阻塞态 / 挂起态)1.4 空闲任务 2、动态创建两个任务2.1 定义动态内存空间的堆2.2 定义任务函数2.3 定义 任务控制块 指针2.4 动态创建任务 xTaskCreate()2.5 启动任务 vTaskStartScheduler() 3、常…

FreeRTOS 移植

源码 FreeRTOS源码 选择 FreeRTOS 的最新版本 V9.0.0(2016 年)比较稳定 1)解压后的文件 提取的文件, FreeRTOS—>Source->portable目录下的MemMang,RVDS MemMang 存放内存相关的源文件,heap_1.c,heap_2.c,he…

初识FreeRTos

初识FreeRTos Preface一、FreeRTos简介二、 为什么选择FreeRTos三、FreeRTos资料和源码的下载四、介绍我自己的开发环境4.1FreeRTos4.2AlienTek Summary Preface 距离我上一次写博客已经差不多有5个月了,最近想给自己挖个新坑,讲一讲关于FreeRTos 相关的…

FreeRTOS移植

1. 前言 本文是基于FreeRTOSv9.0.0版本的实时系统,移植到STM32F103芯片平台上。移植环境使用的是MDK5.32版本,我在移植之前就已经构建好了一个裸机工程源码了,而且已经确保了这份裸机代码是没有问题的。开始移植之前我强烈建议一定要确认自己…

FreeRTOS快速入门-初探FreeRTOS

首发,公众号【一起学嵌入式】 对于 RTOS 入门系列文章,已经更新完一款(RT-Thread): 助你快速入门 RT-Thread 这个系列的文章结合 RT-Thread,介绍过 RTOS 相关的核心知识。 接下来,开始另外一…

FreeRTOS系列|FreeRTOS简介

1. RTOS简介 RTOS全称为 Real Time Operation System,即实时操作系统。RTOS强调的是实时性,又分为硬实时和软实时。硬实时要求在规定的时间内必须完成操作,不允许超时;而软实时里对处理过程超时的要求则没有很严格。RTOS的核心就…

freertos任务基础知识(freertos篇)

多任务 对于单任务系统就是常说裸机大while循环,有的时候也需要加一些中断服务函数完成一些处理,相比于多任务而言上面的单任务系统也叫做前后台系统,即(中断服务函数叫前台程序,大while叫后台程序) 前后台…

FreeRTOS学习,适用于FreeRTOS初学者,FreeRTOS整体知识框架

目录 一、为什么要学习FreeRTOS 二、前言------从0到1认识FreeRTOS 1、逻辑系统与多任务系统 1.1、裸机系统:裸机系统通常分成轮询系统和前后台系统 1.2、多任务系统 2、数据结构-列表与列表项 三、任务 3.1基本属性 3.1.1任务栈 3.1.2任务控制块 3.1.3任…

一、初识FreeRTOS之FreeRTOS简介

目录 一、什么是FreeRTOS? 二、为什么选择FreeRTOS? 三、FreeRTOS的特点 四、FreeRTOS资料与源码下载 五、FreeRTOS源码文件介绍 一、什么是FreeRTOS? Free即免费的,RTOS的全称是Real time operating system,中文就是实时操作…

Docker技术入门与实战-第3版.pdf OCR 高清 可复制

Docker技术入门与实战-第3版.pdf OCR 高清 可复制 Docker技术入门与实战-第3版.pdf OCR 高清 可复制简介预览下载地址 Docker技术入门与实战-第3版.pdf OCR 高清 可复制 简介 本书从Docker基本原理开始,深入浅出地讲解Docker的构建与操作,内容系统全面…

从docker到kubernetes(k8s)入门与实战--docker教程

安装docker 装个依赖 yum -y install gcc gcc-c 卸载旧版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine 安装依…

Docker 入门到实战教程(二)安装Docker

一.卸载旧版本 较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。 $ sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate…

Docker入门及进阶教程

阅读声明: 该教程笔记来源于dockers——菜鸟教程 一、Docker介绍 1. Docker教程 Docker是一个开源的容器引擎,基于Go语言并遵从Apache2.0协议开源。 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植的容器,然后发…

Docker 实战

目录 一、常用操作 1、镜像创建 2、镜像查询 3、镜像删除 4、镜像运行 5、查询容器进程 6、查询容器执行日志 7、删除容器 8、进入容器 二、导入和导出 1、save 和 load 2、export 和 import 3、区别 三、案例 1、检查是否安装依赖 2、安装依赖 3、docker打包镜…

Docker 实战教程之从入门到提高 (四)

本系列的前三篇文章,我们学习了如何在 Ubuntu 操作系统安装 Docker,并且通过实战练习,了解了 Docker 和宿主机操作系统文件目录互相隔离的实现原理,以及 Docker Volume 的工作原理。通过动手对 Nginx Docker 镜像进行修改&#xf…