STM32启动代码分析、简化、实战.pdf

STM32启动代码分析、简化、实战.pdf

ID:55720216

大小:488.86 KB

页数:19页

时间:2020-05-27

STM32启动代码分析、简化、实战.pdf_第1页
STM32启动代码分析、简化、实战.pdf_第2页
STM32启动代码分析、简化、实战.pdf_第3页
STM32启动代码分析、简化、实战.pdf_第4页
STM32启动代码分析、简化、实战.pdf_第5页
资源描述:

《STM32启动代码分析、简化、实战.pdf》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、本文通过对STM32的官方固件库STM32F10x_StdPeriph_Lib_V3.5.0里的MDK启动文件分析,简化部分不需要的代码,并从繁杂的固件库里,精炼出一个类似于“helloworld”的入门实战小程序——点亮一个LED。该工程仅仅包含一个启动文件和一个有main函数的C文件。本文初衷:不用固件库建立自己的工程!实验软件:KeiluVision4实验硬件:神舟IV号开发板芯片型号:STM32F107VCSTM32启动代码分析、简化、实战汇编基础:1.伪指令:EQU语法格式:名称EQU表达式{,类型}EQU

2、伪指令用于为程序中的常量、标号等定义一个等效的字符名称,类似于C语言的#define。其中EQU可以用“*”代替。名称为EQU伪指令定义的字符名称,当表达式为32位的常量时,可以指定表达式的数据类型,可以有一下三种类型:CODE16、CODE32和DATA2.伪指令:AREA语法格式:AREA段名{,属性1}{,属性2}……AREA命令指示汇编程序汇编一个新的代码段或数据段。段是独立的、指定的、不可见的代码或数据块,它们由链接程序处理。段名:可以为段选择任何段名。但是,以一个数字开始的名称必须包含在竖杠号内,否则会产

3、生一个缺失段名错误。例如,

4、1_DataArea

5、。有些名称是习惯性的名称。例如:

6、.text

7、用于表示由C编译程序产生的代码段,或用于以某种方式与C库关联的代码段。属性字段表示该代码段(或数据段)的相关属性,多个属性用逗号分隔。常用的属性如下:——CODE属性:用于定义代码段,默认为READONLY。——DATA属性:用于定义数据段,默认为READWRITE。——READONLY属性:指定本段为只读,代码段默认为READONLY。——READWRITE属性:指定本段为可读可写,数据段的默认属性为READWRITE。

8、——ALIGN属性:使用方式为ALIGN表达式。在默认时,ELF(可执行连接文件)的代码段和数据段是按字对齐的,表达式的取值范围为0~31,相应的对齐方式为2表达式次方。——NOINIT属性:表示数据段是未初始化的或初始化为零。其只包含零初始化的空间保留命令SPACE或DCB、DCD、DCDU、DCQ、DCQU、DCW或DCWU。可以决定在链接时AREA是未初始化的还是零初始化的。一个汇编语言程序至少要包含一个段,当程序太长时,也可以将程序分为多个代码段和数据段。3.伪指令:SPACE用于分配一片连续的存储单元启动代

9、码分析:定义栈段,不初始化栈名:STACK大小:Stack_Size只分配空间不做初始化或者初始化为0:NOINIT可读可写:READWRITE:按8字节对齐:ALIGN=3栈顶地址:__initial_spStack_SizeEQU0x00000400AREASTACK,NOINIT,READWRITE,ALIGN=3Stack_MemSPACEStack_Size__initial_sp定义堆段,不初始化堆名:HEAP大小:Heap_Size只分配空间不做初始化或者初始化为0:NOINIT可读可写:READWRI

10、TE:按8字节对齐:ALIGN=3堆起始地址:__heap_base堆终止地址:__heap_limitHeap_SizeEQU0x00000200AREAHEAP,NOINIT,READWRITE,ALIGN=3__heap_baseHeap_MemSPACEHeap_Size__heap_limit4.伪指令:EXPORT语法格式:EXPORT标号{[WEAK]}EXPORT伪指令用于在程序中声明一个全局的标号,该标号可在其他的文件中引用。EXPORT可用GLOBAL代替。标号在程序中区分大小写,[WEAK]选项

11、声明其他的同名标号优先于该标号被引用。5.伪指令:DCD语法格式:DCD(或DCDU)表达式DCD(或DCDU)伪指令用于分配一片连续的字存储单元并用伪指令中指定的表达式初始化。其中,表达式可以为程序标号或数字表达式。DCD也可用“&”代替。用DCD分配的字存储单元是字对齐的,而用DCDU分配的字存储单元并不严格字对齐。PRESERVE8;指示编译器8字节对齐(keil编译器时需要加上)THUMB;指示编译器为THUMB指令定义复位段(中断向量表),并初始化段名:RESET大小:__Vectors_Size数据段:D

12、ATA只读:READONLY按字节对齐:默认ALIGN向量表起始地址:__Vectors向量表终止地址:__Vectors_EndAREARESET,DATA,READONLYEXPORT__VectorsEXPORT__Vectors_EndEXPORT__Vectors_Size__VectorsDCD__initial_sp;TopofS

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。