好文档 - 专业文书写作范文服务资料分享网站

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

天下 分享 时间: 加入收藏 我要投稿 点赞

般是返回指令(RET)。

7. 伪指令:IMPORT

语法格式:IMPORT 标号 {[WEAK]}

IMPORT伪指令用于通知编译器要使用的标号在其他源文件中定义,但是在当前源文件中引用,而且无论当前源文件是否引用该标号,该标号均会被加入到当前源文件的标号表中。 标号在程序中区分大小写,[WEAK]选项表示当所有的源文件都没有定义这样的一个标号时,编译器也不给出错误信息,在多数情况下将该标号置为0,若该标号为B或BL指令引用,则将B或BL指令置为NOP操作。

8. 伪指令:LDR

语法格式:LDR{执行条件,如EQ、NE等} register,=expr/label_expr

大范围的地址读取伪指令LDR用于加载32位的立即数或一个地址值到指定寄存器,在汇编编译源程序时,LDR伪指令被编译器替换成一条合适的指令。若加载的常数未超出MOV或MVN的范围,则使用MOV或MVN指令代替LDR伪指令,否则汇编器将常量放入字池,并使用一条程序相对偏移的LDR指令从文字池读出常量。

9. Thumb跳转指令:B、BL、BX

语法格式: B{执行条件,如EQ、NE等} 带链接 BL{执行条件,如EQ、NE等} 带状态切换 BX{执行条件,如EQ、NE等}

label label label

定义代码段(异常处理函数),并初始化

段名:.text

代码段:CODE

只读:READONLY

按字节对齐:默认ALIGN

代码段起始地址:Reset_Handler

AREA |.text|, CODE, READONLY Reset_Handler PROC

EXPORT Reset_Handler [WEAK] IMPORT SystemInit IMPORT __main

LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP

10. 内置变量: {PC} 或“.” 当前指令地址 11. 汇编语句格式规范:

ARM汇编中,所有标号必须在一行的顶格书写,其后面不要添加“:”,而所有指令均不能顶格书写。

ARM汇编器对标识符大小写敏感,书写标号及指令时字母大小写要一致,在ARM汇编程序中,一个ARM指令、伪指令、寄存器名可以全部为大写字母,也可以全部为小写字母,但不要大小写混合使用。 注释使用“;”,注释内容由“;”开始到此行结束,注释可以在一行的顶格书写。

源程序中允许有空行,适当地插入空行可以提高源程序代码的可读性。如果单行太长,可以

使用字符“\\”将其分行,“\\”后不能有任何字符,包括空格和制表符等。 对于变量的设置,常量的定义,其标识符必须在一行的顶格书写。

异常处理函数(续1)

NMI_Handler PROC

EXPORT NMI_Handler B . ENDP HardFault_Handler PROC

EXPORT HardFault_Handler B . ENDP MemManage_Handler\\ PROC

EXPORT MemManage_Handler B . ENDP BusFault_Handler\\

PROC

EXPORT BusFault_Handler B . ENDP UsageFault_Handler\\

PROC

EXPORT UsageFault_Handler B . ENDP SVC_Handler PROC

EXPORT SVC_Handler B . ENDP DebugMon_Handler\\

PROC

EXPORT DebugMon_Handler B . ENDP PendSV_Handler PROC

EXPORT PendSV_Handler B . ENDP SysTick_Handler PROC

EXPORT SysTick_Handler B .

ENDP

[WEAK]

[WEAK]

[WEAK]

[WEAK]

[WEAK]

[WEAK]

[WEAK]

[WEAK]

[WEAK]

异常处理函数(续2)

这个默认的异常处理函数处理所有外部中断 Default_Handler PROC

EXPORT WWDG_IRQHandler [WEAK] EXPORT PVD_IRQHandler [WEAK] EXPORT TAMPER_IRQHandler [WEAK] EXPORT RTC_IRQHandler [WEAK] EXPORT FLASH_IRQHandler [WEAK] EXPORT RCC_IRQHandler [WEAK] EXPORT EXTI0_IRQHandler [WEAK] EXPORT EXTI1_IRQHandler [WEAK] EXPORT EXTI2_IRQHandler [WEAK] EXPORT EXTI3_IRQHandler [WEAK] EXPORT EXTI4_IRQHandler [WEAK] EXPORT DMA1_Channel1_IRQHandler [WEAK] EXPORT DMA1_Channel2_IRQHandler [WEAK] EXPORT DMA1_Channel3_IRQHandler [WEAK] EXPORT DMA1_Channel4_IRQHandler [WEAK] EXPORT DMA1_Channel5_IRQHandler [WEAK] EXPORT DMA1_Channel6_IRQHandler [WEAK] EXPORT DMA1_Channel7_IRQHandler [WEAK] EXPORT ADC1_2_IRQHandler [WEAK] EXPORT CAN1_TX_IRQHandler [WEAK] EXPORT CAN1_RX0_IRQHandler [WEAK] EXPORT CAN1_RX1_IRQHandler [WEAK] EXPORT CAN1_SCE_IRQHandler [WEAK] EXPORT EXTI9_5_IRQHandler [WEAK] EXPORT TIM1_BRK_IRQHandler [WEAK] EXPORT TIM1_UP_IRQHandler [WEAK] EXPORT TIM1_TRG_COM_IRQHandler [WEAK] EXPORT TIM1_CC_IRQHandler [WEAK] EXPORT TIM2_IRQHandler [WEAK] EXPORT TIM3_IRQHandler [WEAK] EXPORT TIM4_IRQHandler [WEAK] EXPORT I2C1_EV_IRQHandler [WEAK] EXPORT I2C1_ER_IRQHandler [WEAK] EXPORT I2C2_EV_IRQHandler [WEAK] EXPORT I2C2_ER_IRQHandler [WEAK] EXPORT SPI1_IRQHandler [WEAK] EXPORT SPI2_IRQHandler [WEAK] EXPORT USART1_IRQHandler [WEAK] EXPORT USART2_IRQHandler [WEAK] EXPORT USART3_IRQHandler [WEAK]

EXPORT EXTI15_10_IRQHandler [WEAK] EXPORT RTCAlarm_IRQHandler [WEAK] EXPORT OTG_FS_WKUP_IRQHandler [WEAK] EXPORT TIM5_IRQHandler [WEAK] EXPORT SPI3_IRQHandler [WEAK] EXPORT UART4_IRQHandler [WEAK] EXPORT UART5_IRQHandler [WEAK] EXPORT TIM6_IRQHandler [WEAK] EXPORT TIM7_IRQHandler [WEAK] EXPORT DMA2_Channel1_IRQHandler [WEAK] EXPORT DMA2_Channel2_IRQHandler [WEAK] EXPORT DMA2_Channel3_IRQHandler [WEAK] EXPORT DMA2_Channel4_IRQHandler [WEAK] EXPORT DMA2_Channel5_IRQHandler [WEAK] EXPORT ETH_IRQHandler [WEAK] EXPORT ETH_WKUP_IRQHandler [WEAK] EXPORT CAN2_TX_IRQHandler [WEAK] EXPORT CAN2_RX0_IRQHandler [WEAK] EXPORT CAN2_RX1_IRQHandler [WEAK] EXPORT CAN2_SCE_IRQHandler [WEAK] EXPORT OTG_FS_IRQHandler [WEAK]

;下面的全部异常处理函数标号都对应同一个地址,这个地址也是Default_Handler的地址 WWDG_IRQHandler PVD_IRQHandler TAMPER_IRQHandler RTC_IRQHandler FLASH_IRQHandler RCC_IRQHandler EXTI0_IRQHandler EXTI1_IRQHandler EXTI2_IRQHandler EXTI3_IRQHandler EXTI4_IRQHandler

DMA1_Channel1_IRQHandler DMA1_Channel2_IRQHandler DMA1_Channel3_IRQHandler DMA1_Channel4_IRQHandler DMA1_Channel5_IRQHandler DMA1_Channel6_IRQHandler DMA1_Channel7_IRQHandler ADC1_2_IRQHandler CAN1_TX_IRQHandler CAN1_RX0_IRQHandler

CAN1_RX1_IRQHandler CAN1_SCE_IRQHandler EXTI9_5_IRQHandler TIM1_BRK_IRQHandler TIM1_UP_IRQHandler

TIM1_TRG_COM_IRQHandler TIM1_CC_IRQHandler TIM2_IRQHandler TIM3_IRQHandler TIM4_IRQHandler I2C1_EV_IRQHandler I2C1_ER_IRQHandler I2C2_EV_IRQHandler I2C2_ER_IRQHandler SPI1_IRQHandler SPI2_IRQHandler USART1_IRQHandler USART2_IRQHandler USART3_IRQHandler EXTI15_10_IRQHandler RTCAlarm_IRQHandler

OTG_FS_WKUP_IRQHandler TIM5_IRQHandler SPI3_IRQHandler UART4_IRQHandler UART5_IRQHandler TIM6_IRQHandler TIM7_IRQHandler

DMA2_Channel1_IRQHandler DMA2_Channel2_IRQHandler DMA2_Channel3_IRQHandler DMA2_Channel4_IRQHandler DMA2_Channel5_IRQHandler ETH_IRQHandler

ETH_WKUP_IRQHandler CAN2_TX_IRQHandler CAN2_RX0_IRQHandler CAN2_RX1_IRQHandler CAN2_SCE_IRQHandler OTG_FS_IRQHandler

B . ENDP

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

般是返回指令(RET)。7.伪指令:IMPORT语法格式:IMPORT标号{[WEAK]}IMPORT伪指令用于通知编译器要使用的标号在其他源文件中定义,但是在当前源文件中引用,而且无论当前源文件是否引用该标号,该标号均会被加入到当前源文件的标号表中。标号在程序中区分大小写,[WEAK]选项表示当所有的源文件都没有定义这样的一个标号时
推荐度:
点击下载文档文档为doc格式
3rmzx269sd48fsc2ak5p
领取福利

微信扫码领取福利

微信扫码分享