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

湖北省建设工程网站网站seo关键词优化技巧

湖北省建设工程网站,网站seo关键词优化技巧,公考在哪个网站上做试题,wordpress tob热门标签怎么用【STM32】内存管理 文章目录 【STM32】内存管理1、内存管理简介疑问:为啥不用标准的 C 库自带的内存管理算法?2、分块式内存管理(掌握)分配方向分配原理释放原理分块内存管理 管理内存情况 3、内存管理使用(掌握&#…

【STM32】内存管理

文章目录

  • 【STM32】内存管理
    • 1、内存管理简介
    • 疑问:为啥不用标准的 C 库自带的内存管理算法?
    • 2、分块式内存管理(掌握)
      • 分配方向
      • 分配原理
      • 释放原理
      • 分块内存管理 管理内存情况
    • 3、内存管理使用(掌握)
      • 操作步骤
      • 内存池
      • 内存管理表

1、内存管理简介

如何在LCD 上面实现SD卡文件浏览?

需要读取所有文件名到内存,然后显示到LCD。一般的方法,是定义一个数组来存储所有文件名

1,需要知道最大文件名的长度。255字节。

2,需要知道文件个数。 100?1000?10000 ?

如果没有内存管理:则要定义一个:uint8_t filenametbl[10000][255]; 的数组!(占用2550K字>节内存

内存管理,是指软件运行时对MCU内存资源的分配和使用的技术。(内存的大管家)

其最主要目的是:如何高效,快速的分配,并且在适当的时候释放和回收内存资源。(防止内存泄露、内存碎片)

内存使用三部曲:1. 内存申请(分配) 2. 内存使用 3.内存释放

内存管理的实现方法有很多种,最终都是实现2个函数:malloc和free;

malloc内存申请
free内存释放

标准的 C 库也提供了函数 malloc()和函数 free()来实现动态地申请和释放内存 。

疑问:为啥不用标准的 C 库自带的内存管理算法?

因为标准 C 库的动态内存管理方法有如下几个缺点:

  • 占用大量的代码空间 不适合用在资源紧缺的嵌入式系统中
  • 没有线程安全的相关机制
  • 运行有不确定性,每次调用这些函数时花费的时间可能都不相同
  • 内存碎片化
  • ………

2、分块式内存管理(掌握)

分块式内存管理由内存池和内存管理表两部分组成。内存池被等分为n块,对应的内存管理表,大小也为n,内存管理表的每一个项对应内存池的一块内存。

内存管理表的项值代表的意义:当该项值为0时,代表对应的内存块未被占用;当该项值非零时,代表该项对应的内存块已经被占用,其数值则代表被连续占用的内存块数。

当内存管理刚初始化的时候,内存管理表全部清零,表示没有任何内存块被占用。

分配方向

分配原理

当指针p调用malloc申请内存时,

① 先判断p要分配的内存块数(m)

② 从第n项开始,向下查找,直到找到m块连续的空内存块(即对应内存管理表项为0)

③ 将这m个内存管理表项的值都设置为m(标记被占用)

④ 把最后的这个空内存块的地址返回指针p,完成一次分配

注意:如果当内存不够时(找到最后也没有找到连续m块空闲内存),则返回NULL给p,表示分配失败。

释放原理

当指针p申请的内存用完,需要释放的时候,调用free函数实现。

free函数实现:

① 先判断p指向的内存地址所对应的内存块

② 找到对应的内存管理表项目,得到p所占用的内存块数目m

③ 将这m个内存管理表项目的值都清零,标记释放,完成一次内存释放

分块内存管理 管理内存情况

3、内存管理使用(掌握)

操作步骤

1、初始化内存

内存管理控制器 struct _m_malloc_dev
外扩SRAM 需初始化(内部SRAM不需要)
内存管理表 清零	void my_mem_init(uint8_t memx)

2、申请内存

void *mymalloc(uint8_t memx, uint32_t size)

3、操作内存

sprintf((char *)p, “Memory Malloc Test%03d”, i);

4、释放内存(用完,一定要释放)

void myfree(uint8_t memx, void *ptr)
/* 内存管理控制器 */
#define SRAMBANK 2 	/* 定义管理的内存片数*/
struct _m_mallco_dev
{void 		(*init)(uint8_t);			/* 函数指针,指向内存初始化函数,用于初始化内存管理 */uint8_t	(*perused)(uint8_t);		/* 函数指针,指向内存使用率函数,用于获取内存使用率 */uint8_t 	*membase[SRAMBANK]; 	/* 内存池指针,指向内存池 */uint16_t 	*memmap[SRAMBANK];  	/* 内存管理表指针,指向内存管理表 */uint8_t  	memrdy[SRAMBANK]; 		/* 内存管理表就绪标志,用于表示内存管理表是否已初始化 */
};
struct _m_mallco_dev mallco_dev
{my_mem_init,	my_mem_perused, 		mem1base, mem2base,		mem1mapbase, mem2mapbase,	0, 0,	
};MEMx_MAX_SIZE 		内存池中内存块大小
MEMx_ALLOC_TABLE_SIZE 	内存管理表中项数
/* 内存池 */
static __align(64) uint8_t mem1base[MEM1_MAX_SIZE];
static __align(64) uint8_t mem2base[MEM2_MAX_SIZE];
/* 内存管理表 */
static uint16_t mem1mapbase[MEM1_ALLOC_TABLE_SIZE];
static uint16_t mem2mapbase[MEM2_ALLOC_TABLE_SIZE];

内存池

uint8_t mem1base[MEM1_MAX_SIZE]
MEM1_ALLOC_TABLE_SIZE个内存块

内存管理表

uint16_t mem1mapbase[MEM1_ALLOC_TABLE_SIZE]
MEM1_ALLOC_TABLE_SIZE个项
项的大小为2字节

void my_mem_init(uint8_t memx)
{uint8_t mttsize = sizeof(MT_TYPE); 	/* 获取memmap数组的类型长度(uint16_t /uint32_t)*/my_mem_set(mallco_dev.memmap[memx], 0, memtblsize[memx] * mttsize);	/* 内存管理表数据清零 */mallco_dev.memrdy[memx] = 1;        	/* 内存管理初始化OK */
}
uint16_t my_mem_perused(uint8_t memx)
{uint32_t i, used = 0;for (i = 0; i < memtblsize[memx]; i++)if (mallco_dev.memmap[memx][i])used++;return (used * 1000) / (memtblsize[memx]);
}
void my_mem_set(void *s, uint8_t c, uint32_t count)
{uint8_t *xs = s;while (count--) *xs++ = c;
}

void *mymalloc(uint8_t memx, uint32_t size)
{uint32_t offset; 	offset = my_mem_malloc(memx, size);if (offset == 0xFFFFFFFF) return NULL;	/* 申请出错 */else return (void *)((uint32_t)mallco_dev.membase[memx] + offset);	/* 申请没问题,返回首地址 */
}
uint32_t my_mem_malloc(uint8_t memx, uint32_t size)
{/* 1、判断内存块memx是否已经初始化 *//* 2、通过size获取需要分配的连续内存块数x *//* 3、搜索符合 要求内存块数x 的内存块 *//* 4、找到符合要求内存块数区域,对其管理表写入内存块数的值x,返回偏移地址 */
}

http://www.dtcms.com/wzjs/177298.html

相关文章:

  • 如何 套用模板做网站百度一下官网搜索引擎
  • 广州购物网站建设互联网推广是什么工作内容
  • 开发建设网站百度排名点击软件
  • 网站制作中心域名注册平台哪个好
  • 抖音优化排名吉安seo
  • 给小孩做辅食的网站排名优化哪家好
  • 乡镇中心小学校园网站建设指南促销方案
  • 真正免费申请一级域名成都seo优化公司
  • 外包网站建设公司网站前期推广
  • 深圳市南山区做网站的小公司农业推广
  • 昆山玉山网站建设seo百度快速排名
  • 网站建设 上海网站今日的最新新闻
  • 西安营销型网站制作价格石家庄头条今日头条新闻
  • 做盗版网站 国外服务器seo公司上海牛巨微
  • 建设官方网站e路护航成都最新疫情
  • 网站后台无法更新缓存石家庄百度搜索引擎优化
  • 在哪个网站去租地方做收废站企业网站优化报告
  • 网站代理访问是什么意思免费网站可以下载
  • 科技部做财务决算的网站是什么uc推广登录入口
  • 网站怎么看是谁做的做外贸网站的公司
  • 牛商网抖音培训网站推广seo
  • 公司自己做网站流程和备案如何宣传推广
  • 驻马店网站优化百度快照推广
  • 什么设计师前景最好关键词优化推广
  • 江苏省句容建设局网站北京广告公司
  • 如何在对方网站上做外链百度推广个人怎么开户
  • 财务公司的主要业务关键词优化策略有哪些
  • 新手做网站详细步骤手机怎么制作网页
  • 做网站用python好还是PHP好营销型网站建设案例
  • b2c电子商务网站关键技术前端seo是什么意思