本帖最后由 生无所息1 于 2013-10-22 21:57 编辑
存储器空间地址映像是一个很重要的概念,但是关于这个概念在你大脑的形成不是一秒钟就能好的。就像当初刚来到大学校园一样,哪儿是图书馆,哪儿是教学楼以及学校的后门和侧门有些什么新鲜的东西,这些都是我们探索过一段时间后才知道的。基于这个想法,在这关于存储器空间地址映像,我将只做整体的简要介绍 ,简要介绍并不是说它不重要。这是本芯片的一个“地图”,要时刻记着,走到一处陌生的地方要翻出来看看,揣摩揣摩就熟悉了。
先大体看看K60的资源模块图,心中先有个印象。
K60系列微控制器具有IEEE 1588以太网,全速和高速USB2.0 On-The-Go 带设备充电检测,硬件加密和防篡改探测功能,具有丰富的模拟、通信、定时和控制外设,从100LQPF封装256KB 闪存开始可扩展到256MAPBGA1MB闪存。大闪存的K60系列微控制器还提供可选的单精度浮点单元、NAND闪存微控制器和DRMA控制器。
ARM Cortex为32位处理器内核。内部的数据是32位的,寄存器也是32位的,存储器接口也是32位的。ARM Cortex-M4采用哈佛结构,拥有独立的数据总线和指令总线,从而提升了性能为实现这一特性ARM Cortex-M4内部含有好几条总线接口。
K60系列芯片内部有32根地址线低地址范围为0x0000_0000-----0xFFFF_FFFF.从学习的角度,我们因该了解程序及变量等资源存放情况。
1.中断向量,程序代码及常量的存放地址。
中断向量表,程序代码及常量存放于flash中。K60的中断向量表、程序常量、程序代码存放区是0X0000_0000到0x0FFF_FFFF。k60的程序代码编译链接后,中断向量表将从0X0000_0000开始存放,程序将从0x0000_0410开始存放,存放完代码后,常量随其后存放。MK60N512VMD100芯片的实际flash存储空间大小是512K,其地址范围是0x0000_0000到0x0007_FFFF.中断向量表,程序代码、常量的实际存放地址,存放长度是不同的(在链接命令文件.lcf里面有定义)。
2.全局变量,局部变量的存放。
全局变量、局部变量存放于RAM中,K60系列微控制器的RAM地址空间分为两部分,第一部分被称为SRAM_L,地址范围是0x1800_0000到0x1FFF_FFFF,共128MB;第二部分称为SRAM_U,地址范围是0x2000_0000到0x200F_FFFF,共1MB。
MK60N512VMD100 芯片的实际RAM大小为128KB,其地址范围是0x1FFF_0000到0x2000_FFFF。在链接命令文件(.lcf)可以看到RAM地址空间分配情况。K60芯片初始化时将在flash区域0x0000_0000位置开始的中断向量表复制到RAM的起始位置0x1FFF_0000中,长度为0x410个字节(包含16字节的flash配置字段)。在此之后RAM存放用户Sdata、data、bss段等数据段,含义见链接命令文件(.lcf)。在这些数据段存放完后紧接着就是堆和栈地址空间,堆默认大小是4KB栈默认大小为1KB用户可通过链接命令文件(.lcf)自行配置大小。
在链接命令文件(.lcf)中应该将堆栈指针SP配置在实际RAM存储器的最高地址。进栈时堆栈指针SP向RAM低地址方向移动。出栈时,SP向RAM高地址方向移动。堆栈指针SP的最低两位永远是0,这意味着堆栈总是4字节对齐的。
|