你知道我为了你这个问题,和我老师争论了3个小时,他终于明白我的问题是什么。回到宿舍洗了个澡,就马上回你贴。。。。
废话少说,首先说一下你上面理解的问题,第一:我所看到的程序都没有用到LDR PC , =Main跳进main程序,都是直接用Bl Main,(虽然旁边的注释有LDR PC , =Main,但是我也不知道什么时候用它)。PC怎么跳,是与ROBase有关的,当你ROBase设置为0的时候,就代表代码运行预从0开始,你设置0x30000000开始,那它就根据ROBase为基地址(也就是中断向量表开始地址)。至于绝对地址,在LDR PC , =Main这句出现之前,代码已经复制到SDRAM时,而在复制完以后,程序已经完成跳进SDRAM的操作(ldr pc,=copy_proc_beg),所以你的LDR PC , =Main这句话根本用不上,直接用Bl Main就好了。最后是entry的设置,它绝对有用,因为ROBase在什么地方是与程序入口没有必然关系,比如说你RO域是在0x3000~开始,但是你的程序不一定要在0x3000~开始执行啊~~
你自己再分析一下启动代码的复制部分吧,不自己分析是达不到完全理解的境界的。你看我凌晨1点半都会你贴,100分应该给我吧~~~呵呵