网站大量收购独家精品文档,联系QQ:2885784924

stm32启动文件详解.doc

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
STM32启动文件详解 一、启动文件的作用 1.初始化堆栈指针 SP; 2.初始化程序计数器指针 PC; 3.设置堆、栈的大小; 4.设置异常向量表的入口地址; 5.配置外部 SRAM作为数据存储器(这个由用户配置,一般的开发板可没有外部 SRAM); 6.设置 C库的分支入口__main(最终用来调用 main函数); 7.在 3.5版的启动文件还调用了在 system_stm32f10x.c文件中的SystemIni()函数配置系统时钟。 二、汇编指令 指令 作用 EQU 给数字常量取一个符号名,相当于C语言中的define AREA 汇编一个新的代码段或者数据段 SPACE 分配内存空间 PRESERVE8 当前文件堆栈需按照8字节对齐 EXPORT 声明一个标号具有全局属性,可被外部文件使用 DCD 以字为单位分配内存,要求4字节对齐,并要求初始化这些内存 PROC 定义子程序,与ENDP成对使用,表示子程序结束 WEAK 弱定义,如果外部文件声明了一个标号,则优先使用外部文件定义的定义也不出错 IMPORT 声明标号来自外部文件,跟C语言中的EXTERN关键字类似 B 跳转到一个标号 ALLIGN 编译器对指令或者数据的存放地址进行对齐,一般需要跟一个立即数,缺省值表示4字节对齐。要注意的是:这个不是ARM的指令,是编译器的,这里放在一起只是为了方便 END 到达文件的末尾,文件结束 IF,ELSE,ENDIF 汇编条件分支语句,跟C语言的类似 LDR 从存储器中加载字到一个寄存器中 BL 跳转到由寄存器给出的地址,并把跳转前的下条指令地址保存到LR BLX 跳转到由寄存器给出的地址,并根据寄存器的LSE确定处理器的状态,还要把跳转前的下条指令地址保存到LR BX 跳转到由寄存器/标号给出的地址,不用返回 三、启动代码 1.stack ----- 栈 Stack_Size EQU 0 ; 栈的大小 AREA STACK, NOINIT, READWRITE,ALIGN=3 Stack_Mem SPACE Stack_Size ; 分配栈空间 __initial_sp ; 栈的结束地址(栈顶地址) 分配名为STACK,不初始化,可读可写,8(2^3)字节对齐的1KB空间。 栈:局部变量,函数形参等。栈的大小不能超过内部SRAM大小。 AREA:汇编一个新的代码段或者数据段。STACK段名,任意命名;NOINIT表示不初始化;READWRITE可读可写;ALIGN=3(2^3= 8字节对齐)。 __initial_sp紧挨了SPACE放置,表示栈的结束地址,栈是从高往低生长,结束地址就是栈顶地址。 2.heap ----- 堆 Heap_Size EQU 0 ; 堆的大小(512Bytes) AREA HEAP, NOINIT, READWRITE,ALIGN=3 __heap_base ; 堆的起始地址 Heap_Mem SPACE Heap_Size ; 分配堆空间 __heap_limit ; 堆的结束地址 分配名为HEAP,不初始化,可读可写,8(2^3)字节对齐的512字节空间。__heap_base堆的起始地址,__heap_limit堆的结束地址。堆由低向高生长。动态分配内存用到堆。 PRESERVE8 -- 指定当前文件的堆/栈按照 8 字节对齐。 THUMB -- 表示后面指令兼容 THUMB 指令。THUBM 是ARM 以前的指令集,16bit;现在 Cortex-M 系列的都使用 THUMB-2 指令集,THUMB-2 是32 位的,兼容 16 位和 32 位的指令,是 THUMB 的超级。 3.向量表 AREA RESET, DATA, READONLY EXPORT __Vectors EXPORT __Vectors_End EXPORT __Vectors_Size 定义一个名为RESET,可读的数据段。并声明 __Vectors、__Vectors_End 和__Vectors_Size 这三个标号可被外部的文件使用。 __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD

文档评论(0)

153****9163 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档