【STM32H743】内存管理

STM32自身的Flash架构包括1060KB的用户Flash模块,包括8个128K的用户扇区和128KB的系统Flash。如果要增大H743的内存,则需要外扩SDRAM满足需要。

内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。

他们其实最终都是要实现 2 个函数: malloc 和 free; malloc 函数用于内存申请, free 函数用于
内存释放。

内存管理方法——分块式内存管理

分块式内存管理由内存池内存管理表两部分组成。

内存池被等分为 n块,对应的内存管理表,大小也为 n,内存管理表的每一个项对应内存池的一块内存。
内存管理表的项值代表的意义为:当该项值为 0 的时候,代表对应的内存块未被占用,当该项值非零的时候,代表该项对应的内存块已经被占用,其数值则代表被连续占用的内存块数。比如某项值为 10,那么说明包括本项对应的内存块在内总共分配了 10 个内存块给外部的某个指针。

内寸分配方向如图所示,是从顶→底的分配方向。即首先从最末端开始找空内存(也就是第n项)。当内存管理刚初始化的时候,内存表全部清零,表示没有任何内存块被占用。

内存分配原理

当指针 p 调用 malloc 申请内存的时候,先判断 p 要分配的内存块数( m),然后从第 n 项(自末端向顶端)开始,向下查找,直到找到 m 块连续的空内存块(即对应内存管理表项为 0),然后将这 m 个内存管理表项的值都设置为 m(标记被占用),最后,把最后的这个空内存块的地址返回指针 p,完成一次分配。注意,如果当内存不够的时候(找到最后也没找到连续的 m 块空闲内存),则返回 NULL 给 p,表示分配失败。

 内存释放原理

当 p 申请的内存用完,需要释放的时候,调用 free 函数实现。 free 函数先判断 p 指向的内存地址所对应的内存块,然后找到对应的内存管理表项目,得到 p 所占用的内存块数目 m(内存管理表项目的值就是所分配内存块的数目),将这 m 个内存管理表项目的值都清零,标记释放,完成一次内存释放。

以太网的 DMA 描述符等必须是定义在 SRAM3 里面才可以正常工作,因此我们一般把SRAM3( 32KB)独立给以太网使用

如果对一个指针进行多次内存申请,而之前的申请又没释放,那么将造成“内存泄露”,这是内存管理所不希望发生的,久而久之,可能导致无内存可用的情况!所以,在使用的时候,一定记得,申请的内存在用完以后,一定要释放。

### 回答1: STM32H743是一款高性能、高集成度的微控制器,具有灵活的内存映射。它的内存映射方案如下: 1. Flash存储器:STM32H743具有多个Flash存储器扇区,用于存储程序代码和数据。其中一部分区域是用于存放读写操作的代码和数据,另一部分区域是用于存放只读操作的代码。 2. SRAM存储器:SRAM用于存储程序数据和变量。STM32H743具有多个SRAM存储器,包括系统存储器和备份存储器。系统存储器用于执行程序代码和存储变量,备份存储器用于保存系统的状态和数据。 3. 外设寄存器:STM32H743具有丰富的外设模块,这些外设模块通过内存映射方式与内存连接。每个外设都有一组寄存器,用于控制和配置外设的功能。通过访问这些寄存器,可以配置外设的工作模式和参数。 4. DMA控制器:DMA(直接内存访问)控制器也是通过内存映射方式与内存相连。它允许外设和存储器之间直接进行数据传输,减轻了CPU的负担。通过访问DMA控制器的寄存器,可以配置和控制DMA传输的参数和工作模式。 5. 外部存储器:STM32H743还支持外部存储器的连接,如SDRAM、NAND Flash等。这些外部存储器也是通过内存映射方式进行访问。 总的来说,STM32H743的内存映射方案将Flash、SRAM、外设寄存器、DMA控制器和外部存储器等模块通过地址映射到内存空间中,使得它们可以被代码直接访问和控制。这种灵活的内存映射方案为开发者提供了方便的硬件编程接口,使得开发和调试过程更加高效和简单。 ### 回答2: STM32H743是意法半导体(STMicroelectronics)推出的一款高性能微控制器,具有丰富的外设和较大的内存容量,其内存映射如下: 首先,STM32H743具备了多种类型的内存。首先是Flash存储器,它用于存储程序代码和常量数据。STM32H743具有2MB的Flash存储器,其中一部分用于存储固件启动程序(BootLoader),其余部分用于用户程序代码。 接下来是SRAM存储器,用于存储运行时数据。STM32H743配备了1MB的SRAM存储器,可根据需要分配给不同的数据段,如栈、堆和全局变量。 此外,STM32H743还具有Tightly Coupled Memory(TCM),是一种特殊类型的SRAM存储器,它与CPU之间的访问速度更快。STM32H743提供了512KB的TCM存储器,可以用于高速数据处理和执行关键代码。 另外,STM32H743还具备外部SDRAM(Synchronous Dynamic Random Access Memory)存储器接口,可以扩展额外的存储容量。这对于需要大量存储空间的应用程序来说非常有用。 除了存储器的类型,STM32H743还采用了一种特殊的地址空间布局。它将不同类型的存储器映射到不同的地址范围。例如,Flash存储器映射到地址范围0x0800 0000-0x081F FFFF,SRAM存储器映射到地址范围0x2000 0000-0x200F FFFF等。这种地址映射方案方便了程序的访问和管理。 总的来说,STM32H743的内存映射提供了多种类型的存储器,包括Flash存储器、SRAM存储器、TCM存储器和外部SDRAM存储器接口,可以满足不同应用场景对存储容量和存储速度的需求。同时,合理的地址映射方案也方便了程序员对存储器的访问和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值