1883_把FreeRTOS中的heap_4作为一个通用模块使用并初步测试

         全部学习汇总: GreyZhang/c_units: A small piece of code which can be reuse anywhere, I call it a unit. This is a collection of unit in C language! Ok, yes, it would be my toolbox. (github.com)

         在嵌入式,尤其是控制类的嵌入式中很少有malloc以及free的使用。但是,如果有这么个功能的话会让很多成熟的软件移植得到很大的方便。正好,在之前看FreeRTOS的时候也看到过这方面的一些论争描述。这个FreeRTOS中有一个可以在嵌入式中使用而且还解决了一些弊端的malloc和free的存储管理实现。这里尝试把这个功能处理成一个初步的模块,然后做几个基本的功能测试。

         这个在使用的时候一些关键区保护等处理,这里为了简单方便先不考虑。如果后续进行实际使用的时候,这部分代码肯定还是需要做一部分改进。

         大部分的处理其实是处理一下编译中的问题,我使用到的配置如下:

         我专门增加了一个头文件用来管理这里的一些配置信息以及数据结构,同时提供一些接口的声明。

         功能的使用需要一个初始化,对应的接口是一个静态函数。其实看一下代码,这个在第一次调用分配的时候会自动调用。我想做一部分测试,又单独写了一个测试文件,因此这里临时加了一个初始化,也尝试进行主动的调用。后面还会处理掉。

         这里的大结构不改,干脆把两个定义改成了一样,全都是私有的模式。这样的处理,相对来说安全可靠性好一些。

         关于一组函数的功能,之前我其实是尝试过用文学编程的模式进行过分析的。这里不再继续做过多的阐述,简单来说其实就是一个链表的管理。因此,存储的分配其实在使用的时候会有一些额外的消耗。这部分消耗主要是链表资源占用的。

而不同芯片,很多参数是不相同的,我常用的都是32bit的MCU,因此我尝试在尽力相同的环境中测试。正好,手中的树莓派3B可以发挥这样的作用。

         这是我用到的编译器,这样直接编译运行后的结果基本接近于我常用的芯片行为。

         这一个测试主要是看看初始化的资源消耗,其实应该就是一个链表的节点。

         实际看看其实也是这样,这个链表为什么消耗8个字节呢?

         从内容看,一个size_t,其实是整形了,外加一个指针。这个数值还是准确的。

         接下来看看分配一个int的空间,存储的消耗。

         这个信息的获取不是很对,其实通过基本的信息来计算,占用的空间应该是8192 – 8 – 8168,结果为16。为什么数据不对呢?主要还是处在内存池的初始化上,这个是在分配的时候识别并调用的。也就是说,如果连续做几次测试,后面的就会是对的。那么这16个字节如何来的呢?其中的8个字节跟前面一样,是一个链表节点的消耗,而另外的8个字节就是给整形分配的空间。那么为什么不是分配4个字节呢?那是因为在策略上设置了8个字节的对齐。

         也就是上面的这个参数。

         这个数值如果是改成4,那么效果是上面这样。所差出来的4个字节就没有了。这个从代码的注释中看其实是跟硬件的架构有关的,一时间我还没有弄清楚是什么硬件特性决定了这样的设计,暂时先保持原来的8个字节对齐。

         针对此,再增加一组测试。

         看这里第二组的输出就可以看得出来,这一次申请了8个字节,正好满足对齐的要求。因此在存储分配上跟前面消耗一样,都是16个字节。

         最后增加free的测试。

         最终存储全都释放了。

         其实,更加合理的测试应该有存储大小动态的调整过程。这样,能够看到内存碎片的一个整理过程。针对这方面,我觉得我还是来考虑相信FreeRTOS代码测试的充分性。暂且只做这部分功能性的测试。

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

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

相关文章

SUDA-计算机网路-期末复习提纲

写在前面 帮苏大的同学整理的计网复习材料,用的是他们老师划定的范围。 1.负责互联网协议开发、标准制定、地址分配的国际组织名称及其主要职责 (1) 地址支持组织(ASO)负责IP地址系统的管理。 (2) 域名支持组织(DNSO)…

CMU15-445-Spring-2023-Project #1 - 前置知识(lec01-06)

Lecture #01_ Relational Model & Relational Algebra Databases 数据库是相互关联的数据的有组织集合,对现实世界的某些方面进行建模。区别于DBMS(MySQL、Oracle)。 Flat File Strawman 数据库以CSV文件的形式存储,并由D…

非常漂亮的外贸网站完整代码,适合机械加工和金属零件等领域。

非常漂亮的外贸网站完整代码,适合机械加工和金属零件等领域。整站代码,上传到服务器虚拟主机即可使用。 独家原创资源。源码是asp开发的,数据库是access,主流的虚拟主机空间都支持asp,直接上传就可以使用。 站长保证…

PTA✨C语言 就不告诉你

7-7 就不告诉你 分数 15 全屏浏览题目 切换布局 作者 CHEN, Yue 单位 浙江大学 做作业的时候,邻座的小盆友问你:“五乘以七等于多少?”你应该不失礼貌地围笑着告诉他:“五十三。”本题就要求你,对任何一对给定的正…

Spring MVC自定义类型转换器!!!

使用场景 在index.jsp里面添加日期类型 <form action"account/saveAccount" method"post">账户名称&#xff1a;<input type"text" name"name"><br/>账户金额&#xff1a;<input type"text" name&quo…

CTF-PWN-栈溢出-中级ROP-【栈迁移】

文章目录 栈迁移具体流程 VNCTF 2023 traveler libc-2.27检查源码main函数![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/386c35c30f854434ae43667b9473c58a.png)全局变量地址局部变量地址 PIE保护开启PIE关闭PIE 思路exp 栈迁移参考 栈迁移参考 栈迁移 顾名思义…

充分利用城市闲置空地,建造舒适的气膜运动馆

在城市土地紧张的背景下&#xff0c;气膜建筑以其轻盈灵动的特性&#xff0c;成为利用闲置空地的理想选择。建造舒适的气膜运动馆不仅提升了城市空间利用效率&#xff0c;更为全民健身搭建了一座充满活力的乐园&#xff0c;为城市生活注入了新的活力和福音。 解决城市土地紧张的…

将Llama2上下文长度扩展100倍;效率更高的SeTformer;LLM准确度基本不变加速1.56×;FreeTalker

本文首发于公众号&#xff1a;机器感知 将Llama2上下文长度扩展100倍&#xff1b;效率更高的SeTformer&#xff1b;LLM准确度基本不变加速1.56&#xff1b;FreeTalker Latte: Latent Diffusion Transformer for Video Generation 本文使用Latent Diffusion Transformer(Latte…

让开发改bug全靠催?分享6个实用技巧

测试小伙伴们&#xff0c;你们有遇到下图的情况吗&#xff1f; ​ 这张图其实还算“温柔”的&#xff0c;其实有些情况下&#xff0c;某些测试人员或者开发人员脾气大的可能撕逼或者快干架。所以如何和开发有效沟通&#xff0c;并高效劝说开发改掉bug是一门学问&#xff0c;以…

阿里云服务器e实例和云服务器u1实例有什么区别?

阿里云服务器u1和e实例有什么区别&#xff1f;ECS通用算力型u1实例是企业级独享型云服务器&#xff0c;ECS经济型e实例是共享型云服务器&#xff0c;所以相比较e实例&#xff0c;云服务器u1性能更好一些。e实例为共享型云服务器&#xff0c;共享型实例采用非绑定CPU调度模式&am…

【C++入门到精通】异常 | 异常的使用 | 自定义异常体系 [ C++入门 ]

阅读导航 引言一、C异常的概念二、异常的使用1. 异常的抛出和捕获&#xff08;1&#xff09;throw&#xff08;2&#xff09;try-catch&#xff08;3&#xff09;catch(. . .)&#xff08;4&#xff09;异常的抛出和匹配原则&#xff08;5&#xff09;在函数调用链中异常栈展开…

Java项目:112SSM在线电影订票系统

博主主页&#xff1a;Java旅途 简介&#xff1a;分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 在线电影订票系统基于SpringSpringMVCMybatis开发&#xff0c;系统分为前台和后台&#xff0c;前台主要用来用户浏览电影信息&#xff0c;订票&#xff0c…

C/C++学习笔记 vcpkg使用备忘及简要说明

一、简述 vcpkg 是一个免费的 C/C 包管理器&#xff0c;用于获取和管理库。从 1500 多个开源库中进行选择&#xff0c;一步下载并构建&#xff0c;或者添加您自己的私有库以简化构建过程。由 Microsoft C 团队和开源贡献者维护。 官方教程 vcpkg 文档 | Microsoft Learnvcpkg …

day-04 字符串中的额外字符

思路 动态规划&#xff0c;每个字符要么额外要么不是额外 解题方法 int[] dp new int[n1]; dp[i] 表示从字符串开头到字符串索引i位置的最少额外字符数 dp[i 1] Math.min(dp[i 1], dp[j]) dp[j]表示假设s第i个字符不是额外的&#xff0c;可能等于dp[i 1]&#xff0c;也可…

GPS 模拟器

GPS 工具包&#xff1a;https://www.ni.com/es/support/downloads/software-products/download.gnss-test-toolkit.html#333303 GPS-SDR-SIM&#xff1a;https://github.com/osqzss/gps-sdr-sim GPS LabVIEW &#xff1a;http://mikioblog.dolphinsystem.jp/2017/08/gps-sdr-si…

Presto大数据学习网站:让你轻松驾驭大数据处理!

介绍&#xff1a;Presto是一个由Facebook开源的分布式SQL查询执行引擎&#xff0c;它被设计用于处理各种规模的数据并进行快速分析查询。这个引擎具有优秀的兼容性&#xff0c;可以支持众多的数据源&#xff0c;包括但不限于HDFS、关系型数据库管理系统&#xff08;RDBMS&#…

JVM的FastThrow优化机制

前言&#xff1a; 前一阵子&#xff0c;在公司排查线上问题发现&#xff1a;出问题的方法报空指针异常&#xff0c;但是没有异常堆栈信息和Message。我一开始以为是代码中做了处理&#xff0c;但是经过翻阅代码发现不是。最后一番查找资料&#xff0c;这种现象是JVM的一种优化机…

C# 日期转换“陷阱”

在 C# 中&#xff0c;日期转换可能会遇到一些陷阱。以下是一些常见的陷阱和如何避免它们&#xff1a; 时区问题 日期和时间通常与时区相关&#xff0c;但在转换时可能会忽略或混淆时区信息。确保在转换日期时始终考虑到时区&#xff0c;并使用正确的时区进行转换。 DateTime…

npm、pnpm和yarn 的区别

包管理工具是JavaScript开发中不可或缺的一部分&#xff0c;它们可以帮助我们方便地安装、更新、删除和管理项目所依赖的各种库和模块。 目前&#xff0c;最流行的包管理工具有npm、yarn和pnpm&#xff0c;它们各有各的特点和优劣势。 本文将试着对这三个工具进行全面的对比。…

Python-PyQt5树莓派上位机

Python-PyQt5树莓派上位机 一个使用PythonQT设计的树莓派的上位机&#xff0c;功能大概如下 1.笔记本电脑与树莓派的通讯是否成功显示&#xff08;给个信号显示判断是否通讯成功&#xff09;&#xff1b; 2.阈值的设置显示&#xff1b; 3.图像成像的显示&#xff1b; 4.是否发生…