Presentation is loading. Please wait.

Presentation is loading. Please wait.

《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:

Similar presentations


Presentation on theme: "《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:"— Presentation transcript:

1 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺: 技术论坛: 开源电子网 公众平台:“正点原子” 官方网站: 联系电话: ddddd ALIENTEK 淘宝店铺: 技术论坛:

2 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
《手把手教你学STM32》 内存管理实验 适用平台 STM32 开发板 (正点原子) ddddd 淘宝店铺: 技术论坛:

3 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
本视频重点参考资料 参考资料: 1,战舰/精英STM32F1开发板 《STM32F1开发指南-库函数版本》 内存管理实验 2,miniSTM32F1开发板 《STM32不完全手册-库函数版本》 内存管理实验 3,探索者STM32F4开发板 《STM32F4开发指南-库函数版本》 内存管理实验 4,FSMC参考资料 《STM32中文参考手册_V10》-第19章 灵活的静态存储器控制器(FSMC) 《STM32F4xx中文参考手册》-第32章 灵活的静态存储控制器(FSMC) 淘宝店铺: 技术论坛:

4 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
目录 SRAM简介 1 内存管理简介 1 硬件连接 2 硬件连接 2 源码讲解&例程测试 3 淘宝店铺: 技术论坛:

5 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、内存管理简介-一个问题? 如何在LCD上面实现SD卡文件浏览? 需要读取所有文件名到内存,然后显示到LCD。一般的方法,是定义一个数组来存储所有文件名。 1,需要知道最大文件名的长度。255字节。 2,需要知道文件个数。 100?1000?10000 ? 如果没有内存管理: 则要定义一个:u8 filenametbl[10000][255];的数组!! 要2550K字节内存。。。 MCU表示压力山大….. 淘宝店铺: 技术论坛:

6 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、内存管理简介-什么是内存管理? 内存管理,是指软件运行时对MCU内存资源的分配和使用的技术。 其最主要的目的是:如何高效,快速的分配,并且在适当的时候释放和回收内存资源。内存管理的实现方法有很多种,他们其实最终都是要实现2个函数:malloc和free;malloc函数用于内存申请,free函数用于内存释放。 淘宝店铺: 技术论坛:

7 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、内存管理简介-分块式内存管理 分块式内存管理——原理 分块式内存管理由内存池和内存管理表两部分组成。内存池被等分为n块,对应的内存管理表,大小也为n,内存管理表的每一个项对应内存池的一块内存。 内存管理表的项值代表的意义:当该项值为0的时候,代表对应的内存块未被占用,当该项值非零的时候,代表该项对应的内存块已经被占用,其数值则代表被连续占用的内存块数。比如某项值为10,那么说明包括本项对应的内存块在内,总共分配了10个内存块给外部的某个指针。 内寸分配方向:是从顶底的分配方向。即首先从最末端开始找空内存。当内存管理刚初始化的时候,内存管理表全部清零,表示没有任何内存块被占用。 淘宝店铺: 技术论坛:

8 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、内存管理简介-分块式内存管理 分块式内存管理——分配原理 当指针p调用malloc申请内存的时候,先判断p要分配的内存块数(m),然后从第n项开始,向下查找,直到找到m块连续的空内存块(即对应内存管理表项为0),然后将这m个内存管理表项的值都设置为m(标记被占用),最后,把最后的这个空内存块的地址返回指针p,完成一次分配。注意,如果当内存不够的时候(找到最后也没找到连续的m块空闲内存),则返回NULL给p,表示分配失败。 淘宝店铺: 技术论坛:

9 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
1、内存管理简介-分块式内存管理 分块式内存管理——释放原理 当指针p申请的内存用完,需要释放的时候,调用free函数实现。free函数先判断p指向的内存地址所对应的内存块,然后找到对应的内存管理表项目,得到p所占用的内存块数目m(内存管理表项目的值就是所分配内存块的数目),将这m个内存管理表项目的值都清零,标记释放,完成一次内存释放。 淘宝店铺: 技术论坛:

10 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
2、硬件连接 本实验,ALIENTEK所有开发板在硬件上都不需要做任何处理。开发板本身都已经连接好了这些硬件(主要是按键、LCD、外部SRAM等) 本实验,只有战舰V3和探索者STM32F4的例程,有外部SRAM,Mini板,精英板都是没有外扩SRAM的。 各开发板的具体硬件连接请参考对应开发板原理图,实验功能介绍,请看对应文档教程《STM32F1开发指南》/《STM32F4开发指南》/《 STM32不完全手册》内存管理实验的硬件设计部分。 淘宝店铺: 技术论坛:

11 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
3、源码讲解&例程测试-源码说明 1,Mini V3 STM32F103开发板源码 光盘程序源码标准例程(库函数/寄存器)实验27 内存管理实验 2,精英STM32F103开发板源码 光盘程序源码标准例程(库函数/寄存器)实验34 内存管理实验 3,战舰V3 STM32F103开发板源码 光盘程序源码标准例程(库函数/寄存器)实验37 内存管理实验 4,探索者STM32F407开发板源码 淘宝店铺: 技术论坛:

12 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
3、源码讲解&例程测试-内存管理控制结构体 //内存管理控制器 struct _m_mallco_dev { void (*init)(u8); //初始化 u8 (*perused)(u8); //内存使用率 u8 *membase[SRAMBANK]; //内存池 管理SRAMBANK个区域的内存 u16 *memmap[SRAMBANK]; //内存管理状态表 u8 memrdy[SRAMBANK]; //内存管理是否就绪 }; extern struct _m_mallco_dev mallco_dev;//在mallco.c里面定义 SRAMBANK定义管理的内存片数 init,函数指针,指向内存初始化函数,用于初始化内存管理,带一个参数(Mini板不带) ,表示要初始化的内存片。 perused,函数指针,指向内存使用率函数,用于获取内存使用率,,带一个参数(Mini板 不带),表示要获取内存使用率的内存片。 membase,内存池指针,指向内存池。最多有SRAMBANK个内存池(Mini板仅一个)。 memmap,内存管理表指针,指向内存管理表。最多有SRAMBANK个内存管理表(Mini 板仅一个)。该指针为16位类型,因此,最大可以分配65535*内存块这么大的内存区域。 假定内存块大小为32字节,那么一次性最大可以申请的内存就是2M-32字节。 memrdy,内存管理表就绪标志,用于表示内存管理表是否已经初始化(清零)。最多有 SRAMBANK个内存管理表就绪标志(Mini板仅一个)。 淘宝店铺: 技术论坛:

13 3、源码讲解&例程测试-内存管理宏定义 内存管理宏定义—MiniSTM32F103开发板
MEM_BLOCK_SIZE:内存块大小。内存分配时的最小单元。 MEM_MAX_SIZE:内存池大小。也就是管理的内存区域大小。 MEM_ALLOC_TABLE_SIZE:内存表大小。 计算公式:MEM_ALLOC_TABLE_SIZE=MEM_MAX_SIZE÷MEM_BLOCK_SIZE 所以,管理MEM_MAX_SIZE大小的内存,总共所需内存大小为: MEM_MAX_SIZE+MEM_ALLOC_TABLE_SIZE*2(字节) 总共:42* *2 字节 淘宝店铺: 技术论坛:

14 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
3、源码讲解&例程测试-内存管理宏定义 内存管理宏定义—战舰V3 STM32F103开发板 战舰V3开发板外扩了SRAM,所以有2片内存区域,MEM1表示内部内存池(64K字节),MEM2表示外扩内存池(1024K字节)。 淘宝店铺: 技术论坛:

15 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
3、源码讲解&例程测试-内存管理宏定义 内存管理宏定义—精英STM32F103开发板 精英版没有外扩SRAM,所以有仅有片内内存区域,MEM1表示内部内存池(64K字节),MEM2虽然定义了,但是并不可用,使用时需要注意!! 淘宝店铺: 技术论坛:

16 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
3、源码讲解&例程测试-内存管理宏定义 内存管理宏定义—探索者STM32F407开发板 探索者开发板外扩了SRAM,同时片内有SRAM和CCM之分,所以有3片内存区域,MEM1表示内部SRAM内存池(128K字节),MEM2表示外扩内存池(1024K字节)。MEM3表示内部CCM内存池(64K字节) 淘宝店铺: 技术论坛:

17 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
3、源码讲解&例程测试-内存管理数组参数 内存管理数组参数—MiniSTM32F103开发板 membase:内存池。u8类型,4字节对齐。 memmapbase:内存管理表。u16类型。 memtblsize:内存表大小。 memblksize:内存分块大小。 memsize:内存总大小。 淘宝店铺: 技术论坛:

18 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
3、源码讲解&例程测试-内存管理数组参数 内存管理数组参数—战舰V3/精英 STM32F103开发板 mem1base:内部内存池。u8类型,32字节对齐。 mem2base:外部内存池。u8类型,32字节对齐。 mem1mapbase:内部内存管理表。u16类型。 mem2mapbase:外部内存管理表。u16类型。 memtblsize:内存表大小。 memblksize:内存分块大小。 memsize:内存总大小。 淘宝店铺: 技术论坛:

19 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
3、源码讲解&例程测试-内存管理数组参数 内存管理数组参数—探索者STM32F407开发板 mem1base:内部SRAM内存池。u8类型,32字节对齐。 mem2base:外部SRAM内存池。u8类型,32字节对齐。 mem3base:内部CCM内存池。u8类型,32字节对齐。 mem1mapbase:内部SRAM内存管理表。u16类型。 mem2mapbase:外部SRAM内存管理表。u16类型。 mem3mapbase:内部CCM内存管理表。u16类型。 memtblsize:内存表大小。 memblksize:内存分块大小。 memsize:内存总大小。 淘宝店铺: 技术论坛:

20 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
3、源码讲解&例程测试-内存管理函数 1, my_mem_init函数 2, my_mem_perused函数 3, mymalloc函数 4, myfree函数 淘宝店铺: 技术论坛:

21 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
3、源码讲解&例程测试-main函数 ALIENTEK各开发板(F1/F4),本例程main函数都大同小异,代码十分类似。 重点以战舰V3 本例程的main函数为例讲解,其他开发板参考着看即可。 淘宝店铺: 技术论坛:

22 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
3、源码讲解&例程测试-例程测试 例程测试 淘宝店铺: 技术论坛:

23 淘宝店铺:http://eboard.taobao.com 技术论坛:www.openedv.com
谢谢您对“正点原子”团队的支持 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺: 技术论坛: 淘宝店铺: 技术论坛:


Download ppt "《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:"

Similar presentations


Ads by Google