完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Stack—栈 Stack_Size EQU 0x00000400 ;EQU宏定义类C中define AREA STACK, NOINIT, READWRITE, ALIGN=3 ;定义一个空间命名为STACK,不初始化,可读可写,ALIGN=3(2的3次方),8字节对齐 Stack_Mem SPACE Stack_Size ;开辟一个大小等于Stack_Size的,命名为Stack_Mem的内存空间。 __initial_sp ;标号__initial_sp 紧挨着SPACE 语句放置,表示栈的结束地址,即栈顶地址,栈是由高向低生长的。 Heap 堆 Heap_Size EQU 0x00000200 ;宏定义 AREA HEAP, NOINIT, READWRITE, ALIGN=3 ;定义一个名为Heap的空间 __heap_base ;堆的起始地址 Heap_Mem SPACE Heap_Size ;开辟大小等于堆的空间 __heap_limit ;堆的结束地址 命令指令 PRESERVE8 ;指定当前文件的堆栈按照8 字节对齐。 THUMB ;表示后面指令兼容THUMB 指令。THUBM是ARM以前的指令集,16bit,现在Cortex-M系列的都使用THUMB-2 指令集,THUMB-2 是32 位的,兼容16 位和32 位的指令,是THUMB 的超级。 向量表 AREA RESET, DATA, READONLY ;定义数据段名为RESET,可读, EXPORT __Vectors ;声明此变量具有全局属性 EXPORT __Vectors_End ;同上 EXPORT __Vectors_Size ;同上 向量表 __Vectors DCD __initial_sp ;栈顶地址 DCD Reset_Handler ;复位程序地址 DCD NMI_Handler DCD HardFault_Handler DCD MemManage_Handler DCD BusFault_Handler DCD UsageFault_Handler DCD 0 ; 0 表示保留 DCD 0 DCD 0 DCD 0 DCD SVC_Handler DCD DebugMon_Handler DCD 0 DCD PendSV_Handler DCD SysTick_Handler ;外部中断开始 DCD WWDG_IRQHandler DCD PVD_IRQHandler DCD TAMP_STAMP_IRQHandler ;限于篇幅,中间代码省略 DCD LTDC_IRQHandler DCD LTDC_ER_IRQHandler DCD DMA2D_IRQHandler __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors ;向量表的大小计算 DCD:数据定义( Data Definition )伪指令 一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。 语法格式: 标号 DCD(或 DCDU) 表达式 DCD(或 DCDU)伪指令用于分配一片连续的字存储单元并用指定的表达式初始化。其中表达式可以为程序标号或数字表达式。 DCD 也可用 “ &” 代替。 用 DCD 分配的字存储单元是字对齐的,而用 DCDU 分配的字存储单元并不严格字对齐。 语法 AREA 段名 属性1, 属性2, …… 作用 用于定义一个代码段或数据段。 段名若以数字开头,则该段名需用“|”括起来,如|1_test| 。 属性字段表示该代码段(或数据段)的相关属性,多个属性用逗号分隔。 常用的属性如下: CODE 定义代码段 DATA 定义数据段 READONLY 指定本段为只读,代码段默认为READONLY READWRITE 指定本段为可读可写,数据段的默认为READWRITE MON 定义一个通用的段,不包含任何的用户代码和数据。各源文件中同名的COMMON段共享同一段存储单元。 实例:AREA Init,CODE,READONLY 语法 ALIGN {表达式{,偏移量}} 作用 通过添加填充字节的方式,使当前位置满足一定的对齐方式。其中,表达式的值用于指定对齐方式,可能的取值为2的幂,如1、2、4、8、16等。若未指定表达式,则将当前位置对齐到下一个字的位置。偏移量也为一个数字表达式,若使用该字段,则当前位置的对齐方式为:2的表达式次幂+偏移量。 实例:AREA Init,CODE,READONLY,ALIGN=3 语法 THUMB 作用 表示以下的代码都是THUMB代码。 EQUIRE8及PRESERVE8 语法 REQUIRE (语法格式:requite label) 作用 REQUIRE伪操作用于指定段之间的相互依赖关系. 格式如下: REQUIRE lable ;其中lable 为所需要的标号的名称. 当进行连接处理包含有“REQUIRE label”伪指令的源文件时,定义label 的源文件也将呗包含 语法 REQUIRE8及PRESERVE8 作用 REQUIRE8 伪操作指示当前代码中要求数据栈8字节对齐 PRESERVE8 伪操作表示当前代码中数据栈是8字节对齐的 说明 LDRD及STRD指令要求内存单元地址是8字节对齐的.当在程序中使用这些指令在数据栈中传送数据时,要求该数据栈是8字节对齐的,这时就需要用REQUIRE8伪指令来说明.链接器要保证要求8字节对齐的数据栈代码只能被数据栈是8字节对齐的代码调用. 复位程序 AREA |.text|, CODE, READONLY ;定义一个名称为.text 的代码段,可读。 Reset_Handler PROC ;定义Reset_Handler子程序 EXPORT Reset_Handler [WEAK] ;能被外部调用,弱定义 IMPORT SystemInit ;引用C程序 SystemInit IMPORT __main ;同上 LDR R0, =SystemInit ;将SystemInit中的信息加载到R0中 BLX R0 ;跳转到R0所给的地址中根据LSE 确定处理器的状态,还要把跳转前的下条指令地址保存到LR LDR R0, =__main BX R0 ;跳转到R0中,不返回 ENDP |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1618 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1545 浏览 1 评论
979 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1597 浏览 2 评论
1864浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
645浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
516浏览 3评论
532浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
505浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 17:55 , Processed in 0.779752 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号