《一》切记MDK默认给的s3c24400.h和s3c2440.s启动文件是不完整的,带有中断的程序不可以使用,推荐使用光盘里自带的启动文件2440init.s,不过个人认为最好还是能看懂启动代码后自己重新编写一个,比如使用C实现,而汇编中只实现跳转到C的功能,关于2440init.s修改的地方如下 ①MDK和ADS的入口编号不一致: 修改所有的Image$$RO$$Base 换成Image$$ER_ROM1$$Base,将所有 Image$$RW$$Base 换成Image$$RW_RAM1$$Base,所有 Image$$ZI$$Base 换成Image$$RW_RAM1$$Base, ② 修改第87行附近的 AREA Init,CODE,READONLY为 AREA RESET,CODE,READONLY ③声明8字节数据: 在AREA RESET,CODE,READONLY后面加上一句PRESERVE8 ④提示找不到entry: 在PRESERVE8后面加上一句 EXPORT __ENTRY ⑤包含的头文件错误(即memory.inc声明的Tsrc在2440init.s被用成了Trc) 修改第667行附近的Trc为Tsrc 《二》如果使用nor flash启动运行程序,记得在所有程序的Main.c加入mmu.h和MMU_Init(),以便为提供必需的内存管理,用于初始化内存,实现内存映射,具体有2440slib.s来实现,而用nand的话可以无视之,不过个人不推荐加MMU,因为这段程序让人难以理解程序,看起来比较古怪,而且加MMU运行不如直接下载到nand flash运行 《三》如果需要对nandflash进行相关操作(不包括启动代码的从NAND复制到SDRAM),记得在所有程序的Main.c加入nand.h,特别注意启动代码中的从nand flash拷贝数据到SDRAM区不能省略(即2440init.s中的IMPORT CopyProgramFromNand这一句),他是nand能启动的关键所在(当然stepping stone(SRAM)也很重要) 《三》程序的主函数不一定是Main,因为可以改成任意你想写成的名字,比如改成usercode也可以,具体可以修改bl Main这句即可 修改好的启动代码,以后可以一直用,这个是一劳永逸的。 |
|