news 2026/4/27 1:33:11

freerots学习笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
freerots学习笔记

一、源码描述

1.头文件:freertos.h、FreeRTOSConfig.h

2.核心文件:

3.架构文件和内存管理文件

二、内存管理

在C语言的库函数中,有mallc、free等函数,但是在FreeRTOS中,它们不适用:

  • 不适合用在资源紧缺的嵌入式系统中
  • 这些函数的实现过于复杂、占据的代码空间太大
  • 并非线程安全的(thread- safe)
  • 运行有不确定性:每次调用这些函数时花费的时间可能都不相同
  • 内存碎片化
  • 使用不同的编译器时,需要进行复杂的配置
  • 有时候难以调试

FreeRTOS在创建任务时,需要2个内核对象:task control block(TCB)、stack。

Heap_1

它只实现了pvPortMalloc,没有实现vPortFree。

它的实现原理很简单,首先定义一个大数组,然后,对于pvPortMalloc调用时,从这个数组中分配空间。

Heap_2

使用最佳匹配算法,支持vPortFree。

分配小能满足pvPortMalloc内存的空闲内存块。

最佳匹配算法:

  • 假设heap有3块空闲内存:5字节、25字节、100字节
  • pvPortMalloc想申请20字节
  • 找出最小的、能满足pvPortMalloc的内存:25字节
  • 把它划分为20字节、5字节
    • 返回这20字节的地址
    • 剩下的5字节仍然是空闲状态,留给后续的pvPortMalloc使用

与Heap_4相比,Heap_2不会合并相邻的空闲内存,所以Heap_2会导致严重的"碎片化"问题。

但是,如果申请、分配内存时大小总是相同的,这类场景下Heap_2没有碎片化的问题。所以它适合这种场景:频繁地创建、删除任务,但是任务的栈大小都是相同的(创建任务时,需要分配TCB和栈,TCB总是一样的)。

Heap_3

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

C库里的malloc、free函数并非线程安全的,Heap_3中先暂停FreeRTOS的调度器,再去调用这些函数,使用这种方法实现了线程安全。

Heap_4

使用首次适应算法(first fit)来分配内存。它还会把相邻的空闲内存合并为一个更大的空闲内存,这有助于较少内存的碎片问题。

分配最先能满足pvPortMalloc内存的空闲内存。

首次适应算法:

  • 假设堆中有3块空闲内存:5字节、200字节、100字节
  • pvPortMalloc想申请20字节
  • 找出第1个能满足pvPortMalloc的内存:200字节
  • 把它划分为20字节、180字节
  • 返回这20字节的地址
  • 剩下的180字节仍然是空闲状态,留给后续的pvPortMalloc使用

Heap_5

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/27 1:32:06

2026届学术党必备的十大降重复率神器推荐榜单

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 借助人工智能生成那些越发普及的内容当做背景前提,降低AIGC检测概率的专业类型工…

作者头像 李华
网站建设 2026/4/27 1:31:26

合同管理系统选型:10款工具里,真正适合中小企业的可能只有1-2款

先说结论大厂CLM功能全但成本高、实施重,中小企业大概率用不上也付不起。简道云这类零代码平台灵活性高,但自定义能力有边界,复杂审批流仍需技术配合。选型核心不是比功能列表,而是先想清楚自己最痛的环节:是起草慢、审…

作者头像 李华
网站建设 2026/4/27 1:29:27

Python 3.12 Key Words - 13 - yield

Python 3.12 Key Words - yield、yield from生成器是 Python 中一种特殊的迭代器,它允许你延迟生成数据,而不是一次性将所有结果存储在内存中。yield 关键字用于定义生成器函数,而 yield from 则用于将迭代任务委托给子生成器。生成器在流式…

作者头像 李华
网站建设 2026/4/27 1:24:28

ASP Folder:深入解析ASP文件夹在Web开发中的应用

ASP Folder:深入解析ASP文件夹在Web开发中的应用 引言 ASP(Active Server Pages)文件夹是Web开发中一个非常重要的组成部分。它不仅方便了开发者的工作,而且对于提高网站性能和用户体验也具有重要意义。本文将深入探讨ASP文件夹在Web开发中的应用,包括其功能、优势以及注…

作者头像 李华
网站建设 2026/4/27 1:18:40

SVM中拉格朗日乘数法与松弛变量的应用原理

1. 拉格朗日乘数法在支持向量机中的理论基础支持向量机(SVM)作为机器学习领域的重要分类算法,其核心数学工具正是拉格朗日乘数法。当训练数据线性不可分时,我们需要引入松弛变量(slack variables)来处理分类…

作者头像 李华
网站建设 2026/4/27 1:18:14

玩转 Python:多线程、装饰器、视觉检测与正则匹配实战

Python 作为一门简洁又强大的编程语言,在多线程编程、函数增强、计算机视觉、文本处理等多个领域都有着广泛的应用。本文将结合几个实用的代码案例,带你上手 Python 的多线程、装饰器、OpenCV 颜色检测和正则表达式匹配,从基础应用到实际场景…

作者头像 李华