共2条
1/1 1 跳转至页
44b0 关于44b0启动代码的继续讨论(二)
问
上回发的问题基本解决了,不过往后看还是碰到不少问题啊.各位继续讨论啊。感觉这部分东东很麻烦!
*******************************************************
; * NAME : 44BINIT.S *
; * Version : 10.JAn.2003 *
; * Description: *
; * C start up codes *
; * Configure memory, Initialize ISR ,stacks *
; * Initialize C-variables *
; * Fill zeros into zero-initialized C-variables * //这句话是什么意思???
; *******************************************************
GET ..\inc\option.a
GET ..\inc\memcfg.a
;Interrupt Control
INTPND EQU 0x01e00004
INTMOD EQU 0x01e00008
INTMSK EQU 0x01e0000c
I_ISPR EQU 0x01e00020
I_CMST EQU 0x01e0001c
;Watchdog timer
WTCON EQU 0x01d30000
;Clock Controller
PLLCON EQU 0x01d80000
CLKCON EQU 0x01d80004
LOCKTIME EQU 0x01d8000c
;Memory Controller
REFRESH EQU 0x01c80024
;Pre-defined constants
USERMODE EQU 0x10
FIQMODE EQU 0x11
IRQMODE EQU 0x12
SVCMODE EQU 0x13
ABORTMODE EQU 0x17
UNDEFMODE EQU 0x1b
MODEMASK EQU 0x1f
NOINT EQU 0xc0
;check if tasm.exe is used.
GBLL THUMBCODE
[ {CONFIG} = 16
THUMBCODE SETL {TRUE}
CODE32
|
THUMBCODE SETL {FALSE}
]
[ THUMBCODE
CODE32 ;for start-up code for Thumb mode
]
MACRO
$HandlerLabel HANDLER $HandleLabel
$HandlerLabel
sub sp,sp,#4 ;decrement sp(to store jump address) //这里为什么是sp=sp-4?我觉得应该加4啊???
stmfd sp!,{r0} ;PUSH the work register to stack(lr does't push because it return to original address)//这里怎么只把r0入栈???
ldr r0,=$HandleLabel;load the address of HandleXXX to r0//"="表示什么意思?$表示什么意思??
ldr r0,[r0] ;load the contents(service routine start address) of HandleXXX
str r0,[sp,#4] ;store the contents(ISR) of HandleXXX to stack
ldmfd sp!,{r0,pc} ;POP the work register and pc(jump to ISR)
MEND
IMPORT |Image$$RO$$Limit| ; End of ROM code (=start of ROM data)//以下这四句话是什么意思啊???
IMPORT |Image$$RW$$Base| ; Base of RAM to initialise
IMPORT |Image$$ZI$$Base| ; Base and limit of area
IMPORT |Image$$ZI$$Limit| ; to zero initialise
IMPORT Main ; The main entry of mon program
b ResetHandler ;for debug //这里b表示什么意思???
b HandlerUndef ;handlerUndef
b HandlerSWI ;SWI interrupt handler
b HandlerPabort ;handlerPAbort
b HandlerDabort ;handlerDAbort
b . ;handlerReserved 答 1: 这些问题1.; * Fill zeros into zero-initialized C-variables * //这句话是什么意思???
将ZI区的C变量初始化为0
2.sub sp,sp,#4 ;decrement sp(to store jump address) //这里为什么是sp=sp-4?我觉得应该加4啊???
看下一句,ARM的堆栈有四种方式,其使用的是哪种方式,stmfd的FD是使用方式的指示符,和条件码书写方式类似.
3.stmfd sp!,{r0} ;PUSH the work register to stack(lr does't push because it return to original address)//这里怎么只把r0入栈???
因为在使用之前只使用r0
4.ldr r0,=$HandleLabel;load the address of HandleXXX to r0//"="表示什么意思?$表示什么意思??
$HandleLabel表示使用这个宏标签名.看后面使用这个宏的代码和汇编宏的格式.
5.IMPORT |Image$$RO$$Limit| ; End of ROM code (=start of ROM data)//以下这四句话是什么意思啊???
IMPORT |Image$$RW$$Base| ; Base of RAM to initialise
IMPORT |Image$$ZI$$Base| ; Base and limit of area
IMPORT |Image$$ZI$$Limit| ; to zero initialise
导入可以替换的标签,具体看关于伪指令的用法.
6.b ResetHandler ;for debug //这里b表示什么意思???
跳转和BL,BX功能一样.只是B指令,即不将PC保存到LR,也不切换到thumb模式.
具体问题,看情况解决,你有调试器的话可以单步试一下看看个寄存器就知道了.
我现在不再从事电子类工作,有些东西已经记不清了,英文不好的话,有耐心看看<ARM体系结构与编程>,上面讲得很全.
答 2: 谢谢weiganglnu
上次也是你帮我解决问题的,真的很谢谢你。
在此也谢谢所有乐于助人的网友。
谢谢!
答 3: 请教weiganglnu1.; * Fill zeros into zero-initialized C-variables * //这句话是什么意思???
将ZI区的C变量初始化为0)
ZI区是什么意思??? 答 4: zero-initialized 答 5: 由于种种原因,我不能做电子行业了,虽然我是学电子的.由于种种原因,我不能做电子行业了,虽然我是学电子的.不过现在薪水很可观,可以有钱买开发板,这样还可以拿ARM来做做娱乐,因为游戏打腻了.由于工作的原因我也没有做的太深入,所以能帮你的也不多.我开始做44B0的时候也比较困难,由于没有相关仪器,有很多都没法做,主要还看你自己的实践了.我有一个EasyARM2132,相对于44B0来说,资料比较全.上手容易些.
ARM的映像文件分三部分RO,RW,ZI.强烈建议你先看看书或手册吧,如果英文不行就看<ARM体系结构与编程>,ARM相对51要复杂一些,由于ARM属于卖设计内核的公司所以开发工具相对灵活一些,没有像KEIL那样把startup文件给你集成好了.你在keil可以找到这个文件.和你现在看的这个Bootloader类似.
*******************************************************
; * NAME : 44BINIT.S *
; * Version : 10.JAn.2003 *
; * Description: *
; * C start up codes *
; * Configure memory, Initialize ISR ,stacks *
; * Initialize C-variables *
; * Fill zeros into zero-initialized C-variables * //这句话是什么意思???
; *******************************************************
GET ..\inc\option.a
GET ..\inc\memcfg.a
;Interrupt Control
INTPND EQU 0x01e00004
INTMOD EQU 0x01e00008
INTMSK EQU 0x01e0000c
I_ISPR EQU 0x01e00020
I_CMST EQU 0x01e0001c
;Watchdog timer
WTCON EQU 0x01d30000
;Clock Controller
PLLCON EQU 0x01d80000
CLKCON EQU 0x01d80004
LOCKTIME EQU 0x01d8000c
;Memory Controller
REFRESH EQU 0x01c80024
;Pre-defined constants
USERMODE EQU 0x10
FIQMODE EQU 0x11
IRQMODE EQU 0x12
SVCMODE EQU 0x13
ABORTMODE EQU 0x17
UNDEFMODE EQU 0x1b
MODEMASK EQU 0x1f
NOINT EQU 0xc0
;check if tasm.exe is used.
GBLL THUMBCODE
[ {CONFIG} = 16
THUMBCODE SETL {TRUE}
CODE32
|
THUMBCODE SETL {FALSE}
]
[ THUMBCODE
CODE32 ;for start-up code for Thumb mode
]
MACRO
$HandlerLabel HANDLER $HandleLabel
$HandlerLabel
sub sp,sp,#4 ;decrement sp(to store jump address) //这里为什么是sp=sp-4?我觉得应该加4啊???
stmfd sp!,{r0} ;PUSH the work register to stack(lr does't push because it return to original address)//这里怎么只把r0入栈???
ldr r0,=$HandleLabel;load the address of HandleXXX to r0//"="表示什么意思?$表示什么意思??
ldr r0,[r0] ;load the contents(service routine start address) of HandleXXX
str r0,[sp,#4] ;store the contents(ISR) of HandleXXX to stack
ldmfd sp!,{r0,pc} ;POP the work register and pc(jump to ISR)
MEND
IMPORT |Image$$RO$$Limit| ; End of ROM code (=start of ROM data)//以下这四句话是什么意思啊???
IMPORT |Image$$RW$$Base| ; Base of RAM to initialise
IMPORT |Image$$ZI$$Base| ; Base and limit of area
IMPORT |Image$$ZI$$Limit| ; to zero initialise
IMPORT Main ; The main entry of mon program
b ResetHandler ;for debug //这里b表示什么意思???
b HandlerUndef ;handlerUndef
b HandlerSWI ;SWI interrupt handler
b HandlerPabort ;handlerPAbort
b HandlerDabort ;handlerDAbort
b . ;handlerReserved 答 1: 这些问题1.; * Fill zeros into zero-initialized C-variables * //这句话是什么意思???
将ZI区的C变量初始化为0
2.sub sp,sp,#4 ;decrement sp(to store jump address) //这里为什么是sp=sp-4?我觉得应该加4啊???
看下一句,ARM的堆栈有四种方式,其使用的是哪种方式,stmfd的FD是使用方式的指示符,和条件码书写方式类似.
3.stmfd sp!,{r0} ;PUSH the work register to stack(lr does't push because it return to original address)//这里怎么只把r0入栈???
因为在使用之前只使用r0
4.ldr r0,=$HandleLabel;load the address of HandleXXX to r0//"="表示什么意思?$表示什么意思??
$HandleLabel表示使用这个宏标签名.看后面使用这个宏的代码和汇编宏的格式.
5.IMPORT |Image$$RO$$Limit| ; End of ROM code (=start of ROM data)//以下这四句话是什么意思啊???
IMPORT |Image$$RW$$Base| ; Base of RAM to initialise
IMPORT |Image$$ZI$$Base| ; Base and limit of area
IMPORT |Image$$ZI$$Limit| ; to zero initialise
导入可以替换的标签,具体看关于伪指令的用法.
6.b ResetHandler ;for debug //这里b表示什么意思???
跳转和BL,BX功能一样.只是B指令,即不将PC保存到LR,也不切换到thumb模式.
具体问题,看情况解决,你有调试器的话可以单步试一下看看个寄存器就知道了.
我现在不再从事电子类工作,有些东西已经记不清了,英文不好的话,有耐心看看<ARM体系结构与编程>,上面讲得很全.
答 2: 谢谢weiganglnu
上次也是你帮我解决问题的,真的很谢谢你。
在此也谢谢所有乐于助人的网友。
谢谢!
答 3: 请教weiganglnu1.; * Fill zeros into zero-initialized C-variables * //这句话是什么意思???
将ZI区的C变量初始化为0)
ZI区是什么意思??? 答 4: zero-initialized 答 5: 由于种种原因,我不能做电子行业了,虽然我是学电子的.由于种种原因,我不能做电子行业了,虽然我是学电子的.不过现在薪水很可观,可以有钱买开发板,这样还可以拿ARM来做做娱乐,因为游戏打腻了.由于工作的原因我也没有做的太深入,所以能帮你的也不多.我开始做44B0的时候也比较困难,由于没有相关仪器,有很多都没法做,主要还看你自己的实践了.我有一个EasyARM2132,相对于44B0来说,资料比较全.上手容易些.
ARM的映像文件分三部分RO,RW,ZI.强烈建议你先看看书或手册吧,如果英文不行就看<ARM体系结构与编程>,ARM相对51要复杂一些,由于ARM属于卖设计内核的公司所以开发工具相对灵活一些,没有像KEIL那样把startup文件给你集成好了.你在keil可以找到这个文件.和你现在看的这个Bootloader类似.
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |