STM32之FreeRTOS开发介绍(十九)

news2025/1/21 6:51:58

STM32F407 系列文章 - freertos(十九)


目录

前言

一、简述

二、开源网址

三、原理及功能特性

1.原理

2.功能

3.特点

4.优缺点

四、参考书籍

五、实现方式

总结


前言

FreeRTOS是一个免费的、开源的实时操作系统,专为微控制器和嵌入式系统设计,它以其轻量级、高效、易于移植和强大的功能而闻名,成为许多嵌入式开发者的首选。FreeRTOS操作系统支持多种不同架构的不同型号的处理器,比如STM32系列的 F1、F4、F7 和H7等都可以移植 FreeRTOS,同时ST公司也在其STM32CubeMX生态系统中加入了对FreeRTOS操作系统的支持,这极大的方便了我们学习和使用FreeRTOS操作系统。


一、简述

Free Real-Time Operating System(免费的实时操作系统,简写FreeRTOS)是一个免费、开源的、可裁剪的、抢占式实时多任务内核,具有高度可移植性,适用于资源有限的微控制器等环境。FreeRTOS诞生于2003年,由Richard Barry发布初版,并由Real Time Engineers Ltd进行开发和维护。2017年,亚马逊(Amazon Web Services, AWS)收购了FreeRTOS,并推出了增强的版本Amazon FreeRTOS,集成了更多的联网和安全功能。FreeRTOS_百度百科 (baidu.com)

由于FreeRTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。相对μC/OS-II、embOS等商业操作系统,FreeRTOS操作系统是完全免费的操作系统,具有源码公开、可移植、可裁减、调度策略灵活的特点,可以方便地移植到各种单片机上运行。在嵌入式领域中,嵌入式实时操作系统正得到越来越广泛的应用。采用嵌入式实时操作系统(RTOS)可以更合理、更有效地利用CPU的资源,简化应用软件的设计,缩短系统开发时间,更好地保证系统的实时性和可靠性。

FreeRTOS广泛应用于工业自动化、智能家居、汽车电子、医疗设备和无人机等领域。例如,在智能家居系统中,FreeRTOS可以管理多个传感器和执行器(如温度传感器、光照传感器、智能插座等),实现家庭安全、节能和舒适度的提升。在无人机控制系统中,FreeRTOS通过多任务调度和实时性能保障,确保无人机能够稳定飞行并响应各种控制指令。

二、开源网址

FreeRTOS官方网址为FreeRTOS™网站,上面提供了大量的FreeRTOS操作系统的相关文档及例程源码,如下所示。

也可以在上面可以下载相应版本的FreeRTOS源码包,或者到github存储库上下载。

三、原理及功能特性

1.原理

任务调度机制是嵌入式实时操作系统的一个重要概念,也是其核心技术。FreeRTOS的内核可根据用户需要设置为可剥夺型内核或不可剥夺型内核。当FreeRTOS被设置为可剥夺型内核时,处于就绪态的高优先级任务能剥夺低优先级任务的CPU使用权,这样可保证系统满足实时性的要求;当FreeRTOS被设置为不可剥夺型内核时,处于就绪态的高优先级任务只有等当前运行任务主动释放CPU的使用权后才能获得运行,这样可提高CPU的运行效率。

FreeRTOS内核支持优先级调度算法,每个任务可根据重要程度的不同被赋予一定的优先级,CPU总是让处于就绪态的、优先级最高的任务先运行,优先级高的任务一旦就绪就能剥夺优先级较低任务的CPU使用权,提高了系统的实时响应能力。FreeRTOS内核同时支持轮换调度算法,系统允许不同的任务使用相同的优先级,在没有更高优先级任务就绪的情况下,同一优先级的任务共享CPU的使用时间。

当进行任务调度时,调度算法首先实现优先级调度。系统按照优先级从高到低的顺序从就绪任务链表数组中寻找第一个不为0的优先级,此优先级即为当前最高就绪优先级,据此实现优先级调度。若此优先级下只有一个就绪任务,则此就绪任务进入运行态;若此优先级下有多个就绪任务,则需采用轮换调度算法实现多任务轮流执行。

2.功能

作为一个轻量级的操作系统,其功能包括:任务调度、任务管理、中断处理、信号量、消息队列、内存管理、通信和同步机制、软件定时器、低功耗模式等,这些功能使得FreeRTOS能够高效地管理嵌入式系统中的多个任务,实现任务的并发执行和资源共享。

  1. 抢占式多任务调度:FreeRTOS支持抢占式多任务调度机制,允许高优先级的任务抢占低优先级的任务,从而保证了系统的实时性要求。这种调度机制使得系统能够在确定的时间内响应任务,非常适合对实时性要求较高的应用场景。
  2. 任务管理:FreeRTOS提供了强大的任务管理功能,包括任务的创建、删除、挂起、恢复等操作。这使得开发者能够方便地管理系统中的多个任务,实现任务的并发执行和资源共享。
  3. 中断处理:FreeRTOS提供了高效的中断处理机制,允许任务在中断服务例程中与内核进行交互。这有助于开发者更好地处理系统中的中断事件,提高系统的稳定性和响应速度。
  4. 消息队列:基于队列,FreeRTOS 实现了多种功能,其中包括队列集、互斥信号量、计数型信号量、二 值信号量、递归互斥信号量,因此很有必要深入了解FreeRTOS的队列。
  5. 内存管理:虽然FreeRTOS本身并不提供复杂的内存管理功能(如虚拟内存),但它提供了一些简单的内存分配和释放函数,方便开发者管理系统内存。
  6. 丰富的通信和同步机制:FreeRTOS提供了消息队列、信号量、互斥量、事件标志组等多种通信和同步机制,用于协调多个任务之间的运行,防止数据竞争和死锁等问题。
  7. 软件定时器:FreeRTOS提供了软件定时器机制,允许开发者创建定时任务,在指定时间间隔后执行特定操作。这对于需要周期性执行任务的应用非常有用。
  8. 低功耗模式:在一些特殊场景中,如长期无人照看的数据采集采集设备、可穿戴设备等,都对设备的 功耗有着很严格的要求,为了迎合这种特殊需求,大多数 MCU 也都有相应的低功耗模式,以此来降低设备的整体功耗。

3.特点

FreeRTOS具有如下特点。

  1. 用户可配置内核功能,使其具有可裁剪的轻量级内核,一般FreeRTOS的内核占用内存非常小,通常只有几KB到十几KB,这使得它能够在资源受限的微控制器上运行,成为小型嵌入式系统的理想选择。
  2.  免费开源的源代码,采用C语言编写,遵循MISRA-C标准的编程规范,生成目标代码较小,支持多个平台简单易用,提供一个高层次的信任代码的完整性;
  3. 不限制的任务数量,可根据需求设置任务优先级,在多个任务时可以分配相同的优先权,

  4. 强大的执行跟踪功能,堆栈溢出可检测。

4.优缺点

优点:

  1. 开源:FreeRTOS是开源的,可以免费使用并根据开源许可证进行修改;

  2. 小巧:FreeRTOS的核心代码非常小巧,方便嵌入到微控制器中;

  3. 实时性:FreeRTOS被设计为提供确定的实时响应;

  4. 可移植性:FreeRTOS支持多种硬件架构,包括ARM,NIOS,Microblaze等;

  5. 支持软件组件:FreeRTOS提供了诸如队列、信号量、互斥锁等多种软件组件,简化了开发过程;

  6. 社区支持:FreeRTOS有一个活跃的社区,可以获得技术支持和查找资源。

缺点:

  1. 文档和支持:相比商业操作系统,FreeRTOS的文档和支持可能不够丰富;

  2. 商业支持:虽然FreeRTOS本身是开源的,但是商业支持可能需要购买提供商的额外服务;

  3. 学习曲线:FreeRTOS的学习曲线相对较陡峭,需要开发者理解任务调度、任务同步等实时系统概念;

  4. 更新和维护:FreeRTOS的更新和维护需要开发者自己处理,可能需要定期更新或修复漏洞。

四、参考书籍

FreeRTOS更为详细功能特性参考原子的《FreeRTOS开发指南_V1.10.pdf》,在文末链接处可以下载阅读,该手册会有如下介绍,参考目录。

或者参考freertos给出的Usage Guide《FreeRTOS实时内核使用指南_中文版.pdf》,在文末链接处可以下载阅读,该手册会有如下介绍,参考目录。

五、实现方式

STM32工程实现FreeRTOS操作系统的应用,跟前面几篇讲的lwip实现的方式一样,既可以通过官网上下载移植FreeRTOS到STM32工程项目中,也可以可视化工具STM32CubeMX完成对FreeRTOS操作系统的配置,然后一键化生成工程代码。这两种方式均可以实现,但各有优缺点,通过移植的方式实现,有一定的困难,需要对FreeRTOS的熟练度有一定的要求,如果对FreeRTOS不是足够了解,博主推荐采用STM32CubeMX实现,同时这钟方式也是博主比较推荐的,比较简便快捷。


总结

FreeRTOS涉及到的功能知识点比较多,更多详细的使用参考下方文档链接单片机STM32F407-Case程序代码例程-CSDN文库下载,找到对应的例程目录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2279694.html

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

相关文章

第十三章:数据库技术

文章目录: 一:基础 1.概念 2.特点 3.常见数据库品牌 4.数据库应⽤系统 4.1 C/S 4.2 B/S 5.数据模型的分类 6.名词解析 7.关系运算 二:Access 1.基础 2.操作 2.1 建立表 2.2 维护表 2.3 创建查询 2.4 创建窗体 2.5 创建报表…

stm32 no connect target

解决 STM32 报错 “no target connected” 的方法 前言 stm32最小系统在下载程序是一直报错:no target connected,试了很多办法成功不了,最后将芯片擦除了才成功。 一、问题描述 当时是写flash的时候写到ST Link 存储的地方了。 之后就不…

综述:大语言模型在机器人导航中的最新进展!

简介 机器人导航是指机器人能够在环境中自主移动和定位的能力。本文系统地回顾了基于大语言模型(LLMs)的机器人导航研究,将其分为感知、规划、控制、交互和协调等方面。具体来说,机器人导航通常被视为一个几何映射和规划问题&…

OpenHarmony-7.IDL工具

IDL 工具 1.openharmony IDL工具 在OpenHarmony中,当应用/系统服务的客户端和服务端进行IPC(Inter-Process Communication)跨线程通信时,需要定义双方都认可的接口,以保障双方可以成功通信,OpenHarmony ID…

Docker私有仓库管理工具Registry

Docker私有仓库管理工具Registry 1 介绍 Registry是私有Docker仓库管理工具,Registry没有可视化管理页面和完备的管理策略。可借助Harbor、docker-registry-browser完成可视化和管理。Harbor是由VMware开发的企业级Docker registry服务。docker-registry-browser是…

人工智能之数学基础:线性代数中的线性相关和线性无关

本文重点 在线性代数的广阔领域中,线性相关与线性无关是两个核心概念,它们对于理解向量空间、矩阵运算、线性方程组以及人工智能等问题具有至关重要的作用。 定义与直观理解 当存在一组不全为0的数x1,x2,...,xn使得上式成立的时候,那么此时我们可以说向量组a1,a2...,an…

【Django】多个APP设置独立的URL

目录 方法一:各个App下设置自己的URL 1、在各自的App当中创建urls.py文件​编辑 2、在主urls当中包含子url 3、各App的urls中设置url 4、设置后台函数 5、最终结果 总结: 方法二:利用as方法,在总的URL中对views重命名 实…

函数递归的介绍

1.递归的定义 在C语言中,递归就是函数自己调用自己 上面的代码就是 main 函数在函数主体内 自己调用自己 但是,上面的代码存在问题:main 函数反复地 自己调用自己 ,不受限制,停不下来。 最终形成死递归,…

四、华为交换机 STP

生成树协议(STP)的核心目的是在存在冗余链路的网络中,构建一个无环的拓扑结构,从而防止网络环路带来的广播风暴等问题 一、STP 原理 选举根桥:网络中的每台交换机都会有一个唯一的桥 ID(BID)&am…

前端炫酷动画--图片(一)

目录 一、四角线框的跟随移动 二、元素倒影(-webkit-box-reflect) 三、模特换装(maskblend) 四、元素平滑上升 五、无限视差滚动 六、判断鼠标进入方向(轮播方向) 七、环形旋转效果 八、黑白小球交替旋转 九、hover时圆形放大 十、画一棵随机树(canvas) 十一、代码雨…

AI刷题-病毒在封闭空间中的传播时间

目录 问题描述 输入格式 输出格式 解题思路: 问题理解 数据结构选择 算法步骤 代码实现: 1.初始化: 2.设置边界条件: 3.判断 4.更新: 5.返回 最终的实现代码如下: 运行结果: …

SQL表间关联查询详解

简介 本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(left join)、右连接(right join)、全连接(full join)、内连接(inner join)、交叉连接&…

路由器旁挂三层网络实现SDWAN互联(爱快SD-WAN)

近期因公司新办公区建设,原有的爱快路由器的SDWAN功能实现分支之间互联的服务还需要继续使用。在原有的小型网络中,使用的爱快路由器当作网关设备,所以使用较为简单,如下图所示。 现变更网络拓扑为三层网络架构,但原有的SDWAN分支…

麦田物语学习笔记:制作[SceneName]Attribute特性

基本流程 因为在现有的项目中,像开始场景的切换或者Telepot组件都需要手动输入场景名,有时还可能键入出错,而该特性能用选择的方式去解决这一问题 1.代码实现 SceneNameDrawer.cs //参数绘制 using UnityEditor; using UnityEngine; #if UNITY_EDITOR [CustomPropertyDrawer(…

HTML之拜年/跨年APP(改进版)

目录: 一:目录 二:效果 三:页面分析/开发逻辑 1.页面详细分析: 2.开发逻辑: 四:完整代码(不多废话) index.html部分 app.json部分 二:效果 三:页面…

【2024 年度总结】从小白慢慢成长

【2024 年度总结】从小白慢慢成长 1. 加入 CSDN 的契机2. 学习过程2.1 万事开头难2.2 下定决心开始学习2.3 融入技术圈2.4 完成万粉的目标 3. 经验分享3.1 工具的选择3.2 如何提升文章质量3.3 学会善用 AI 工具 4. 保持初心,继续前行 1. 加入 CSDN 的契机 首次接触…

一文大白话讲清楚webpack基本使用——2——css相关loader的配置和使用

一文大白话讲清楚webpack基本使用——2——css相关loader的配置和使用 1. 建议按文章顺序从头看是看 第一篇:一文大白话讲清楚啥是个webpack第二篇:一文大白话讲清楚webpack基本使用——1——完成webpack的初步构建然后看本篇,Loader的配置…

如何将 session 共享存储到 redis 中

文章目录 一. 分布式 session 登录1.1 什么是分布式?1.2 Session 共享1.3 为什么服务器 A 登录后,请求发到服务器 B,不认识该用户?1.4 共享存储 二. Session 共享实现Redis三. 测试session共享四. cookie设置4.1 前端4.2 后端 一.…

Debezium日常分享系列之:对于从Oracle数据库进行快照的性能优化

Debezium日常分享系列之:对于从Oracle数据库进行快照的性能优化 源数据库Kafka Connect监控测试结果 源数据库 Oracle 19c,本地,CDB数据库主机的I/O带宽为6 GB/s,由此主机上运行的所有数据库共享临时表空间由42个文件组成&#x…

STM32 FreeROTS Tickless低功耗模式

低功耗模式简介 FreeRTOS 的 Tickless 模式是一种特殊的运行模式,用于最小化系统的时钟中断频率,以降低功耗。在 Tickless 模式下,系统只在有需要时才会启动时钟中断,而在无任务要运行时则完全进入休眠状态,从而降低功…