STM32之FreeRTOS开发介绍(十九)

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文库下载,找到对应的例程目录。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》重印变更的彩插

禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》

【HarmonyOS NEXT】碰一碰开发分享

关键词:鸿蒙、碰一碰、systemShare、harmonyShare、Share Kit 华为分享新推出碰一碰分享,支持用户通过手机碰一碰发起跨端分享,可实现传输图片、共享wifi等。我们只需调用系统 api 传入所需参数拉起对应分享卡片模板即可,无需对 U…

I2S是什么通信协议?它如何传输音频数据?它和I2C是什么关系?

首先我们先明确一点,I2S和I2C没有什么关系,如果非要扯点共同点的话那就是它们都是由飞利浦制定的。 I2C我们用的比较多,我们用的大多数的传感器模块用的通信协议就是I2C,SPI,UART这些。 而I2S应用领域比较单一&#…

ubuntu20.04有亮度调节条但是调节时亮度不变

尝试了修改grub文件,没有作用,下载了brightness-controllor,问题解决了。 sudo add-apt-repository ppa:apandada1/brightness-controller sudo apt update sudo apt install brightness-controller 之后在应用软件中找到brightness-contro…

Windows FileZila Server共享电脑文件夹 映射21端口外网连接

我有这样一个使用场景,在外部网络环境下,通过手机便捷地读取存储在电脑上的视频文件。比如在外出旅行、出差,身边没有携带电脑,仅依靠手机设备,就能随时获取电脑里存储的各类视频,无论是学习资料视频、工作…

怎样使用树莓派自己搭建一套ADS-B信号接收系统

0 我们知道,ADS-B全称广播式自动相关监视系统,其实就是飞机发出的广播信号,用明码来对外发送自己的位置、高度、速度、航向等信息,是公开信息。连续接收到一架飞机发出的ADS-B信息后,可以通过其坐标点来描绘出飞机的航…

Qt 5.14.2 学习记录 —— 십칠 窗口和菜单

文章目录 1、Qt窗口2、菜单栏设置快捷键添加子菜单添加分割线和菜单图标 3、工具栏 QToolBar4、状态栏 QStatusBar5、浮动窗口 QDockWidget 1、Qt窗口 QWidget,即控件,是窗口的一部分。在界面中创建控件组成界面时,Qt自动生成了窗口&#xf…

Java Web开发高级——Spring Boot与Docker容器化部署

随着云计算和微服务架构的快速发展,容器化已成为现代应用部署的重要手段。Docker作为最受欢迎的容器化技术之一,使得开发者能够将应用及其所有依赖打包到一个可移植的容器中,简化了开发、测试、部署和运维的流程。本篇文章将通过以下内容讲解…

SSM宠物医院信息管理系统

🍅点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 宠…

【esp32小程序】小程序篇02——连接git

一、创建仓库 进入gitee官网,登录(如果没有gitee账号的就自行注册一下)。 点击号-->新建仓库 填写好必填信息,然后点击“创建” 二、微信开发者工具配置 在微信开发者工具打开我们的项目。按下面的步骤依次点击 三、验证 点…

回归人文主义,探寻情感本质:从文艺复兴到AI时代,我的情感探索之旅

回归人文主义,探寻情感本质:从文艺复兴到AI时代,我们的情感探索之旅 多年来,我们的团队一直关注人工智能,尤其是AI在音乐领域的应用研究。随着技术的不断演进,我们也不断反思:在“算法、代码、…

【2025 ODA teigha系列开发教程一】实现WPF ViewDirectX DWGDXF 模式图纸的预览查看,缩放

🎨 CAD图纸查看器 下载Teigha SDK 21.6 FOR C# 📖 项目介绍 嗨!欢迎来到CAD图纸查看器项目!这是一个基于WPF和Teigha SDK开发的专业CAD文件查看工具。无论你是工程师、设计师,还是其他需要查看CAD图纸的专业人士&a…

【LeetCode100】--- 寻找重复数

题目传送门 方法一:暴力解法(超时) 算法原理 双重循环,每次固定一个数,再遍历别的数。比较这两个数是否相等, 若相等则返回这个数。就是重复数。 复杂度分析 时间复杂度:O(N方&…

doris 2.1 Queries Acceleration-Hints 学习笔记

1 Hint Classification 1.1 Leading Hint:Specifies the join order according to the order provided in the leading hint. 1.2 Ordered Hint:A specific type of leading hint that specifies the join order as the original text sequence. 1.3 Distribute Hint:Speci…

【2024博客之星】我的年度技术总结:Netty渡劫指南--从线程暴走到百万长连接,这一年我踩过的坑比写的代码还多

时间过得真快,作为一名十年的技术老鸟,这一年来跟Netty打交道打得不少。今天就聊聊这一年来我跟Netty的那些事儿,还有我在学习它技术原理时的一些总结。 导读 Netty再相见:捡起来、用起来Netty原理学习:边啃边写变总结…

Tomcat下载配置

目录 Win下载安装 Mac下载安装配置 Win 下载 直接从官网下载https://tomcat.apache.org/download-10.cgi 在圈住的位置点击下载自己想要的版本 根据自己电脑下载64位或32位zip版本 安装 Tomcat是绿色版,直接解压到自己想放的位置即可 Mac 下载 官网 https://tomcat.ap…

【CSDN博客之星2024】主题创作《总结2024,为了遇见更好的2025》

【博客之星2024】主题创作《总结2024,为了更好的2025》 一、AI技术变革日新月异二、总结我的CSDN2024三、技术深耕,从实践中汲取力量3.1、在数据库技术方面3.2、在javavue前后端开发领域3.3、在项目运维领域3.4、在GIS开发方面 四、2025工作计划五、2025…

MySQL 事务及MVCC机制详解

目录 什么是事务 事务的隔离级别 数据库并发的三种场景 读-写 什么是事务 事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们…

数据库存储上下标符号,sqlserver 2008r2,dm8

sqlserver 2008r2: 数据类型需要用nvarchar插入数据时字符串前需要用N create table test( col1 varchar(50), col2 nvarchar(50) ) insert into test(col1,col2) values(U⁴⁵⁶⁷⁸⁹⁰D₁₂₃₄₅₆₇₈₉₀,U⁴⁵⁶⁷⁸⁹⁰D₁₂₃₄₅₆₇₈₉₀) insert into…

Java高频面试之SE-15

hello啊,各位观众姥爷们!!!本牛马baby今天又来了!哈哈哈哈哈嗝🐶 String 怎么转成 Integer 的?它的原理是? 在 Java 中,要将 String 转换为 Integer 类型,可…