这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 44b0 关于44b0启动代码的继续讨论(二)

共2条 1/1 1 跳转至

44b0 关于44b0启动代码的继续讨论(二)

院士
2006-09-17 18:14:16     打赏
44b0 关于44b0启动代码的继续讨论(二)



关键词: 关于     启动     代码     继续     讨论    

院士
2006-12-22 22:43:00     打赏
2楼
问 上回发的问题基本解决了,不过往后看还是碰到不少问题啊.各位继续讨论啊。感觉这部分东东很麻烦!

*******************************************************
; * 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 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]