ucos内存管理方法十分小巧,实时性好,非常值得借鉴。大致原理如下:
ucos把内存初始化成相同大小的内存块,使用单向链表的方式连接起来,使用时从链表摘下,释放时重新插入链表。
当然可以存在多条链表,根据用户需求配置,同一个链表内内存块是相同大小的。比如,以100或200字节为内存块的内存链表。
每条内存链表使用一个结构体(os_mem)控制,这个结构体描述了这一条链表中的内存属性,比如内存块大小,剩余内存块的数量,内存块总数量等等。
1、
此函数由系统内部调用,用户不必理会,主要是一些初始化动作,前面说了每条链表都有一个结构体os_mem控制。
ucos建立了一个os_mem结构体数组,这个函数就是把这个结构体数组成员使用单向链表连接起来,并且对结构体进行初始化。
ucos使用一个全局指针指向表头,方便结构体取用。每一个结构体都可以控制一个内存链表。结构体数量用户可以通过宏定义配置。
2、
此函数初始化并创建内存块链表。主要过程是从结构体链表中取下一个空闲结构体。根据参数提供的内存起始地址和内存块大小,把整个内存分为大小一致的内存块,使用单向链表连接起来。
再把内存块链表的属性信息填写到结构体中。此函数返回一个结构体指针。找到这个结构体就找到了这条链表。
3、
根据os_mem类型指针找到对应的链表结构体,如果空闲的内存块数量大于0,那么从链表中摘下一个内存块,然后修改os_mem结构体信息,返回内存首地址。
4、
这个简单,获得内存块链表的名称。
5、
这个简单,设置内存块链表的名称。
6、
释放内存,把用完的内存块,插入pmem对应的链表中,然后修改pmem结构体信息。
7、
查询指定的内存链表中的内存使用情况,查询结果放在os_mem_data 结构体中。
优点:
仔细阅读源码就会发现,每次取出内存块的时间是一样的,速度非常快,放入内存块消耗的时间也是一样,运行时间可控,实时性非常好,代码量很小。
缺点:
每条链表中的内存块都是一样大小,使用时会有些浪费。
PROFINET调试时Ping指令使用详解
2019世界智能网联汽车大会即将举行,万余平方米场地演示自动驾驶
李在镕正式就任三星电子会长
自动驾驶汽车“眼中”的世界是怎样的?
爱特梅尔推出功能丰富的下一代有源AM/FM天线IC
uC/OS-II内存管理方法详解
红米Note7Pro值不值得买
了解影响光纤跳线管理的主要因素避免出现-科兰
坚果TNT评测:关于个人电脑的革命不止锤子一家
十层 八层 多层 PCB,你很头晕吧?
Skyworks:Q1财季营收将低于预期,华为Mate 60没有带来太大影响
新基建的浪潮之下,如何推动5G行业应用的落地发展
中国与国外相比较光刻工艺差别到底在哪里
安科瑞电气防火式限流保护器ASCP200微秒速度实现灭弧保护
ECG信号数字化处理技术
创新技术实现低功率MCU设计
新能源汽车前景如何
茂睿芯通用CAN MCAN1042:高性能、低功耗的CAN收发器
专家点评:Xilinx最新处理器Zynq的四大突破
30年?差距太大了!2023年了中国传感器最落后的竟然是…