WinCE6.0学习之EBoot源码分析----startup.s(六)

简介:
;----------------------------------------------- 
;         MMU Enabled and Virtual Address is Valid from here 
;----------------------------------------------- 

VirtualStart 

;-------------------------------------------------- 
;         Initialize Stack 
;         Stack size and location information is in "image_cfg.inc" 
;-------------------------------------------------- 

                mrs                    r0, cpsr 

                bic                    r0, r0, #Mode_MASK 
                orr                    r1, r0, #Mode_IRQ | NOINT 
                msr                    cpsr_cxsf, r1                                        ; IRQMode 
                ldr                    sp, =IRQStack_VA                             ; IRQStack
    跳转到 VirtualStart 标号处后,先初始化堆栈。第一条语句 mrs 获取 CPSR 状态寄存器的值,并存储到 R0 中。 Mode_MASK Mode_IRQ NOINT 都在文件 PLATFORM\COMMON\SRC\SOC\S3C6410_SEC_V1\OAL\INC\s3c6410.inc 中定义。第二条语句用来清空表示处理器模式的低 5 位,第三条语句设置处理器模式为 IRQ 模式,同时禁止 IRQ FRQ 中断。第四条语句执行前面的设置。 IRQStack_VA 在文件 image_cfg.inc 中定义,第五条语句将 IRQ 堆栈的虚拟地址保存在 SP
                bic                    r0, r0, #Mode_MASK | NOINT 
                orr                    r1, r0, #Mode_SVC 
                msr                    cpsr_cxsf, r1                                        ; SVCMode 
                ldr                    sp, =SVCStack_VA                             ; SVCStack
    第一条语句,清除模式位,同时使能 IRQ FRQ 中断,第二条语句设置处理器模式为特权模式,第三条语句执行前面的设置,最后一条语句保存特权模式下堆栈虚拟地址到 SP
;------------------------------------ 
;         Jump to Main() "C" Routine 
;------------------------------------ 

                b                    main 
                b                    .                    ; Should no be here... 

        ENTRY_END 

;------------------------------------------------------------------------------ 
;         End of StartUp 
;------------------------------------------------------------------------------
    到这里基本上StartUP段代码就基本结束,最后一步用来跳转到C语言写的main函数处,“b  .“表示不断本地跳转,相当于while1),最后ENTRY_END呼应开始的LEAF_ENTRY宏,表明StartUP代码段的结束。

         好了,终于写完了,在startup.s文件中还包含了启动内核的Launch函数,这部分也是汇编书写的,但逻辑上属于main函数里面的,所以这里不做分析,到main函数中进行分析。



本文转自jazka 51CTO博客,原文链接:http://blog.51cto.com/jazka/572651,如需转载请自行联系原作者

相关文章
|
2月前
|
C++
MFC编程 -- 记事本项目(大体框架)
MFC编程 -- 记事本项目(大体框架)
12 0
|
2月前
MFC编程 -- 添加菜单
MFC编程 -- 添加菜单
9 0
|
存储 编译器 C语言
STM32第二章-启动过程详解
STM32 的启动过程,启动过程是指从 CPU 上电复位执行第 1 条指令开始(汇编文件)到进入 C 程序 main()函数入口之间的部分。启动过程相对来说还是比较重要的,虽然难但必须了解掌握。
216 0
STM32第二章-启动过程详解