原创 STM32存储

2023-9-1 15:35 773 8 5 分类: MCU/ 嵌入式 文集: 单片机

存储器

1G=1024M     1M=1024K    1K(B)=1024Byte(字节)    1Byte=8bit()

16位系统中:1=2字节(byte)=16bit

32位系统中:1=4字节(byte)=32bit

64位系统中:1=8字节(byte)=64bit

STM32表示CPU能处理的数据位宽为32bit,  芯片的地址总线数量决定了芯片的存储空间,STM3232根地址线,可访问的空间为2^32 = 4G (理论大小)

 三总线:若要向内存写入一个数据,向控制总线传输写指令,地址总线上面传输内存地址,数据总线传输要写入内存的数据。


事实上存储器本身并不具备地址,将芯片理论上的地址分配给存储器,这就是存储器映射

已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。

*(unsigned int*)(0x4002 0410) = 0xFFFF;

16进制数表示一个地址,(unsigned int*)表示一个指针,即表示地址,给指针加上*,表示这个地址的值,即给0x40020410地址赋值为0xFFFF

 


单片机的自举,单片机的自举就是单片机的启动。通过BOOT1BOOT0 引脚的电平值,可以选择将0x00000000-0x001FFFFF映射到不同的存储器上。

 

STM32中的FLASHSRAM

ROMFLASH)的起始地址是0x8000000 512kflash大小=512*1024=0x80000字节

RAM的起始地址为0x20000000 大小为 64*1024=0x10000字节

Code:程序所占用大小(Flash

RO-data:定义的常量(Flash

RW-data: 存放初始化为非0值的全局变量和静态变量。(SRAMFLASH

ZI-data: 存放未初始化及初始化为0的全局变量和静态变量。(SRAM

 

堆区:在启动文件里分配,作为用户主动申请时的空间,如调用malloc()

栈区:在启动文件里分配,作为局部变量自动申请和释放空间的变量(也有说是编译器分配的空间)

全局区和静态区(bss+data):存放全局变量,静态变量的区域;其中bss(ZI-data)存放未初始化的全局变量和静态变量;data(RW-data)存放初始化后的全局变量和静态变量;

 

Code + RO Datatext段,即文字常量和程序代码区;

RW Data + ZI Databss段和data段,即全局变量和静态变量区;

Code + RO Data + RW Datatext+data段组成总的ROM,即工程代码在flash里占的空间大小;不包含ZI Data是因为,它里面的数值是未初始化或初始化为0的,所以在启动系统的时候直接将这块RAM0即可。而RW Data是在RAM中使用的,为什么需要存储到flash,是因为这部分变量都是有初始化值的,如果只存在RAM中,在掉电后数据就丢失了,所以需要在flash中存一份。

 

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /2 下一条