为什么要用bootloader,使用loader可以在进入操作系统之前将需要用到的寄存器进行初始化,为操作系统的运行建立运行环境。
下面从头(从我们的操作系统的第一行代码来分析可爱的,令人着迷的,令人费解的,至今名搞明白的的UCOS-II)分解;
;/*
;*********************************************************************************************************
;* 文件: Startup.s
;* 描述: 主程序及异常向量入口.
;* 编写: kaka (sn.kaka@yahoo.com).In Hisense
;*********************************************************************************************************
;*/
IMPORT HandlerReset
IMPORT HandlerIRQ
IMPORT HandlerFIQ
IMPORT HandlerEINT0
IMPORT HandlerEINT1
IMPORT HandlerEINT2
IMPORT HandlerEINT3
IMPORT HandlerEINT4567
IMPORT HandlerTICK
IMPORT HandlerZDMA0
IMPORT HandlerZDMA1
IMPORT HandlerBDMA0
IMPORT HandlerBDMA1
IMPORT HandlerWDT
IMPORT HandlerUERR01
IMPORT HandlerTIMER0
IMPORT HandlerTIMER1
IMPORT HandlerTIMER2
IMPORT HandlerTIMER3
IMPORT HandlerTIMER4
IMPORT HandlerTIMER5
IMPORT HandlerURXD0
IMPORT HandlerURXD1
IMPORT HandlerIIC
IMPORT HandlerSIO
IMPORT HandlerUTXD0
IMPORT HandlerUTXD1
IMPORT HandlerRTC
IMPORT HandlerADC
EXPORT RStartup
AREA startup,CODE,READONLY
CODE32
ENTRY
RStartup
LDR PC, =HandlerReset ; 程序入口.将 HandlerReset 的地址加载到PC指针,ARM就会跳转到 HandlerReset 去执行。
B . ; 未定义指令.
B . ; 软件中断.
B . ; 预取指中止.
B . ; 数据中止.
B . ; 保留.
LDR PC, =HandlerIRQ;蓝颜色的是中断向量列表,当ARM发生中断的时候(前提是中断没有被屏蔽,可以通过修改中断寄存器的值来控制是否相应中断),ARM会强制将PC指针指到这里运行,比方说,如果我们的系统没有屏蔽中断,且发生了中断请求则跳到这里
LDR PC, =HandlerFIQ;发生了快速中断则跳到这里
LDR PC, =HandlerEINT0 ; 0x20
LDR PC, =HandlerEIN
下面从头(从我们的操作系统的第一行代码来分析可爱的,令人着迷的,令人费解的,至今名搞明白的的UCOS-II)分解;
;/*
;*********************************************************************************************************
;* 文件: Startup.s
;* 描述: 主程序及异常向量入口.
;* 编写: kaka (sn.kaka@yahoo.com).In Hisense
;*********************************************************************************************************
;*/
IMPORT HandlerReset
IMPORT HandlerIRQ
IMPORT HandlerFIQ
IMPORT HandlerEINT0
IMPORT HandlerEINT1
IMPORT HandlerEINT2
IMPORT HandlerEINT3
IMPORT HandlerEINT4567
IMPORT HandlerTICK
IMPORT HandlerZDMA0
IMPORT HandlerZDMA1
IMPORT HandlerBDMA0
IMPORT HandlerBDMA1
IMPORT HandlerWDT
IMPORT HandlerUERR01
IMPORT HandlerTIMER0
IMPORT HandlerTIMER1
IMPORT HandlerTIMER2
IMPORT HandlerTIMER3
IMPORT HandlerTIMER4
IMPORT HandlerTIMER5
IMPORT HandlerURXD0
IMPORT HandlerURXD1
IMPORT HandlerIIC
IMPORT HandlerSIO
IMPORT HandlerUTXD0
IMPORT HandlerUTXD1
IMPORT HandlerRTC
IMPORT HandlerADC
EXPORT RStartup
AREA startup,CODE,READONLY
CODE32
ENTRY
RStartup
LDR PC, =HandlerReset ; 程序入口.将 HandlerReset 的地址加载到PC指针,ARM就会跳转到 HandlerReset 去执行。
B . ; 未定义指令.
B . ; 软件中断.
B . ; 预取指中止.
B . ; 数据中止.
B . ; 保留.
LDR PC, =HandlerIRQ;蓝颜色的是中断向量列表,当ARM发生中断的时候(前提是中断没有被屏蔽,可以通过修改中断寄存器的值来控制是否相应中断),ARM会强制将PC指针指到这里运行,比方说,如果我们的系统没有屏蔽中断,且发生了中断请求则跳到这里
LDR PC, =HandlerFIQ;发生了快速中断则跳到这里
LDR PC, =HandlerEINT0 ; 0x20
LDR PC, =HandlerEIN