级中断向量表中的РIRQ中断 0x18Р0x00Рb HandlerIRQРHandlerIRQРHandleIRQ=IsrIRQ Р第一级跳转Р第二级跳转РIsrIRQ中断向量表入口Р(也就是第二级中断向量表)Р实际运行的的中断服务子程序Р初始化硬件Р这部分不详谈,具体可以参考 S3C2440 Boot Loader引导代码功能简述- int64Ago的专栏- 博客频道- .htmР初始化堆栈РARM有7种模式,用户模式,快速中断模式,中断模式,管理模式,中止模式,未定义模式和系统模式。系统堆栈的初始化主要是给各个处理器模式分配堆栈空间,堆栈是为中断或程序跳转服务的,当发生中断或程序跳转时,需要将当前处理器的状态及一些参数保持在堆栈中,当中断处理完毕以后或程序执行完返回时,再将堆栈保存的现场数据恢复,以保证原来的程序正确运行。Р具体可以参考 S3C2440 Boot Loader引导代码功能简述- int64Ago的专栏- 博客频道- .htmРC的main函数入口设定Р在汇编中,我们跳转到main()时,使用 b__Main,编译器就会在__Main和Main之间插入一段汇编代码,来替我们完成RW,ZI段的初始化。如果我们使用b Main, 那么初始化工作要我们自己做(2440init.s的RO,RW,ZI的初始化就是自己处理的)。Р [ :LNOT:THUMBCODEР bl?Main?;Do not use main() because ......Р ;ldr?pc, =Main?;Р b?.Р ]Р [ THUMBCODE ;for start-up code for Thumb modeР orr?lr,pc,#1Р bx?lrР CODE16Р bl?Main?;Do not use main() because ......Р b?.Р CODE32Р ]