软件开发环境:keil4
硬件开发平台:mini2440
启动代码参考:《ARM处理器裸机开发实战》TQ2440启动代码
1.软件开发环境加载域、执行域总结
norflash启动
首先看下图:
如为上图所示设置,表明RO段基地址为0x0,RW的基地址0x30000000,则表明RO段在Norflash中执行,取指令也会涉及到norflash的数据读取,
但是RW段将会在SDRAM中保持和更新,程序执行速度应该比较慢。
注意:1)从这里配置的话,RO段会被当成固定域,RO段的加载域和执行域的起始地址必须相同。
2)RW段加载域紧跟在RO段之后,所以启动代码必须实现RW段从norflash到SDRAM的拷贝。
3)RO的加载域和执行域都在norflash中,RW的加载域在norflash中,执行域在SDRAM中。
如为上图所示设置,表明RO段和RW段加载域和执行域均在SDRAM中,指令预取也会从SDRAM中取,程序在SDRAM中执行,程序的执行速度应该较快。
注意:1)启动代码中必须实现RO段和RW段从norflash到SDRAM的拷贝。
2)启动代码中的程序必须实现代码无关性,最后在跳转到绝对地址处(SDRAM中)执行。
3)RO和RW的加载域和执行域均在SDRAM中。
4)startup处打钩并不表示程序一开始就从0x30000000处执行,那是用于提示中断入口地址的。
5)程序已开始肯定是从绝对地址0x0开始执行的,这是硬件的硬性规定。
NANDFLASH启动
同上,我不再截图。
第一种情况,0x0地址作为RO的加载域和执行域基地址,即RO段在S3C2440内部SRAM中,那就必须保证你的代码段+只读数据段<4k。
注意:1)必须保证你的代码段+只读数据段<4k。
2)RO加载域和执行域均在内部SRAM中,作为固定域,RW加载域和执行域均在SDRAM中。
3)启动代码中必须实现RW段从NANDFLASH到SDRAM中的拷贝。
4)貌似不常用。
第二种情况,从0x30000000地址作为RO加载域和执行域的基地址,即RO和RW段加载域和执行域均在SDRAM中。
注意:1)RO和RW段加载域和执行域均在SDRAM中。
2)启动代码中必须实现将RO段和RW段从NANDFLASH拷贝至SDRAM的代码。
一般来说,实现如下:首先将NANDFLASH中所有数据和代码拷贝至SDRAM,再根据RO和RW基
地址,在SDRAM内部实现加载域到执行域的拷贝。
3)程序已开始肯定是从绝对地址0x0开始执行的,这是硬件的硬性规定。
4)启动代码中的程序必须实现代码无关性,最后在跳转到绝对地址处(SDRAM中)执行。