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,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值