1-FreeRTOS入门指南

news2024/12/24 8:10:34

本专栏是根据官方提供的文档进行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://www.coloradmin.cn/o/43483.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2、Redis中简单动态字符串的简介,也就是Redis中的键和值的字符串底层表达

简介 首先在Redis中,没有直接使用C语言传统字符串表示(以空字符结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型(可以简单的理解为Java中的String 类),并且将SDS用作Redis的默…

动态规划算法(1)

认识动态规划 动态规划的求解思路: 1. 把一个问题分解成若干个子问题 2. 将中间结果保存以避免重复计算 基本步骤: 1. 找出最优解的性质,然后刻画结构特征 (找规律) 2. 最优解(最好的解决方案 定义) 循环(递归) 3. 以…

我与梅西粉丝们的世界杯观球日常

世界杯 ⚽️ 期间,我与其他的梅西粉丝在某 APP 里建了个梅粉聊天群,群内人数上万人,大家一起讨论赛事热点,可谓热火朝天,此起彼伏,这是四年一度的狂欢,虽值冬季,但热情不减。 “阿根…

配置设备远程管理—eNSP

案例:给路由器配置远程管理,使一台路由器远程管理另一台。 所需设备:两台路由器,一根网线 图示 一、给两台设备配置IP地址 AR1(以下命令) a. sy b. int g0/0/0 c. ip add 1.1.1.1 24AR2 a. sy b. int g0/0…

十分钟学完简单工厂,普通工厂,抽象工厂

快速学习简单工厂,普通工厂,抽象工厂前言:产品等级和产品族工厂模式作用简单工厂模式uml代码优缺点普通工厂模式uml代码优缺点抽象工厂模式uml代码优缺点前言:产品等级和产品族 在学习工厂模式之前,先得了解一下产品等…

Redis实践

一、持久化 Redis 的数据 全部存储 在 内存 中,如果 突然宕机,数据就会全部丢失,因此必须有一套机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的 持久化机制,它会将内存中的数据库状态 保存到磁盘 …

Spring——AOP原理及流程详解

AOP原理及流程详解一、AOP结构介绍Pointcut通知原理连接点拦截器二、Bean介入点EnableAspectJAutoProxyAspectJAutoProxyRegistrarAnnotationAwareAspectJAutoProxyCreatorAbstractAutoProxyCreator实例前执行初始化后执行循环依赖会调用总结三、处理切面获取所有切面其下通知方…

国内饮料行业数据浅析

大家好,这里是小安说网控。 饮料一直深得年轻人的宠爱,主要消费品类为饮用水、碳酸饮料、奶制品、气泡水等。刚刚过去的十月份,我国饮料产量当期值1199.6万吨,同比下降6.1%;今年1-10月份,饮料产量累计值157…

这几个点让我买了Watch Ultra

01.凑够Apple 全家桶 MacBook ProiPhoneAirPodsiPad 02.可以解锁iPhone手机,MacBook,iPad 03.当iPhone 来电话,不方便接听,可以使用Watch接听(虽然这种情况挺少) 04.可以连接AirPods 听音乐 05.花10元钱开卡,iPhone和Watch 可以…

前端ES6-ES11新特性

ES6新特性 变量声明 let a; let b,c,d; let e 100; let f 521, g iloveyou, h [];块级作用域 {let girl 周扬青; }console.log(girl); //这里会报错,变量不在作用域内,用var声明就可以常量声明 const NAME tom; //必须赋予初始值,变量名大写&am…

3-7数据链路层-设备

文章目录一.网桥1.基本原理2.透明网桥(1)工作原理(2)自学习算法3.源路由网桥二.局域网交换机1.局域网交换机2.原理3.特点4.两种交换模式5.交换机的自学习算法一.网桥 网桥根据MAC帧的目的地址对帧进行转发和过滤。当网桥收到一个…

Java中数组、集合初始化及遍历方式

一、数组 1. 一维数组 一维数组两种初始化方式 静态初始化 int[] array {1,2,3};int[] array new int[]{1,2,3};动态初始化 int[] array new int[3]; array[0]1; array[1]2; array[2]3;一维数组两种遍历方式 普通for循环for (int i 0; i < array.length; i) {System.ou…

全家桶Spring、HikariCP、Mybatis和Oracle配置,你想要的都在这里

目录1、HikariCP配置说明2、spring配置文件里&#xff0c;配置HikariCP数据库连接池3、注意连接池大小设置&#xff0c;重点推荐官方说明文档4、HikariCP配置5、数据库配置文件1、HikariCP配置说明 HikariCP: https://github.com/brettwooldridge/HikariCP 2、spring配置文件…

毕业设计-机器学习人眼检测活体检测-opencv

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

视效剧情口碑双爆棚!Netflix 现象级剧集《怪奇物语》第四季神级视效专访大揭秘!

刷新 Netflix 收视记录的超火剧集《怪奇物语》&#xff08;Stranger Things&#xff09;第四季视效剧情口碑双爆棚&#xff0c;无疑是2022年最值得一看的现象级剧集之一。第四季共九集&#xff0c;分上下两部&#xff0c;分别在今年5月和7月上线&#xff0c;目前豆瓣评分已经稳…

分享知识付费系统变现的方式_知识付费系统开发步骤

一、知识付费赚钱的方式 首先给大家讲讲知识付费赚钱的两大方式&#xff0c;大家可以根据自己的情况来选择做哪种。 1、自己做知识付费赚钱 自己做知识付费需要自己有一套成熟的理念观点&#xff0c;能输出成优质的内容传授给他人。可以将自己的知识技能制作成音频、视频、图…

【Python】三、内置函数

文章目录实验目的一、abs()二、int() / float() / str() / pow()1、int()2、float()3、str()4、pow()三、len() / id() / type()1、len()2、id()3、type()四、编写程序&#xff0c;实现输入一个正的实数x&#xff0c;分别输出x的整数部分和小数部分。1.设计思路2.设计算法3.参考…

南芯科技在科创板提交注册:业绩增速迅猛,股东包括红杉、顺为等

近日&#xff0c;上海南芯半导体科技股份有限公司&#xff08;下称“南芯科技”&#xff09;在上海证券交易所科创板递交招股书&#xff08;注册稿&#xff09;。据贝多财经了解&#xff0c;南芯科技于2022年6月21日在科创板递交上市申请&#xff0c;11月18日获得上市委会议通过…

堆(堆排序和模拟堆)

如何手写一个堆 下标从1开始&#xff0c;如果从0开始的话&#xff0c;他的左儿子的下标就等于0*2 0&#xff0c;麻烦 手写堆可以实现的操作&#xff1a;1&#xff0c;插入一个数 2&#xff0c;求集合当中的最小值 3&#xff0c;删除最小值 4&#xff0c;删除任意一个元素…

基于樽海鞘群算法的线性规划求解matlab程序

基于樽海鞘群算法的线性规划求解matlab程序 1 樽海鞘群优化算法 1.1 生物启示 通过研究海底生物樽海鞘在觅食过程中群体呈链状向食物方向移动的行为活动&#xff0c;学者Mirjalili在2017年提出的一种新型启发式仿生算法—樽海鞘群智能优化算法&#xff08;Salp Swarm Algori…