原创 STM32启动代码分析[转]

2010-12-13 10:28 2671 3 3 分类: MCU/ 嵌入式
启动代码文件名是STM32F10X.S,它的作用先总结下,然后再分析。启动代码作用一般是:1)堆和栈的初始化;2)向量表定义;3)地址重映射及中断向量表的转移;4)设置系统时钟频率;5)中断寄存器的初始化;6)进入C应用程序。

   (1)按启动代码的次序,先看堆和栈的初始化:


Stack_Size      EQU     0x00000200       ;定义Stack_Size为0x00000200


                AREA    STACK, NOINIT, READWRITE, ALIGN=3   ;定义栈,可初始为0,8字节对齐
Stack_Mem       SPACE   Stack_Size       ;分配0x200个连续字节,并初始化为0
__initial_sp   ;汇编代码地址标号


 


Heap_Size       EQU     0x00000000


                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit



                PRESERVE8 ;指定当前文件堆栈8字节对齐
                THUMB     ;告诉汇编器下面是32为的Thumb指令,如果需要汇编器将插入位以保证对齐


  (2)中断向量表定义


AREA    RESET, DATA, READONLY ;定义复位向量段,只读
                EXPORT  __Vectors   ;定义一个可以在其他文件中使用的全局标号。此处表示中断地址


__Vectors       DCD     __initial_sp              ; 给__initial_sp分配4字节32位的地址0x0
                DCD     Reset_Handler             ; 给标号Reset Handler分配地址为0x00000004
                DCD     NMI_Handler               ; 给标号NMI Handler分配地址0x00000008
                DCD     HardFault_Handler         ; Hard Fault Handler
                DCD     MemManage_Handler         ; MPU Fault Handler
                DCD     BusFault_Handler          ; Bus Fault Handler
                DCD     UsageFault_Handler        ; Usage Fault Handler
                DCD     0                         ; 这种形式就是保留地址,不给任何标号分配
              

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /4 下一条