最近看2440的init.s文件的代码搬运部分时,发现以前自以为是的逻辑全被打乱了
1.如果将程序入口点设定为0x3000_0000,那么init.s中“B ResetHandler”的ResetHandler是不是被编译器弄成0x3000_0000,依次HandlerUndef是0x3000_0004呢? 可是B指令的跳转范围最大32M啊?
2.ini.s中在跳转到main()以前的标号地址有加0x3000_0000的偏移量吗?{main()以后的代码还可以理解,无论代码或标号都以0x3000_0000为基址向上加的}main()之前的代码就糊涂了,这段代码无论如何也是以0x0为起始地址的?(1)如果是,那么中断入口怎么办(以2440nand启动为例,他开始可以运行4K起始代码,可以保留中断入口,可是2440资料上讲nand时明明说启动后,4KSRAM可做他用,那不是将中断入口毁了吗?);(2)如果不是,那么芯片响应中断时,到0x0找复位异常,或0x4找未定义异常可是什么都找不到了。。。
3.main()之前的代码,只在以0x0为起始地址的地方运行?无论是自nand还是nor启动?如何解决Linker设定的程序入口点0x3000_0000问题呢?
:L 头都大了
大侠们,小鸟在等待,在等待哈,给点资料链接也可以啊。 |