FreeRTOS移植以及核心功能

news2024/11/17 7:19:41

文章目录

  • freertos和ucos区别,优缺点比较
  • 移植步骤
  • 核心功能
    • 内存管理(5种内存管理策略)
    • FreeRTOS任务调度算法有三种
    • 时间管理
    • 通信管理
  • 栈管理

freertos和ucos区别,优缺点比较

FreeRTOS(Free Real-Time Operating System)和 uC/OS(Micro-controller Operating System)都是常见的实时操作系统(RTOS),用于嵌入式系统开发。它们有以下区别和特点:

FreeRTOS:

  • FreeRTOS 是由 Richard Barry 创建的免费开源的实时操作系统。
  • FreeRTOS 非常轻量级,使用较少的内存资源,适用于资源有限的嵌入式系统。
  • 提供了任务管理、调度、时间管理、同步和通信等常见的操作系统功能。
  • FreeRTOS 的核心是一个协程调度器,支持协作式多任务处理。
  • 支持多种处理器架构,包括 ARM、MIPS、X86 等。

uC/OS:

  • uC/OS 是由 Jean J. Labrosse 创建的商业实时操作系统,也有免费的开源版本(uC/OS-II)。
  • uC/OS 具有丰富的功能,提供了任务管理、调度、同步、通信、内存管理等操作系统服务。
  • 对于实时性要求较高的应用,uC/OS 提供了可选的抢占式调度方式。
  • 支持多种处理器架构,包括 ARM、MIPS、ColdFire 等。
  • uC/OS-III 是 uC/OS 的最新版本,相比于旧版本,具有更强大的功能和改进的性能。

两者的优缺点比较如下:

FreeRTOS 优点:

  • 轻量级、简单易用,适合资源受限的系统。
  • 开源免费,可根据需求修改和定制。
  • 社区活跃,有大量的文档、示例和支持资源。

FreeRTOS 缺点:

  • 功能相对较少,相比于某些商业 RTOS,可能缺乏一些高级特性和工具支持。
  • 部分功能需要额外的模块或者移植。

uC/OS 优点:

  • 提供丰富的功能,满足大部分实时系统的需求。
  • 具有商业版和开源版可供选择。
  • 支持抢占式调度,适合对实时性要求高的应用。

uC/OS 缺点:

  • 商业版需要购买授权,并且较为昂贵。
  • 文档和社区资源相对较少。

在选择 FreeRTOS 还是 uC/OS 时,应根据具体需求、项目要求、开发团队经验和资源等进行综合考虑。如果项目对资源和成本有限制,或需要轻量级的操作系统,那么选择 FreeRTOS 可能更合适。如果项目对实时性要求较高,或需要丰富的功能和工具支持,而且有购买授权的预算,那么 uC/OS 可能更适合。

移植步骤

在将FreeRTOS移植到STM32上之前,您需要进行以下配置:

  1. 配置硬件:确保您的STM32芯片与所选择的FreeRTOS版本兼容,并且具备足够的内存资源(ram资源)。您可以参考芯片的数据手册和FreeRTOS的系统要求来确认这些信息。

  2. 引入FreeRTOS源代码:将FreeRTOS源代码添加到您的项目中。您可以从FreeRTOS官方网站下载最新的稳定版本或者适用于STM32的移植版。

  3. 配置FreeRTOSConfig.h文件:这个文件包含了FreeRTOS的核心配置参数。您需要根据STM32的硬件特性和应用需求进行相应配置。以下是一些可能需要配置的参数:

    • 定时器配置:根据STM32的定时器资源,配置用于FreeRTOS的系统节拍定时器
    • 内存管理器配置:根据可用的RAM大小和需要的内存管理策略,配置内存管理器选项
    • 任务优先级配置:定义任务优先级的范围和默认优先级
    • 栈配置:为每个任务定义适当大小的栈空间
    • 优化配置:根据应用需求进行合适的编译优化设置。
  4. 创建任务:在main.c(或其他文件)中创建需要运行的任务,通过调用FreeRTOS提供的API函数进行任务的创建、启动和管理。

  5. 配置中断:根据您的应用需求,配置适当的中断处理程序,并使用FreeRTOS提供的接口函数来在中断中进行任务切换。

  6. 配置时钟和系统节拍:根据STM32的时钟设置和FreeRTOS的节拍定时器配置,确保系统节拍的准确性和稳定性。

  7. 编译和烧录:将修改后的代码编译为可执行文件,并将其烧录到STM32芯片中进行测试和调试。

请注意,以上步骤仅提供了一个大致的概述,实际移植过程可能会因STM32型号、FreeRTOS版本和应用需求而有所差异。建议您参考针对您具体芯片和FreeRTOS版本的移植指南或示例代码,以获得更详细和准确的配置信息和步骤。

核心功能

在这里插入图片描述

内存管理(5种内存管理策略)

内存管理博文

在这里插入图片描述

我移植的是内存管理4

Heap_1(只建不删)

  • 适用场景:创建的任务、队列、信号量等不需要删除。它只实现了 pvPortMalloc,没有实现 vPortFree。如果你的程序不需要删除内核对象,那么可以使用 heap_1:

Heap_2(Heap1_Pro、提供删除,产生碎片)

  • 适用场景:频繁的创建和删除任务,且所创建的任务堆栈都相同,此时不会出现碎片化的问题。Heap_2 之所以还保留,只是为了兼容以前的代码。新设计中不再推荐使用 Heap_2。建议使用 Heap_4 来替代 Heap_2,更加高效。

Heap_3(传统malloc - free)

  • Heap_3 使用标准 C 库里的 malloc、 free 函数,所以堆大小由链接器的配置决定,配置项 configTOTAL_HEAP_SIZE 不再起作用。直接用C库的 malloc - free

Heap_4(Heap2_Pro,解决碎片)

  • 跟 Heap_1、 Heap_2 一样, Heap_4 也是使用大数组来分配内存。
  • Heap_4 使用首次适应算法(first fit)来分配内存。它还会把相邻的空闲内存合并为一个更大的空闲内存,这有助于较少内存的碎片问题。(heap2的升级版)

Heap_5(Heap4_Pro,可管理分隔内存)

  • Heap_5 分配内存、释放内存的算法跟 Heap_4 是一样的。相比于 Heap_4, Heap_5 并不局限于管理一个大数组:它可以管理多块、分隔开的内存。

优缺点总结:
在这里插入图片描述

FreeRTOS任务调度算法有三种

  • 第一种是基于优先级的抢占式任务调度算法,
  • 第二种是基于优先级的时间片轮转调度算法,
  • 第三种是合作式调度算法。【默认情况为:使用时间片抢占式任务调度】不再使用了

优先级的时间片轮转调度算法是多级反馈队列调度算法的一种变体,它具有以下特点:

  1. 多级优先级:该调度算法将进程划分为多个不同的优先级队列。每个队列具有不同的优先级,通常按照优先级从高到低排序。不同的进程可以被分配到不同的队列中,根据进程的优先级确定所在队列。

  2. 时间片轮转:每个队列都采用时间片轮转的调度策略。每个进程在当前队列中运行一个固定大小的时间片,当时间片用完后,进程被放入队列尾部,并等待下一次调度。

  3. 优先级提升:为了避免低优先级进程饥饿问题,该算法引入了优先级提升机制。当一个进程在低优先级队列中等待一段时间后,其优先级会被提升到更高的队列中,以增加其获得CPU时间片的机会。

  4. 公平性和响应性:该算法旨在实现公平性和响应性的平衡。高优先级的进程会更频繁地获得CPU时间,以保证响应及时;而低优先级的进程也会有机会获得一定的CPU执行时间,以保证公平性

  5. 动态调整:根据系统负载和进程优先级的变化,该算法具有动态调整的能力。可以根据实时情况增加或减少队列的数量、调整各个队列的时间片大小,以更好地适应不同的工作负载。

通过以上特点,优先级的时间片轮转调度算法可以在满足高优先级进程响应需求的同时,确保低优先级进程也能得到一定的执行时间,从而在多任务环境中实现较好的公平性和响应性

时间管理

这里需要程序员去配置时钟和系统节拍:根据STM32的时钟设置和FreeRTOS的节拍定时器配置,确保系统节拍的准确性和稳定性。

通信管理

消息队列

  • 队列(queue)可以用于"任务到任务"、“任务到中断”、"中断到任务"直接传输信息,可以实现任务之间的通信

  • 消息队列就是一个像容器一样的东西,我们所有的任务都可以往内部写消息,然后队列会将我们的消息按顺序存下来,所有的任务也可以按顺序将其读出来

  • 队列需要明确数据的大小以及队列的长度

信号量

  • 队列(queue)可以用于传输数据:在任务之间、任务和中断之间,消息队列用于传输多个数据,占用时间按也相对较长,但是有时候我们只需要传递状态,这个状态值需要用一个数值表示,一般是用作同步的效果

  • 信号量这个名字,我们可以把它拆分来看,信号可以起到通知信号的作用,然后我们的量还可以用来表示资源的数量,当我们的量只有0和1的时候,它就可以被称作二值的信号量,只有两个状态,当我们的那个量没有限制的时候,它就可以被称作为计数型信号量。

  • 信号量也是队列的一种【因为队列创建的时候,需要传入队列的长度以及队列的大小,而我们的信号量其实就是一种特殊的队列,只不过它的大小是0,毕竟我们的信号量是不需要传递数据,只需要传递信号,然后长度是N,当N=1的时候就是二值信号量,他就只有0和1两个状态,这里的0和1两个状态是指被填入和被拿走这两个状态,当N>1时,就是我们的计数信号量,他也不传递数据,只是传递一个数量值,一般是记录我们设备的资源数量】

互斥量

  • 在项目开发中,可能会有多个任务,共用一个资源的情况,为了避免其发生冲突,二值信号量可以一定程度上避免这种事情,但是它多数还是用于同步的状况,如果任务之间出现优先级的差异,就会出现优先级反转的问题

事件组

  • 场景:一个任务,他执行之前需要经过多个条件进行判断,当这多个条件全部满足或者多个条件中的某一个条件满足他才会执行。使用事件组的优点就是不用多个信号量(标志位)去判断,创建太多的全局变量,而只需要一个事件组即可

任务通知

  • 任务通知是我们整个FreeRTOS当中的最后一个通信工具,然后他是FreeRTOS第8个大版本的时候才更新出来的产物,然后我们目前是第10个版本了,相对来说还是一个比较新的概念,并且它的功能是比较强大的,它可以一定程度上的代替二值信号量,计数信号量,队列,还有我们的事件组,并且最重要的是他是我们任务中自带的一个属性,不需要我们单独去创建对应的结构体,所以他的执行效率也快很多

栈管理

https://blog.csdn.net/ba_wang_mao/article/details/127245356

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

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

相关文章

jdk20 download 配置(linux window mac)

download 直达链接 jdk20,17 wget https://download.oracle.com/java/20/latest/jdk-20_linux-x64_bin.deb # 类似格式替换包的名称就可以实现终端下载jdk下载登录/oracle账号 下载jdk有可能存在要求登录帐号的情况 # 好心人的帐号 账号: 59968873qq.com 密码&…

数据库基本概念与安装MySQL数据库

MySQL数据库基本操作与简单管理 1、数据库的基本概述1.1数据库背景1.2数据库组成1.3数据库发展1.4数据库组成1.5数据库的数据流向1.6数据库功能1.7DBMS的工作模式 2、关系性数据库和非关系性数据库2.1关系型数据库2.2非关系型数据库2.3关系型数据库和非关系型数据库的区别 3、编…

“Vue进阶:深入理解插值、指令、过滤器、计算属性和监听器“

目录 引言:Vue的插值Vue的指令Vue的过滤器Vue的计算属性和监听器vue购物车案例总结: 引言: Vue.js是一款流行的JavaScript框架,它提供了许多强大的功能来简化前端开发。在本篇博客中,我们将深入探讨Vue的一些高级特性…

【计算机基础知识】计算机的概念

欢迎来到我的:世界 希望作者的文章对你有所帮助,有不足的地方还请指正,大家一起学习交流 ! 目录 前言1.计算机的概念计算机的发展历程知识拓展: 计算机的特点计算机的分类 2.计算机的应用计算机的发展趋势知识拓展: 总结 前言 美…

双翌保养码使用指南方法三

保养码使用指南方法三:WiseAlign版本 为了保障您能够顺利使用软件,使之正常运行和合规使用,如何正确使用保养码显得尤为重要。以下是针对 WiseAlign软件的保养码使用指南,帮助您顺利进行激活操作。 步骤一:打开软件并…

uniapp:不同权限设置不同的tabBar

1、在pages.json里,将所有tabBar涉及的页面都加进来。 我这里使用username来动态显示tabBar。 jeecg用户显示:首页,订单,消息,发现,我的,一共5个tabBar。 admin用户显示:首页&…

喜报:项目验收季之陕西融通军民服务社会议室大屏系统项目建设顺利通过竣工验收

由达之云承建的陕西融通军民服务社会议室大屏系统项目建设日前完满完成各项建设任务,建设成果达到预期项目建设目标,并于9月19日顺利通过项目竣工验收。 陕西融通军民服务社有限公司会议大屏系统建设项目为大会议室增加一套视频会议系统,将原…

同为科技(TOWE)工业用插头插座及配电箱产品选型推荐

工业用插头插座及配电箱产品是专用于工业环境中的电源连接和电气设备控制,与普通家用插头插座相比,通常具有更高的功率和电流容量,并且设计上考虑了耐用性、安全性和适应各种环境条件的能力。工业用插头插座产品类型多样,包括插头…

【数仓建设系列之六】数仓管理利器-数据中台

【数仓建设系列之六】数仓管理利器-数据中台介绍 相信看过前面几篇数仓建设系列文章的同学已经对什么是数仓以及如何建设数仓有了充分的认知和了解了,那么问题很多的小明就要问了,既然数仓已经建设起来了,那企业如何管理运营数仓呢&#xff1…

WorkPlus打造智慧企业移动门户,开启高效办公新时代

在移动互联网时代,企业对于高效办公和便捷访问的需求不断增长。WorkPlus作为领先的品牌,致力于打造智慧企业移动门户,帮助企业实现高效协作与便捷访问。本文将重点介绍WorkPlus如何通过创新解决方案,为企业提供定制化的智慧移动门…

Python画图系列——折线图

好看的折线图 import numpy as np import matplotlib.pyplot as plt# 生成随机数据 # np.random.seed(42) # 设置随机种子以确保可重复性 sample_numbers np.arange(1, 21) # 生成1到20的样本编号random_data np.random.rand(20) # 生成20个随机数,范围在0到1之…

企业电子招标采购系统源码之从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理

功能描述 1、门户管理:所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含:招标公告、非招标公告、系统通知、政策法规。 2、立项管理:企业用户可对需要采购的项目进行立项申请,并提交审批,查看所…

文字处理工具 word 2019 mac中文版改进功能

Microsoft Word 2019 是微软公司的文字处理软件,是 office 2019 套件中的一部分。它是一个功能强大、易于使用的工具,可以帮助用户创建各种类型的文档,包括信函、简历、报告、手册等。 Word 2019 提供了许多功能和改进,包括更好的…

Day 02 python学习笔记

python运算符 算术运算符 混合运算的优先级: () > ** * / // % 高于 - 赋值运算符 - * / ** a 1 > a 3 > a a 3 其余同理 注意: python没有自增自减 (a a a-- --a&#xff0…

华为技术有限公司副总裁、计算产品线总裁张熙伟一行到访湖南欧拉生态创新中心座谈交流

9月16日下午,华为技术有限公司(简称:华为)副总裁、计算产品线总裁张熙伟一行到访湖南欧拉创新中心开展座谈交流。麒麟信安董事长杨涛,麒麟信安高级副总裁刘坤、陈松政,副总裁王攀、颜跃进等参加交流。 华为…

【HTTP】Cookie 和 Session 详解

Cookie 和 Session 一. Cookie1. 什么是 Cookie2. Cookie 的作用3. Cookie 的组成4. Cookie 的组织形式5. Cookie 的传输6. 如何提高 Cookie 的安全性7. Cookie 类 二. Session1. 理解会话机制 (Session)2. Sessoin 的组织形式3. HttpSession 类 三. Cookie 和 Session 的联系与…

ATF编译报错,更新工具链后解决

同一个问题被两个人问到,都是ATF源码编译不过,更新工具链后解决 unknown value armv8.5-a’ for -march cc1: error: unknown value cortex-a55’ for -tune 如果您在编译的时候,也遇到架构或微架构的错误,可尝试更新工具链。 分…

家长监控孩子电脑屏幕的软件有哪些?怎么监控家中孩子的电脑?

在当今信息化社会,互联网已经成为孩子们学习、娱乐和社交的重要平台。然而,网络环境中充斥着各种不良信息和安全隐患,对孩子的身心健康造成了一定的影响。为了保障孩子的网络安全和健康成长,家长们需要采取一定的措施来监控孩子的…

01-初识HTML

01-初识HTML 学习目标: 理解HTML的基本语法掌握排版标签实现标题等效果相对路径和绝对路径媒体标签(图片、音频、视频)超链接 一、基础认知 了解网页组成和五大浏览器 明确Web标准的构成 1.1 认识网页 以下网页有哪些部分组成 文字、图片、…

一致性检验-简单Kappa

目录 ChatGPT的回答: Kappa的计算 Kappa值的解释 网上给出的资料: 关于Kappa的第一篇论文: Jacob Cohen (1960). "A coefficient of agreement for nominal scales". Educational and Psychological Measurement. 20 (1): 37–…