FreeRTOS移植以及核心功能
文章目录
- 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上之前,您需要进行以下配置:
-
配置硬件:确保您的STM32芯片与所选择的FreeRTOS
版本兼容,并且具备足够的内存资源(ram资源)
。您可以参考芯片的数据手册和FreeRTOS的系统要求来确认这些信息。 -
引入FreeRTOS源代码
:将FreeRTOS源代码添加到您的项目中。您可以从FreeRTOS官方网站下载最新的稳定版本或者适用于STM32的移植版。 -
配置FreeRTOSConfig.h文件:这个文件包含了FreeRTOS的核心配置参数。您需要根据STM32的硬件特性和应用需求进行相应配置。以下是一些可能需要配置的参数:
- 定时器配置:根据STM32的定时器资源,配置用于FreeRTOS的
系统节拍定时器
。 - 内存管理器配置:根据可用的RAM大小和需要的内存管理策略,
配置内存管理器选项
。 - 任务优先级配置:
定义任务优先级的范围和默认优先级
。 - 栈配置:
为每个任务定义适当大小的栈空间
。 - 优化配置:根据应用需求进行合适的编译优化设置。
- 定时器配置:根据STM32的定时器资源,配置用于FreeRTOS的
-
创建任务:在main.c(或其他文件)中创建需要运行的任务,通过调用FreeRTOS提供的API函数进行任务的创建、启动和管理。
-
配置中断:根据您的应用需求,配置适当的中断处理程序,并使用FreeRTOS提供的接口函数来在中断中进行任务切换。
-
配置时钟和系统节拍:根据STM32的时钟设置和FreeRTOS的节拍定时器配置,确保系统节拍的准确性和稳定性。
-
编译和烧录:将修改后的代码编译为可执行文件,并将其烧录到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任务调度算法有三种
- 第一种是基于优先级的抢占式任务调度算法,
- 第二种是基于
优先级的时间片轮转调度算法,
- 第三种是合作式调度算法。【默认情况为:使用时间片抢占式任务调度】不再使用了
优先级的时间片轮转调度算法是多级反馈队列调度算法的一种变体
,它具有以下特点:
-
多级优先级:该调度算法将进程划分为多个不同的优先级队列。
每个队列具有不同的优先级
,通常按照优先级从高到低排序。不同的进程可以被分配到不同的队列中,根据进程的优先级确定所在队列。 -
时间片轮转:
每个队列都采用时间片轮转的调度策略
。每个进程在当前队列中运行一个固定大小的时间片,当时间片用完后,进程被放入队列尾部,并等待下一次调度。 -
优先级提升:为了避免低优先级进程饥饿问题,该算法引入了优先级提升机制。当一个进程在低优先级队列中等待一段时间后,其优先级会被提升到更高的队列中,以增加其获得CPU时间片的机会。
-
公平性和响应性:
该算法旨在实现公平性和响应性的平衡。高优先级的进程会更频繁地获得CPU时间,以保证响应及时;而低优先级的进程也会有机会获得一定的CPU执行时间,以保证公平性
。 -
动态调整:根据系统负载和进程优先级的变化,该算法具有动态调整的能力。可以根据实时情况增加或减少队列的数量、调整各个队列的时间片大小,以更好地适应不同的工作负载。
通过以上特点,优先级的时间片轮转调度算法可以在满足高优先级进程响应需求的同时,确保低优先级进程也能得到一定的执行时间,从而在多任务环境中实现较好的公平性和响应性
。
时间管理
这里需要程序员去配置时钟和系统节拍:根据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
相关文章:
FreeRTOS移植以及核心功能
文章目录 freertos和ucos区别,优缺点比较移植步骤核心功能内存管理(5种内存管理策略)FreeRTOS任务调度算法有三种时间管理通信管理 栈管理 freertos和ucos区别,优缺点比较 FreeRTOS(Free Real-Time Operating System&…...
重装系统(配置环境)
这里写目录标题 0.重装系统1.python1.1 anaconda1.2 pycharm1.3 深度学习环境配置 2.java2.1.安装JDK2.2.配置JDK环境变量2.3IDEA2.4 Maven 3.大数据3.1 虚拟机3.2 Hadoop平台3.3 存储3.4 采集3.5 计算3.6 查询3.7 可视化 0.重装系统 // An highlighted block var foo bar;1.…...
docker系列-报错以及解决指南
1. windows运行docker报错Windows Hypervisor is not presentDocker Desktop is unable to detect a Hypervisor.Hardware assisted virtualization and data execution protection must be enabled in the BIOS. Docker Desktop - Windows Hypervisor is not presentDocker D…...
Vue3快速上手
1.Vue3简介 2020年9月18日,Vue.js发布3.0版本,代号:One Piece(海贼王)耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址:Release v3.0.0 One Piece vuejs/core GitHub 2.Vue3带…...
二叉搜索树(BST,Binary Search Tree)
文章目录 1. 二叉搜索树1.1 二叉搜索树概念1.2 二叉搜索树的查找1.3 二叉搜索树的插入1.4 二叉搜索树的删除 2 二叉搜索树的实现3 二叉搜索树的应用3.1二叉搜索树的性能分析 1. 二叉搜索树 1.1 二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一棵空树…...
分析key原理
总结: key是虚拟dom对象的标识,当数据发生变化时,vue会根据新数据生成新的虚拟dom,随后vue进行新虚拟dom与旧虚拟dom的差异比较 比较规则: ①旧虚拟dom中找到了与新虚拟dom相同的key 若虚拟dom中的内容没变,…...
[CISCN2019 华东南赛区]Web11 SSTI
这道SSTI 差点给我渗透的感觉了 全是API 我还想去访问API看看 发现这里读取了我们的ip 我们抓包看看是如何做到的 没有东西 我们看看还有什么提示 欸 那我们可不可以直接修改参数呢 我们传递看看 发现成功了 是受控的 这里我就开始没有思路了 于是看了wp 说是ssti 那我们看…...
百度春招C++后端面经总结
这次的面经,主要都是问操作系统、网络编程、C++ 这三大方向。 能明显感觉到,C++面试和Java或者Go面试重点,Java/Go主要是问MySQL、Redis。 一、介绍一下webserver项目 服务器开始运行,创建(初始化)线程池(IO密集型,线程数n+1); 创建 epoll 对连接进行监听 监听到连…...
小程序开发一个多少钱啊
在今天的数字化时代,小程序已经成为一种非常流行的应用程序形式。由于它们的便捷性、易用性和多功能性,小程序吸引了越来越多的用户和企业。但是,很多人在考虑开发一个小程序时,都会遇到同一个问题:开发一个小程序需要…...
C# 随机数生成 Mersenne Twister 马特赛特旋转演算法 梅森旋转算法
NuGet安装MathNet.Numerics 引用: using MathNet.Numerics.Random; /// <summary>/// 包括lower,不包括upper/// </summary>/// <param name"lower"></param>/// <param name"upper"></param>/// <para…...
C++进阶(二)
目录 1、Vector2D 默认构造、重载 2、char 深度理解 3、深度理解简单的类操作 1、Vector2D 默认构造、重载 #include <iostream> #include <cmath>class Vector2D { private:double x; // X坐标double y; // Y坐标public:// 默认构造函数,将向量初…...
zoneinfo
在Linux系统中,zoneinfo是一个包含了世界各地时区信息的目录,通常位于/usr/share/zoneinfo。这个目录下的子目录和文件名对应了各个时区的名称。例如,/usr/share/zoneinfo/America/Los_Angeles文件就包含了美国洛杉矶的时区信息。 你可以通过…...
基于微信小程序的实验室预约管理系统设计与实现
前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…...
腾讯mini项目-【指标监控服务重构】2023-08-17
今日已办 定位昨日发现的问题 来回测试发现依然出现该问题 将 pub/sub 的库替换为原来官方基于 sarama 的实现,发现问题解决了,所以问题的根本是 kafkago 这个库本身存在问题 依据官方的实现,尝试自定义实现 pub/sub sarama 与 kafka-go …...
前端需要知道的计算机网络知识----网络安全,自学网络安全,学习路线图必不可少,【282G】初级网络安全学习资源分享!
网络安全(英语:network security)包含网络设备安全、网络信息安全、网络软件安全。 黑客通过基于网络的入侵来达到窃取敏感信息的目的,也有人以基于网络的攻击见长,被人收买通过网络来攻击商业竞争对手企业࿰…...
#循循渐进学51单片机#定时器与数码管#not.4
1、熟练掌握单片机定时器的原理和应用方法。 1)时钟周期:单片机时序中的最小单位,具体计算的方法就是时钟源分之一。 2)机器周期:我们的单片机完成一个操作的最短时间。 3)定时器:打开定时器“储存寄存器…...
基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(五)
目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 数据增强3. 模型构建4. 模型训练及保存5. 模型评估6. 模型测试 系统测试1. 训练准确率2. 测试效果3. 模型应用1)程序下载运行2)应用使用说明3)测试结果 相关其它…...
Linux: Cache 简介
文章目录 1. 前言2. 背景3. Cache 硬件基础3.1 什么是 Cache ?3.2 Cache 工作原理3.3 Cache 层级架构3.4 内存架构中各级访问速度概览3.5 Cache 分类3.6 Cache 的 查找 和 组织方式3.6.1 Cache 组织相关术语3.6.2 Cache 查找3.6.2.1 Cache 查找过程概述3.6.2.2 Cach…...
常见位运算公式使用场景
判断奇偶性:数值 x 为偶数当且仅当 (x & 1) 0。数值 x 为奇数当且仅当 (x & 1) 1。 交换两个数:使用异或操作符 ^ 进行交换。假设有变量 a 和 b,则可以使用以下公式交换它们的值: a a ^ b; b a ^ b; a a ^ b;取绝…...
virtualbox配置ubuntu1804虚拟机相关流程
virtualbox配置ubuntu1804虚拟机相关流程 相关版本能解决的问题安装流程1:新建虚拟机安装流程2:配置虚拟机安装流程3:安装虚拟机系统安装流程4:设置ubuntu 相关版本 virtualbox使用VirtualBox官网下载的6.1.34 r150636 版。ubunt…...
防火墙基本概念
思维导图 1. 什么是防火墙? 网络在远古时期没有防火墙大家都是联通的,any to any,没有防火墙的时代就相当于没有门的房子, 没有城墙的城市。 路由器与交换机的本质是转发,防火墙的本质是控制和防护。 防火墙ÿ…...
易点易动固定资产管理平台:打通BMP,实现高效流程管理与全生命周期管理
在现代企业管理中,固定资产的流程管理和全生命周期管理是提高效率和降低成本的关键。易点易动固定资产管理平台通过打通BMP(Business Process Management)系统,实现了固定资产流程管理和全生命周期高效化管理的目标。本文将详细介…...
uniapp webview实现双向通信
需求:uniapp webview嵌套一个h5 实现双向通信 uniapp 代码 <template><view><web-view src"http://192.168.3.150:9003/" message"onMessage"></web-view></view> </template><script>export defau…...
Linux动态库
定义:动态函数库,是在程序执行时动态(临时)由目标程序去调用 优点: 调用时不复制,程序运行时动态加载到内存,供程序调用,系统只加载一次,多个程序可以共用,…...
ESP-IDF学习——1.环境安装与hello-world
ESP-IDF学习——1.环境安装与hello-world 0.前言一、环境搭建1.官方IDE工具2.vscode图形化配置 二、示例工程三、自定义工程四、点灯五、总结 0.前言 最近在学习freertos,但由于买的书还没到,所以先捣鼓捣鼓ESP-IDF,因为这个比Arduino更接近底…...
【算法】二分答案
文章目录 相关链接什么时候使用二分答案?题目列表最大化最小化相关题目列表📕2439. 最小化数组中的最大值解法1——二分答案解法2——分类讨论O(n) 2513. 最小化两个数组中的最大值(二分答案lcm容斥原理)🐂好题&#x…...
阿曼市场最全开发攻略,看这一篇就够了
中东是一个充满外贸机遇的市场,已经成为很多外贸人重点开发的市场。 阿曼的海岸南方和东方临阿拉伯海,东北方则抵阿曼湾。阿曼因为扼守着世界上最重要的石油输出通道——波斯湾和阿曼湾之间的霍尔木兹海峡,所以地理位置非常重要,…...
探讨UUID和Secrets:确保唯一性与数据安全的利器
😀前言 在现代软件开发中,唯一标识符(UUID)和机密信息的处理是至关重要的。UUID是用于唯一标识数据记录和对象的128位值,确保了全球范围内的唯一性。同时,Python的secrets模块为处理机密信息提供了强大的随…...
06-Redis缓存高可用集群
上一篇:05-Redis高可用集群之水平扩展 1.集群方案比较 哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,…...
LCP 18.早餐组合
题目来源: leetcode题目,网址:LCP 18. 早餐组合 - 力扣(LeetCode) 解题思路: 按序遍历饮料数组,二分查找符合要求 staple 中满足要求的最大值所在位置。最后返回所有*(最大位置…...
做精美ppt的网站/网页搜索
为了更好地让初学者轻松入门,这里仍然采用趣味性的方式聊一些常用技术点,致力于.NET新手们的快速提高!知识都是普通的,关键是学习的思路。技术源于生活,技术原来可以这样学。抛砖引玉而已。 层次结构在现实社会里随处…...
做网站需要哪些成本/广州白云区疫情实时动态
excel怎么冻结前两行不动?其实只要直接使用冻结窗格功能就可以了。下面我们来学习一下。冻结窗口怎么冻结多行步骤1、打开excel文件,例如这个表格。步骤2、只冻结前两行需要选中第三行,选择【视图】-【冻结窗格】;步骤3、在三角处打开&#…...
网站建设:/潍坊seo关键词排名
API Testing 入门基础系列 之 API Testing 9 - REST和RESTFull API的区别 这两个概念容易混淆,可能会在面试过程中被问到,所以单独拿出来了解一下。 REST是REpresentational State Transfer的缩写,表述性状态转移。它是一种架构风格&#x…...
wordpress 最新评论/sem竞价推广是什么意思
1-5级:冰弹(icebolt)1,冰封装甲(frozenarmor)1,剩下的点数全部加温暖(warmth).火弹(firebolt)不加.这样你可以换上你找到的一些投掷装备,如飞刀,标枪等等.换下那根1火弹的法杖.对付血鸟(bloodraven)等均没有问题.6-11级:霜之新星(frostnova)1,静电力场(staticfield)1,剩下的加冰…...
做网站给源码吗/如何做推广最有效果
AliNLP 自然语言技术平台 阿里AliNLP系统架构图 1. 词法分析(分词、词性、实体): - 算法:基于Bi-LSTM-CRF算法体系,以及丰富的多领域词表 2. 句法分析(依存句法分析、成分句法分析)࿱…...
中国水土保持与生态环境建设网站/寻找客户的12种方法
动态规划是运筹学中一种经典的求解方法,其基本原则是最优原则 最优原则 不论第一次选择的状态是什么,接下来的选择一定是最优选择 只要最优原则是适用的,那么就可以用动态规划方法去求解这个规划问题。下面用最经典的0-1 背包问题来解释何为最…...