存储器
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, 芯片的地址总线数量决定了芯片的存储空间,STM32由32根地址线,可访问的空间为2^32 = 4G (理论大小)
三总线:若要向内存写入一个数据,向控制总线传输写指令,地址总线上面传输内存地址,数据总线传输要写入内存的数据。
事实上存储器本身并不具备地址,将芯片理论上的地址分配给存储器,这就是存储器映射
已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。
*(unsigned int*)(0x4002 0410) = 0xFFFF;
16进制数表示一个地址,(unsigned int*)表示一个指针,即表示地址,给指针加上*,表示这个地址的值,即给0x40020410地址赋值为0xFFFF
单片机的自举,单片机的自举就是单片机的启动。通过BOOT1和BOOT0 引脚的电平值,可以选择将0x00000000-0x001FFFFF映射到不同的存储器上。
STM32中的FLASH和SRAM:
ROM(FLASH)的起始地址是0x8000000 512k的flash大小=512*1024=0x80000字节
RAM的起始地址为0x20000000 大小为 64*1024=0x10000字节
Code:程序所占用大小(Flash)
RO-data:定义的常量(Flash)
RW-data: 存放初始化为非0值的全局变量和静态变量。(SRAM和FLASH)
ZI-data: 存放未初始化及初始化为0的全局变量和静态变量。(SRAM)
堆区:在启动文件里分配,作为用户主动申请时的空间,如调用malloc()
栈区:在启动文件里分配,作为局部变量自动申请和释放空间的变量(也有说是编译器分配的空间)
全局区和静态区(bss+data):存放全局变量,静态变量的区域;其中bss段(ZI-data)存放未初始化的全局变量和静态变量;data段(RW-data)存放初始化后的全局变量和静态变量;
Code + RO Data:text段,即文字常量和程序代码区;
RW Data + ZI Data:bss段和data段,即全局变量和静态变量区;
Code + RO Data + RW Data:text段+data段组成总的ROM,即工程代码在flash里占的空间大小;不包含ZI Data是因为,它里面的数值是未初始化或初始化为0的,所以在启动系统的时候直接将这块RAM清0即可。而RW Data是在RAM中使用的,为什么需要存储到flash,是因为这部分变量都是有初始化值的,如果只存在RAM中,在掉电后数据就丢失了,所以需要在flash中存一份。
文章评论(0条评论)
登录后参与讨论