当前位置: 首页 > news >正文

【FreeRTOS】内存管理笔记

一、为什么要自己实现内存管理?

后续的章节涉及这些内核对象:task、queue、semaphores和event group等。为了让FreeRTOS更容 易使用,这些内核对象一般都是动态分配:用到时分配,不使用时释放。使用内存的动态管理功能,简 化了程序设计:不再需要小心翼翼地提前规划各类对象,简化API函数的涉及,甚至可以减少内存的使用。
内存的动态管理是C程序的知识范畴,并不属于FreeRTOS的知识范畴,但是它跟FreeRTOS关系是如此紧密,所以我们先讲解它。
在C语言的库函数中,有mallc、free等函数,但是在FreeRTOS中,它们不适用:
不适合用在资源紧缺的嵌入式系统中
这些函数的实现过于复杂、占据的代码空间太大
并非线程安全的(thread-safe) 运行有不确定性:
每次调用这些函数时花费的时间可能都不相同
内存碎片化 使用不同的编译器时,需要进行复杂的配置
有时候难以调试


注意:我们经常"堆栈"混合着说,其实它们不是同一个东西:
堆,heap,就是一块空闲的内存,需要提供管理函数
malloc:从堆里划出一块空间给程序使用
free:用完后,再把它标记为"空闲"的,可以再次使用
栈,stack,函数调用时局部变量保存在栈中,当前程序的环境也是保存在栈中
可以从堆中分配一块空间用作栈

二、FreeRTOS的5种内存管理方法

FreeRTOS中内存管理的接口函数为:pvPortMalloc 、vPortFree,对应于C库的malloc、free。 文件在 FreeRTOS/Source/portable/MemMang 下,它也是放在 portable 目录下,表示你可以提供自 己的函数。
源码中默认提供了5个文件,对应内存管理的5种方法。

相关文章:

【FreeRTOS】内存管理笔记

一、为什么要自己实现内存管理? 后续的章节涉及这些内核对象:task、queue、semaphores和event group等。为了让FreeRTOS更容 易使用,这些内核对象一般都是动态分配:用到时分配,不使用时释放。使用内存的动态管理功能&…...

【数据结构】二叉树:一场关于节点与遍历的艺术之旅

专栏引入 哈喽大家好,我是野生的编程萌新,首先感谢大家的观看。数据结构的学习者大多有这样的想法:数据结构很重要,一定要学好,但数据结构比较抽象,有些算法理解起来很困难,学的很累。我想让大家…...

arm系统中双网卡共存问题

文章目录 单网卡单独运行双网卡共存问题双网卡解决方案方案一方案二方案三验证双网卡通过网卡名获取IP通过TCP与服务端通信参考单网卡单独运行 双网卡共存问题 双网卡解决方案 方案一 https://blog.csdn.net/HowieXue/article/details/75937972 方案二 http://bbs.witech…...

IDEA创建Mybatis项目

IDEA创建Mybatis项目 第一步:创建库表 -- 创建数据库 create database mybatis_db;-- 使用数据库 use mybatis_db;-- 创建user表 CREATE TABLE user (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,password VARCHAR(50) NOT NULL,email VARC…...

排序---快速排序

前言 个人小记 一、代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define MAX_ARR 100000 #define swap(a,b)\ {\__typeof(a) __ca;\ab,b__c;\ } #define TEST(func ,arr,l,r)\ {\int nr-l;\printf("tes…...

#08【面试问题整理】嵌入式软件工程师

前言 本系列博客主要记录有关嵌入式方面的面试重点知识,本系列已经更新的篇目有如下: ​ 1.1进程线程的基本概念 1.2 并发,同步,异步,互斥,阻塞,非阻塞的理解 1.3 孤儿进程、僵尸进程、守护进程的概念 3.1 TCP UDP 【本篇】3.2 三次握手、四次挥手...

统计绘图 | 一行代码教你绘制顶级期刊要求配图

在分享完即可统计又可可视化绘制的优秀可视化包后(具体内容可看 统计绘图 | 既能统计分析又能可视化绘制的技能 。就有小伙伴私信问我需要绘制出版级别的可视化图表有什么快速的方法&#xff1f;“。鉴于我是一个比较宠粉的小编&#xff0c;几天就给大家推荐一个技巧&#xff0…...

[ue5]建模场景学习笔记(6)——必修内容可交互的地形,交互沙(4)

1.需求分析&#xff1a; 现在我们已经有了可以在世界内近于无限的跑动痕迹&#xff0c;现在需要对痕迹进行细化&#xff0c;包括例如当人物跳起时便不再绘制痕迹&#xff0c;以及痕迹应该存在深浅&#xff0c;应该由两只脚分别绘制&#xff0c;同时也应该对地面材质进行进一步处…...

5.2 参照完整性

5.2.1 外键约束 语法格式&#xff1a;constraint < symbol > foreign key ( col_nam1[, col_nam2... ] ) references table_name (col_nam1[, col_nam2...]) [ on delete { restrict | cascade | set null | no action } ] [ on update { restrict | cascade | set nu…...

SpringCache 缓存 - @Cacheable、@CacheEvict、@CachePut、@Caching、CacheConfig 以及优劣分析

目录 SpringCache 缓存 环境配置 1&#xff09;依赖如下 2&#xff09;配置文件 3&#xff09;设置缓存的 value 序列化为 JSON 格式 4&#xff09;EnableCaching 实战开发 Cacheable CacheEvict CachePut Caching CacheConfig SpringCache 的优势和劣势 读操作…...

数据结构 —— 堆

1.堆的概念及结构 堆是一种特殊的树形数据结构&#xff0c;称为“二叉堆”&#xff08;binary heap&#xff09; 看它的名字也可以看出堆与二叉树有关系&#xff1a;其实堆就是一种特殊的二叉树 堆的性质&#xff1a; 堆中某个结点的值总是不大于或不小于其父结点的值&…...

【运维】如何更换Ubuntu默认的Python版本,update-alternatives如何使用

update-alternatives 是一个在 Debian 及其衍生发行版中&#xff08;包括 Ubuntu&#xff09;用于管理系统中可替代项的命令。它可以用于在系统中设置默认的软件版本&#xff0c;例如在不同版本的软件之间进行切换&#xff0c;比如不同的 Python 版本。 要在 Ubuntu 中使用 up…...

2024 年适用于 Linux 的 5 个微软 Word 替代品

对于那些最近由于隐私问题或其他原因而转向 Linux 的用户来说&#xff0c;可能很难替换他们最喜欢的、不在 Linux 操作系统上运行的应用程序。 寻找流行程序的合适替代品可能会成为一项挑战&#xff0c;而且并不是每个人都准备好花费大量时间来尝试弄清楚什么可以与他们在 Win…...

大模型日报2024-06-12

大模型日报 2024-06-12 大模型资讯 NVIDIA发布GB200 Grace Blackwell AI超级芯片 摘要: NVIDIA近日宣布推出GB200 Grace Blackwell超级芯片和Blackwell B200 GPU&#xff0c;这些新技术将推动人工智能领域的发展。 阿布扎比TII发布下一代Falcon语言模型 摘要: 阿布扎比的技术创…...

LVGL欢乐桌球游戏(LVGL+2D物理引擎学习案例)

LVGL欢乐桌球游戏&#xff08;LVGL2D物理引擎学习案例&#xff09; 视频效果&#xff1a; https://www.bilibili.com/video/BV1if421X7DL...

国产数字证书大品牌——JoySSL

一、品牌介绍 网盾安全旗下品牌JoySSL是专业的https安全方案服务商&#xff0c;业务涉及网络安全技术服务、安全防护系统集成、数据安全软件开发等。网盾安全以网络安全为己任&#xff0c;携手GlobalSign、DigiCert 、Sectigo等全球数家权威知名SSL证书厂商&#xff0c;加速ht…...

Codeforces Global Round 26 D. “a“ String Problem 【Z函数】

D. “a” String Problem 题意 给定一个字符串 s s s&#xff0c;要求把 s s s 拆分成若干段&#xff0c;满足以下要求&#xff1a; 拆分出来的每一个子段&#xff0c;要么是子串 t t t&#xff0c;要么是字符 a a a子串 t t t 至少出现一次 t ≠ " a " t \ne…...

Next.js 加载页面及流式渲染(Streaming)

Next.js 加载页面及流式渲染&#xff08;Streaming&#xff09; 在现代的 Web 应用开发中&#xff0c;用户体验是至关重要的。快速响应的页面加载和流畅的用户界面可以显著提升用户的满意度。而加载页面&#xff08;Loading Page&#xff09;和流式渲染&#xff08;Streaming&…...

形如SyntaxError: EOL while scanning string literal,以红色波浪线形式在Pycharm下出现

背景&#xff1a; 新手在学习Python时可能会出现如下图所示的报错 下面分情况教大家如何解决 视频教程【推荐】&#xff1a; 形如SyntaxError: EOL while scanning string literal&#xff0c;以红色波浪线形式在Pycharm下出现 过程&#xff1a; 问题概述&#xff1a; 简单…...

DockerCompose+Jenkins+Pipeline流水线打包SpringBoot项目(解压安装配置JDK、Maven等)入门

场景 DockerCompose中部署Jenkins&#xff08;Docker Desktop在windows上数据卷映射&#xff09;&#xff1a; DockerCompose中部署Jenkins&#xff08;Docker Desktop在windows上数据卷映射&#xff09;-CSDN博客 DockerJenkinsGiteeMaven项目配置jdk、maven、gitee等拉取代…...

一文搞懂:Agent、Harness Engineering、MCP、Skill 到底是什么

&#x1f9ed; 你是否被这些词搞晕过&#xff1f; Agent Harness Engineering MCP Skill Tool Workflow…… 大模型时代&#xff0c;新概念层出不穷。它们分别是什么&#xff1f;又如何协同工作&#xff1f; 这篇文章是你的概念地图。 大模型生态&#xff1a;四个核心概…...

Ice终极指南:3步打造Mac菜单栏的清爽工作空间

Ice终极指南&#xff1a;3步打造Mac菜单栏的清爽工作空间 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice Ice是一款专为macOS设计的强大菜单栏管理器&#xff0c;能够帮助用户有效整理和优化混乱的菜…...

AudioSeal Pixel Studio实战教程:与LangChain音频处理Agent集成

AudioSeal Pixel Studio实战教程&#xff1a;与LangChain音频处理Agent集成 1. 工具介绍与核心价值 AudioSeal Pixel Studio是一款基于Meta开源的AudioSeal算法构建的专业音频水印工具。它能够在保持原始音质几乎不变的情况下&#xff0c;为音频文件嵌入隐形数字水印&#xf…...

COMSOL:模拟多尺度扩散模型下的流体运动与浆液扩散

COMSOL COMSOL模拟不同扩散模型下煤粒吸附/解吸扩 散 comsol仿真模拟电双层纳米电极&#xff0c;扩散双电层耦 合了Nernst-Planck方程和泊松方程。 comsol二 氧化碳混相驱替&#xff0c;多孔介质驱替&#xff0c;油气&#xff0c;扩散&#xff0c; 考虑浓度变化&#xff0c;速度…...

BilibiliDown革新性视频下载解决方案:从需求到实践的全方位指南

BilibiliDown革新性视频下载解决方案&#xff1a;从需求到实践的全方位指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_…...

ICM45686数据老飘?GD32F470的IIC时序调试与FreeRTOS延时函数那些坑

GD32F470与ICM45686通信稳定性优化实战&#xff1a;从时序调试到FreeRTOS延时陷阱 当惯性导航系统的数据出现飘移、丢包或完全无法读取时&#xff0c;多数开发者会首先怀疑传感器硬件问题。但在使用GD32F470与ICM45686构建的系统中&#xff0c;真正的"魔鬼"往往藏在…...

除了当图床,Cloudflare R2的S3 API还能这么玩?Python脚本批量管理文件实战

解锁Cloudflare R2的S3 API潜能&#xff1a;Python自动化文件管理实战 Cloudflare R2作为兼容S3 API的对象存储服务&#xff0c;其应用场景远不止搭建图床这么简单。对于开发者而言&#xff0c;R2提供的S3兼容接口意味着可以将其无缝集成到各种自动化工作流中。本文将带你探索如…...

从智能电池到服务器风扇:手把手解析SMBus的15种通信协议与应用实例

从智能电池到服务器风扇&#xff1a;手把手解析SMBus的15种通信协议与应用实例 当你在笔记本电脑上看到剩余电量精确到1%时&#xff0c;或是服务器机柜里的风扇根据温度自动调节转速时&#xff0c;背后都有一个低调的"通信专家"在默默工作——它就是SMBus&#xff0…...

告别绿幕!安卓免Root虚拟视频插件开发避坑指南:从Media3播放到Xposed Hook的完整流程

安卓虚拟视频插件开发实战&#xff1a;从Media3解码到系统Hook的避坑指南 在移动端开发领域&#xff0c;音视频处理与系统级功能结合一直是技术难点与创新点交汇处。许多开发者尝试过在安卓平台上实现摄像头替换功能&#xff0c;却往往在视频编解码、系统API拦截和性能优化等环…...

Sleep-EDF数据库实战:如何用Matlab快速处理睡眠分期标签(附完整代码)

Sleep-EDF数据库实战&#xff1a;如何用Matlab快速处理睡眠分期标签&#xff08;附完整代码&#xff09; 睡眠研究是神经科学和临床医学的重要领域&#xff0c;而Sleep-EDF数据库作为公开可用的标准数据集&#xff0c;为科研人员提供了宝贵的多导睡眠图(PSG)记录。但在实际应用…...