学习ARM或者其他的处理器的时候,都会接触到start.S文件。在这个文件中使用汇编写的程序,看到汇编别头疼。如果你认识它,那么它就很乖的。我常常有一个问题经常问老师,就是在程序运行的时候,突然发生异常,如IRQ中断,那么程序计数器PC则指向处理IRQ的函数,那么跳转到SDRAM里面的处理函数,还是内部RAM4KB或者NOR Flash里面的处理函数呢?这个问题一直困扰着我,那是因为我对链接过程一点都不了解。
看了有关链接的文章,如程序员修炼之道--链接·库(这本书对链接解说的比较详细),一般的情况下,会有一个链接脚本,它来指示哪些文件被输入,哪些文件放在哪个地址上。一般我们大家调试ARM程序的时候,用的一般的工具为ADS1.2,在ADS中配置的时候,一般都设置RO地址,如果设置RO的地址为0x30000000,这个地址为SDRAM地址,那么在程序链接的过程中就会将地址的映射到SDRAM中去,即使指向地址0x00000000位置的时候,它还是会跳入到SDRAM去执行相应的代码,而不是在NOR Flash或内部RAM中执行。
所以大家不需要担心程序在Nor Flash执行怎么跳转到SDRAM中去。
在这里先申明,这些知识点都是自己在学习的过程中总结出来的,如果觉得有不对的地方,请指出来,互相学习,有异议的地方在一起讨论。