本帖最后由 1838039453 于 2016-9-18 13:07 编辑
STM32启动文件——startup_stm32f10x_hd.s【更多资料关注:http://blog.csdn.net/wqx521】
一、启动文件的作用 (关于启动代码的作用,前面已经提到过了,这里再啰嗦一下)(1)初始化堆栈指针 SP;(2)初始化程序计数器指针 PC;(3)设置堆、栈的大小;(4)设置异常向量表的入口地址;(5)配置外部 SRAM作为数据存储器(这个由用户配置,一般的开发板可没有外部 SRAM);(6)设置 C库的分支入口__main(最终用来调用 main函数);(7)在 3.5版的启动文件还调用了在 system_stm32f10x.c文件中的SystemIni()函数配置系统时钟。
二、启动文件中提到的汇编指令指令作用EQU给数字常量取一个符号名,相当于 C 语言中的 defineAREA汇编一个新的代码段或者数据段SPACE分配内存空间PRESERVE8当前文件堆栈需按照 8 字节对齐EXPORT声明一个标号具有全局属性,可被外部的文件使用DCD以字为单位分配内存,要求 4 字节对齐,并要求初始化这些内存PROC定义子程序,与 ENDP 成对使用,表示子程序结束WEAK弱定义,如果外部文件声明了一个标号,则优先使用外部文件定义的标号,如果外部文件没有定义也不出错。IMPORT声明标号来自外部文件,跟 C 语言中的 EXTERN 关键字类似B跳转到一个标号ALIGN编译器对指令或者数据的存放地址进行对齐,一般需要跟一个立即
数,缺省表示 4 字节对齐。要注意的是:这个不是 ARM 的指令,是编译器的,这里放在一起只是为了方便。END到达文件的末尾,文件结束IF,ELSE,ENDIF汇编条件分支语句,跟 C 语言的类似LDR从存储器中加载字到一个寄存器中BL跳转到由寄存器/标号给出的地址,并把跳转前的下条指令地址保存到 LRBLX跳转到由寄存器给出的地址,并根据寄存器的 LSE 确定处理器的状态,还要把跳转前的下条指令地址保存到 LRBX跳转到由寄存器/标号给出的地址,不用返回
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
多谢鼓励。
一周热门 更多>