bootloader相关

来源:互联网 发布:必佳预算软件 编辑:程序博客网 时间:2024/06/06 20:17

 

满空堆栈方式说明堆栈指针指向了上一次进入的数据还是空地址
自下而上的生长方式 说明数据先放的低地址 反之说明数据先放的高地址
启动代码宏定义,以下相关说明(未整理)

MACRO       
$HandlerLabel HANDLER $HandleLabel    ;宏定义,请仔细理解
$HandlerLabel                                                         ;由于ADS仅支持FD(满递减)型
    sub      sp,sp,#4                             ;将堆栈退一个字用于保存下面用到的R0
    stmfd   sp!,{r0}                               ;将R0压入堆栈
    ldr       r0,=$HandleLabel               ;将HandleLabel的地址赋给R0
    ldr       r0,[r0]                                 ;将HandleLabel的地址指向的内容                                

                        ;(实际的执行地址)赋给R0

    str        r0,[sp,#4]                           ;将对应的中断函数首地址入栈保护

    ldmfd   sp!,{r0,pc}                             

                                      ;将中断函数的首地址出栈,放入PC中,系统将跳转到对应中断处理函数 

    MEND

HANDLER 是宏名。$HandlerLabel 是宏展开后要被别的字符替换掉的标号,不过不叫参数。

例如:HandlerFIQ    HANDLER HandleFIQ
       展开后为:
       HandlerFIQ
       sub        sp,sp,#4      
       stmfd   sp!,{r0}       
       ldr        r0,=HandleFIQ
       ldr        r0,[r0]       
       str        r0,[sp,#4]
       ldmfd   sp!,{r0,pc}

原创粉丝点击