当前位置:首页 > 单片机 > 单片机
[导读] 想要读懂启动文件,需要一些基本的汇编基础。 1 在汇编语言中,注释是 ; 2汇编ARM指令DCDDCD ( DCDU )用于分配一片连续的字存储单元并用指定的数据初始化。 语法格式: 标号 DCD (或 DCDU ) 表达式 DCD (或 DC

想要读懂启动文件,需要一些基本的汇编基础。

1 在汇编语言中,注释是 ;

2汇编ARM指令DCD

DCD ( DCDU )用于分配一片连续的字存储单元并用指定的数据初始化。

语法格式:
标号 DCD (或 DCDU ) 表达式

DCD (或 DCDU )伪指令用于分配一片连续的字存储单元并用伪指令中指定的表达式初始化。其中,表达式可以

为程序标号或数字表达式。 DCD 也可用 “ & ” 代替。

用 DCD 分配的字存储单元是字对齐的,而用 DCDU 分配的字存储单元并不严格字对齐。

使用示例:
DataTest DCD 4 , 5 , 6 ;分配一片连续的字存储单元并初始化。

3 [weak] 的意思是该函数优先级比较弱,如果其它地方定义了一个同名函数,那么此处的这个函数就被取代了。


语法格式为 EXPORT 标号 {[WEAK]} 。EXPORT 可用GLOBAL代替。

4AREA指令的理解

AREA指令是一个伪指令,用于段定义。ARM汇编程序由段组成,段是相对独立的指令或数据单位,每个段由AREA

伪指令定义,并定义段的属性。


AREA参数说明:


*STACK——AREA指令的一个参数,定义段名称


*NOINIT——AREA指令的一个参数,指定本数据段仅仅保留了内在单元,而将句初始值写入内存单元,此时内存单元值初始化为0


*READWRITE——指定本段为可读可写,数据段默认为READWRITE.


READWRITE(读写)、READONLY(只读)


*ALIGN——也是一个伪指令,指定对齐方式。ALIGN n 指令的对齐值有两种选择:n或者2^n


例子:开辟一个堆栈段,段名为STACK,定义为可读可写,将内存单元初始化为0,对齐方式为8字节对齐。


AREA STACK,NOINIT,READWRITE,ALIGN=3


;********************(C)COPYRIGHT2011STMicroelectronics********************

;*FileName:startup_stm32f10x_hd.s

;*Author:MCDApplicationTeam

;*Version:V3.5.0

;*Date:11-March-2011

;*Description:STM32F10xHighDensityDevicesvectortableforMDK-ARM

;*toolchain.

;*Thismoduleperforms:

;*-SettheinitialSP

;*-SettheinitialPC==Reset_Handler

;*-SetthevectortableentrieswiththeexceptionsISRaddress

;*-Configuretheclocksystemandalsoconfiguretheexternal

;*SRAMmountedonSTM3210E-EVALboardtobeusedasdata

;*memory(optional,tobeenabledbyuser)

;*-Branchesto__mainintheClibrary(whicheventually

;*callsmain()).

;*AfterResettheCortexM3processorisinThreadmode,

;*priorityisPrivileged,andtheStackissettoMain.

;*<<>>

;*******************************************************************************

;THEPRESENTFIRMWAREWHICHISFORGUIDANCEONLYAIMSATPROVIDINGCUSTOMERS

;WITHCODINGINFORMATIONREGARDINGTHEIRPRODUCTSINORDERFORTHEMTOSAVETIME.

;ASARESULT,STMICROELECTRONICSSHALLNOTBEHELDLIABLEFORANYDIRECT,

;INDIRECTORCONSEQUENTIALDAMAGESWITHRESPECTTOANYCLAIMSARISINGFROMTHE

;CONTENTOFSUCHFIRMWAREAND/ORTHEUSEMADEBYCUSTOMERSOFTHECODING

;INFORMATIONCONTAINEDHEREININCONNECTIONWITHTHEIRPRODUCTS.

;*******************************************************************************

;Amountofmemory(inbytes)allocatedforStack

;Tailorthisvaluetoyourapplicationneeds

;StackConfiguration

;StackSize(inBytes)<0x0-0xFFFFFFFF:8>

;

Stack_SizeEQU0x00001000;定义栈大小为40960x1000=4096

AREASTACK,NOINIT,READWRITE,ALIGN=3

Stack_MemSPACEStack_Size

__initial_sp

;HeapConfiguration

;HeapSize(inBytes)<0x0-0xFFFFFFFF:8>

;

Heap_SizeEQU0x00001000;定义堆的空间为1024

AREAHEAP,NOINIT,READWRITE,ALIGN=3

__heap_base

Heap_MemSPACEHeap_Size

__heap_limit

PRESERVE8

THUMB

;VectorTableMappedtoAddress0atReset

AREARESET,DATA,READONLY

EXPORT__Vectors

EXPORT__Vectors_End

EXPORT__Vectors_Size

__VectorsDCD__initial_sp;TopofStack

DCDReset_Handler;ResetHandler

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭