2011-03-01 23:25:22
目地:更清晰的了解bootloader的結構及功能。為移植u-boot打基礎。
以前只知道大概,今天利用iar除錯工具,看著彙編**,看著暫存器,看著記憶體。來單步除錯bootloader。把之前不明白的地方都搞明白。
今天單步走到了初始化堆疊。主要研究了設定memory暫存器及初始化堆疊。不過還有乙個問題,為什麼要用dcd分配記憶體空間。不能用為watchdog暫存器賦值的方法來給bwscon來賦值?貌似和記憶體映像相關。明天要搞明白。
一:設定memory暫存器(見上圖)
二:初始化堆疊
initstacks
;don't use dram,such as stmfd,ldmfd......
;svcstack is initialized before
;under toolkit ver 2.5, 'msr cpsr,r1' can be used instead of 'msr cpsr_cxsf,r1'
mrs r0,cpsr
bic r0,r0,#modemask
orr r1,r0,#undefmode|noint
msr cpsr_cxsf,r1 ;undefmode
ldr sp,=undefstack ; undefstack=0x33ff_5c00
orr r1,r0,#abortmode|noint
msr cpsr_cxsf,r1 ;abortmode
ldr sp,=abortstack ; abortstack=0x33ff_6000
。。。。。
bic r0,r0,#modemask|noint
orr r1,r0,#svcmode
msr cpsr_cxsf,r1 ;svcmode
ldr sp,=svcstack ; svcstack=0x33ff_5800
這段**我當初的理解是為修改cpsr的值,然後把各種模式的堆疊值存入sp。執行到最後那麼就只為svcstack賦值了。現在看來這真是天大的笑話。根據下圖可知:不同模式有自己單獨的sp(即r13暫存器)常作為棧指標。上面**就是先設定模式,然後再在此模式下,初始化r13暫存器。
每一種異常模式都有自己擔任r12,應用程式初始化該r13,使其指向該異常模式專用的棧位址。當進入異常模式時,可以將需要使用的暫存器儲存在r13所指的棧中,當退出異常處理程式時,將儲存在r13所指的棧中的暫存器值彈出,這樣就使異常處理程式不會破壞被其中斷程式的執行現場。
AVR的bootloader的設定
一些注意事項 1.熔絲位的燒寫 bootrst要進行程式設計,這樣微控制器在復位後自動跳轉到bootloader區執行bootloader的 然後要根據自己bootloader的大小設定boot區的的熔絲位 具體設定如下圖,這裡我選擇的是1024大小 注意1代表為程式設計,0代表已程式設計 2.設定...
BootLoader的基本概念
板級支援包 bsp bsp是板級支援包 board support package 的縮寫,是通常用在嵌入行業中的乙個術語,用來代表在乙個特殊硬體平台上快速構建乙個嵌入作業系統所需的原始資料或者二進位制軟體包。bsp的作用是支援作業系統,使之能夠更好的執行於硬體平台。bsp是相對於作業系統而言的,不...
bootloader的啟動流程分析
bootloader的啟動流程有兩個階段 stage1和stage2。一 stage1完成的基本工作 1 基本硬體初始化 包括遮蔽所有的中斷 設定cpu的速度和時鐘頻率 ram初始化 初始化led 關閉內部指令和資料cache燈。2 為載入stage2準備ram空間,通常為了獲得更好的執行速度,通常...