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

µCOS-III从入门到精通 第十五章(µC/OS-III内存管理)

参考教程:【正点原子】手把手教你学UCOS-III实时操作系统_哔哩哔哩_bilibili

一、µC/OS-III内存管理介绍

1、概述

(1)内存管理是指软件运行时对内存资源的分配和使用的一种技术,其最主要的目的就是为了能够高效且快速地分配,并且在释放的时候释放不再使用的内存空间。

(2)标准C库的动态内存管理方法的缺点:

①占用大量的代码空间,不适合用在资源紧缺的嵌入式系统中。

②没有线程安全的相关机制。

③运行有不确定性,每次调用这些函数时花费的时间可能都不相同。

④有内存碎片化的现象(内存碎片是在多次申请和释放内存的过程中产生的)。

2、µC/OS-III的内存管理方式

(1)µC/OS-III提供了一个内存管理的方案,将一块大内存作为一个内存区,一个内存区中有多个大小均相同的内存块组成。

①由于每个内存块大小相同,所以分配时间一定。

②内存块大小相同,所以申请以及释放内存时不会产生内存碎片。

(2)用户可以根据实际的需求,创建多个不同的内存区(用户需保证内存区不被释放),每个内存区中内存块的数量和大小都可以是不同的,完全由实际的需求决定。

举例:

        static uint8_t buffer[10][32];

        //表示一个具有10个内存块,且每个内存块大小为32字节的内存区

二、µC/OS-III内存管理相关结构体及相关API函数介绍

1、µC/OS-III内存管理相关结构体

struct  os_mem
 {
	void*				AddrPtr;				/* 指向内存区起始地址指针  */   
	void	*				FreeListPtr;         	/* 指向空闲的内存块链表指针 */
	OS_MEM_SIZE		BlkSize;             /* 单个内存块的大小 */    
	OS_MEM_QTY		NbrMax;       		/* 内存区中内存块的总量 */    
	OS_MEM_QTY       NbrFree;		  		/* 内存区中空闲内存块数量 */ 
	… …
};

2、µC/OS-III内存管理相关API函数

(1)µC/OS-III内存管理相关API函数概览:

函数

描述

OSMemCreate

创建一个内存区

OSMemGet

从内存区中获取一个内存块

OSMemPut

释放内存块到内存区中

(2)OSMemCreate函数:

void OSMemCreate
(
    OS_MEM* 		p_mem,
	CPU_CHAR* 	p_name,
	void* 			p_addr,
	OS_MEM_QTY 	n_blks,
	OS_MEM_SIZE 	blk_size,
	OS_ERR* 		p_err
) 

形参

描述

p_mem 

指向内存区结构体的指针

p_name 

指向作为内存区名的ASCII字符串的指针

p_addr 

指向内存区起始地址的指针

n_blks 

内存区中内存块的数量

blk_size 

内存区中内存块的大小

p_err 

指向接收错误代码变量的指针

(3)OSMemGet函数:

void *OSMemGet  //返回内存块的起始地址,如果返回NULL则代表申请失败
(
    OS_MEM*	 p_mem, 
    OS_ERR* 	p_err
) 

形参

描述

p_mem 

指向内存区结构体的指针

p_err 

指向接收错误代码变量的指针

(4)OSMemPut函数:

void OSMemPut
(
    OS_MEM* 	p_mem , 
	void* 		p_blk , 
	OS_ERR* 	p_err
) 

形参

描述

p_mem 

指向内存区结构体的指针

p_blk

待释放的内存块

p_err 

指向接收错误代码变量的指针

相关文章:

  • windows 下用docker 部署nginx
  • 蓝桥杯 3514子串简写
  • 【python】一文掌握 Conda 指令 (anaconda备忘清单)
  • 【每日学点HarmonyOS Next知识】防截屏、加载不同View、函数传参、加载中效果、沉浸式底部状态栏
  • 第八节:红黑树(初阶)
  • 容易混淆的概念:requests 库 和 Flask 的 request
  • 【3DMAX科研绘图】3DMAX晶体网络插件CrystalNet使用方法
  • 【VUE2】第四期——路由
  • JavaScript如何实现复制图片功能?
  • C语言【数据结构】:理解什么是数据结构和算法(启航)
  • 【从零开始学习计算机科学】数据库系统(七)并发控制技术
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.2成本优化与冷热数据分离
  • 什么是SpringCloud?为何要选择SpringCloud?
  • 计算机视觉|首次写入政府工作报告!这个科技新词“具身智能”到底是什么?
  • PHP批量去除Bom头的方法
  • Linux——进程(2)进程的状态
  • 《ECharts :不强不大,做点可视化》
  • AI本地部署
  • Flutter 按钮组件 TextButton 详解
  • 《探秘人工智能与鸿蒙系统集成开发的硬件基石》
  • 哈尔滨网站建设信息/关键的近义词
  • 网站关闭备案/网页设计师
  • 网站UI怎么做/口碑营销有哪些
  • 买公司的网站建设/郑州网络推广排名
  • 自己开发app的软件下载/seo提供服务
  • glitch做网站/青岛seo计费