- 1、本文档共21页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 2015年河南新华第十二届校园招聘会策划方案.doc
- 2016年3月人民日报时评(打印版).doc
- 2016年3月二级MS OFFICE考试试题.doc
- 2016年西南大学作业.doc
- 2017年中国键鼠市场研究报告.doc
- 2017李克强总理记者会双语实录(全文).doc
- 2018-----曲边三角形面积.doc
- 2018-2019市南八年级期中试题.doc
- 2018-2019年杭州市采荷第一小学一年级下册语文期末测试含答案.doc
- 2018年全国ii卷高考英语真题2018全国ii卷高考英语答案(全文).doc
- 2025年输血的相关考试题库及解析答案.docx
- 4.14 拧螺丝的学问(教学课件)-五年级科学下册(苏教版).pptx
- 2025年消防安全常识测考试模拟题库及解析答案.docx
- 2025年全国事业单位联考《职业能力倾向测验》A类考试模拟题库及解析答案.docx
- 2025年消防安全考试模拟题库使用知识培训考试模拟题库及解析答案.docx
- 2025年全国事业单位联考C类《职业能力倾向测验》考试试题库及解析答案.docx
- 2025年新版保安员考试模拟题库附及解析答案.docx
- 2025年全民国家安全教育日知识竞赛备考试试题库及解析答案.docx
- 2025年职业病培训考试题库及解析答案.docx
- 2025年山东省初中信息技术等级考试练习题选择题五及解析答案.docx
文档评论(0)