1.理解什么是内存和IO统一编址
2.知道STM32的4G内存是如何使用的
3.理解变量和内存的关系
4.理解对齐编址的必要性
下面进入正文:
1.因为内存和IO统一编址,所以你可以直接操控寄存器来让IO口工作,这是由硬件决定的。编址的工作由地址线来完成,STM32有32根地址线,故最多可寻址4G的空间。
2.下面是4G内存空间的地址映射(好多空间用不到,保留)
程序存储器、数据存储器、寄存器和IO端口被组织到一个4G字节的线性地址空间
可寻址的存储器空间被分成8个512兆的主块
所有未被分配给片上存储器或外设的存储器区域被视为是保留的
0X08000000 - 0X0801FFFF FLASH
0X1FFFF000 - 0X1FFFF800 SYSTEMMEMORY
0X1FFFF800 - 0X1FFFF9FF OPTION BYTES
寄存器边界地址如下:
3.变量和内存的关系
char(字节型变量)a;
无论在哪个CPU都是分配固定8bit的字节空间
假设起始内存地址为0X00008000,则a就占0X00008000这一个空间
如果是int b;
假设起始地址还是0X00000800,那么b占0X00000800;0X00000801;0X00000802;0X00000803这四个地址空间
没错,内存编址是以字节为单位,这是个规定,在任何一款CPU上都是如此。
这里的int(整型变量)也有必要说一下,它在不同的CPU上所占的地址空间不同,例如在51上,就只有2字节,其实它取决于CPU的地址线数!
4.对齐编址和非对齐编址
STM32是以4个地址为单位对齐编址的,如果选别的就为非对齐编址,因为只有4个地址为一个单位刚好可以照顾到地址线,4×8=32嘛!如果不对齐编址,你定义一个整形变量就不方便寻址!这里顺便说一下,在32中尽量多定义整形变量这样可以提高CPU的效率。不要担心内存,你用不完的