热度 36
2012-4-4 12:34
4258 次阅读|
4 个评论
LPC2136的内存结构 前面的两个程序“跑马灯”和“蜂鸣器”是你嵌入式职业生涯的一个美好开端,之所以先运行程序,然后讲理论知识,是为了通过实验让学生产生兴趣,再通过实验引出理论知识。 我举一个我曾经学吉他的例子:我读中学的时候有一次去我外婆家,看到我一个舅舅拿着吉他在拨弄,我第一次看到这种乐器,而且第一次被这么优美的声音吸引。上大学第一个学期,我就买了吉他,但是我发现所有吉他教科书上都是从那些枯燥无味的五线谱和指法开始。到吉他老师哪里去听课,也是从这些枯燥无味的东西开始。如果不是狂热爱好者,从一开始就练这些枯燥的东西是坚持不下去的。为什么这么做的,教科书和老师都是说,如果一开始不练指法,就开始弹歌曲会把手型搞坏,后来纠正起来很麻烦。 可是,对吉他的热爱,使我买了吉他后第一件事就是弹一只歌曲,而不是练那些枯燥无味的五线谱和指法!我这样做的目的,第一是让我感觉到自己能用吉他弹唱歌曲的成就感,同时在宿舍,班级同学中有种自豪感。 我当时练了两只歌,一首是单玄《其实你不懂我的心》,另一首是扫玄《对面的女孩看过来》。我把这两首歌练好后,才开始练指法,指法确实是枯燥无味的,但必须坚持,我就是在练指法累了,乏味了的时候弹唱一曲来进行调节坚持下去的。当时,有几个宿舍同学也买了吉他,但是没有一个坚持下去的。 LPC2136是ARM7架构,是32位地址总线和数据总线,可以寻址的范围为2的32次方=4GB(0x00000000~0xFFFFFFFF) 我们的程序在哪里运行? 还记得我们在做“跑马灯”和“蜂鸣器”两个实验,用ads1.2中建立工程文件的时候有设置三个地址: RO Base :0x40000000 RW Base :0x40001000 Image entry point :0x40000000 开始没有讲为什么,通过上面的系统存储器映射图解不知大家是否有所悟。LPC2136内部自带32KB RAM和256KB FLASH。 32KB RAM分布在整个CPU存储器空间的0x40000000~0x40007FFF; 256KB FLASH分布在整个CPU存储器空间的0x00000000~0x0003 FFFF; RO Base是告诉编译系统把编译生成的目标码放在0x40000000起始的位置,也就是代码段存放在0x40000000开始的位置。 RW Base告诉编译系统把各种变量(常量放在RO开始的位置),堆栈放在0x40001000起始的位置。 Image entry point:是告诉编译系统程序入口点在0x40000000,即程序从这个地址开始执行。(此部分在附录二中细说) Flash与RAM的区别 通过以上所说,好像FLASH在这里没什么用,如果你的RO地址定位在RAM中,那么FLASH确实没有用。但FLASH是必须的功能部件。 Flash的作用也许要从其与RAM的区别说起: 区别一:RAM是易失性存储器,Flash是非易失性存储器。通俗的说,存储在RAM中的数据掉电后数据丢失;而存储在FLASH中的数据掉电后任然保持。(必须通过工具或特殊命令来擦除) 区别二:RAM是可读写存储器,Flash只读存储器。(也许有人要问,Flash难道不能写吗?Flash可以写,但不能象RAM一样做简单赋值操作,必须通过Flash写命令写,而且写入数据的最小单位为512字节,即一个扇区) 区别三:RAM访问速度快,而Flash访问速度慢的多。 区别四:RAM价格昂贵,Flash便宜。 FLASH有何用途 我们一般在调试程序的时候为了提高开发进度,都把程序放在RAM中调试,在RAM中调试有一个缺陷就是每次上电必须下载程序到板子上,当产品的各个模块调试OK,产品就要实现脱机功能,即把程序烧写到FLASH中,这样就不需要每次上电加载程序。我们手中拿的手机,在开发阶段都是在RAM(SDRAM)中调试的,开发完成,要发布的时候就把程序烧到FLASH,这样我们开机有能运行FLASH的程序。