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

上传人:b****1 文档编号:3209679 上传时间:2022-11-20 格式:PDF 页数:19 大小:486.89KB
下载 相关 举报
STM启动代码分析简化实战.pdf_第1页
第1页 / 共19页
STM启动代码分析简化实战.pdf_第2页
第2页 / 共19页
STM启动代码分析简化实战.pdf_第3页
第3页 / 共19页
STM启动代码分析简化实战.pdf_第4页
第4页 / 共19页
STM启动代码分析简化实战.pdf_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

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

《STM启动代码分析简化实战.pdf》由会员分享,可在线阅读,更多相关《STM启动代码分析简化实战.pdf(19页珍藏版)》请在冰豆网上搜索。

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

本文通过对STM32的官方固件库STM32F10x_StdPeriph_Lib_V3.5.0里的MDK启动文件分析,简化部分不需要的代码,并从繁杂的固件库里,精炼出一个类似于“helloworld”的入门实战小程序点亮一个LED。

该工程仅仅包含一个启动文件和一个有main函数的C文件。

本文初衷:

不用固件库不用固件库建立自己的工程建立自己的工程!

实验软件:

KeiluVision4实验硬件:

神舟IV号开发板芯片型号:

STM32F107VCSTM32启动代码启动代码分析分析、简化简化、实战实战汇编基础汇编基础:

1.伪指令伪指令:

EQU语法格式:

名称EQU表达式,类型EQU伪指令用于为程序中的常量、标号等定义一个等效的字符名称,类似于C语言的#define。

其中EQU可以用“*”代替。

名称为EQU伪指令定义的字符名称,当表达式为32位的常量时,可以指定表达式的数据类型,可以有一下三种类型:

CODE16、CODE32和DATA2.伪指令伪指令:

AREA语法格式:

AREA段名,属性1,属性2AREA命令指示汇编程序汇编一个新的代码段或数据段。

段是独立的、指定的、不可见的代码或数据块,它们由链接程序处理。

段名:

可以为段选择任何段名。

但是,以一个数字开始的名称必须包含在竖杠号内,否则会产生一个缺失段名错误。

例如,|1_DataArea|。

有些名称是习惯性的名称。

例如:

|.text|用于表示由C编译程序产生的代码段,或用于以某种方式与C库关联的代码段。

属性字段表示该代码段(或数据段)的相关属性,多个属性用逗号分隔。

常用的属性如下:

CODE属性:

用于定义代码段,默认为READONLY。

DATA属性:

用于定义数据段,默认为READWRITE。

READONLY属性:

指定本段为只读,代码段默认为READONLY。

READWRITE属性:

指定本段为可读可写,数据段的默认属性为READWRITE。

ALIGN属性:

使用方式为ALIGN表达式。

在默认时,ELF(可执行连接文件)的代码段和数据段是按字对齐的,表达式的取值范围为031,相应的对齐方式为2表达式次方。

NOINIT属性:

表示数据段是未初始化的或初始化为零。

其只包含零初始化的空间保留命令SPACE或DCB、DCD、DCDU、DCQ、DCQU、DCW或DCWU。

可以决定在链接时AREA是未初始化的还是零初始化的。

一个汇编语言程序至少要包含一个段,当程序太长时,也可以将程序分为多个代码段和数据段。

3.伪指令伪指令:

SPACE用于分配一片连续的存储单元启动代码启动代码分析分析:

定义栈定义栈段段,不初始化,不初始化栈名:

STACK大小:

Stack_Size只分配空间不做初始化或者初始化为0:

NOINIT可读可写:

READWRITE:

按8字节对齐:

ALIGN3栈顶地址:

_initial_spStack_SizeEQU0x00000400AREASTACK,NOINIT,READWRITE,ALIGN=3Stack_MemSPACEStack_Size_initial_sp定义堆定义堆段段,不初始化,不初始化堆名:

HEAP大小:

Heap_Size只分配空间不做初始化或者初始化为0:

NOINIT可读可写:

READWRITE:

按8字节对齐:

ALIGN3堆起始地址:

_heap_base堆终止地址:

_heap_limitHeap_SizeEQU0x00000200AREAHEAP,NOINIT,READWRITE,ALIGN=3_heap_baseHeap_MemSPACEHeap_Size_heap_limit4.伪指令伪指令:

EXPORT语法格式:

EXPORT标号WEAKEXPORT伪指令用于在程序中声明一个全局的标号,该标号可在其他的文件中引用。

EXPORT可用GLOBAL代替。

标号在程序中区分大小写,WEAK选项声明其他的同名标号优先于该标号被引用。

5.伪指令伪指令:

DCD语法格式:

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

其中,表达式可以为程序标号或数字表达式。

DCD也可用“&”代替。

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

PRESERVE8;指示编译器8字节对齐(keil编译器时需要加上)THUMB;指示编译器为THUMB指令定义复位定义复位段段(中断向量表)(中断向量表),并初始化,并初始化段名:

RESET大小:

_Vectors_Size数据段:

DATA只读:

READONLY按字节对齐:

默认ALIGN向量表起始地址:

_Vectors向量表终止地址:

_Vectors_EndAREARESET,DATA,READONLYEXPORT_VectorsEXPORT_Vectors_EndEXPORT_Vectors_Size_VectorsDCD_initial_sp;TopofStackDCDReset_Handler;ResetHandlerDCDNMI_Handler;NMIHandlerDCDHardFault_Handler;HardFaultHandlerDCDMemManage_Handler;MPUFaultHandlerDCDBusFault_Handler;BusFaultHandlerDCDUsageFault_Handler;UsageFaultHandlerDCD0;ReservedDCD0;ReservedDCD0;ReservedDCD0;ReservedDCDSVC_Handler;SVCallHandlerDCDDebugMon_Handler;DebugMonitorHandlerDCD0;ReservedDCDPendSV_Handler;PendSVHandlerDCDSysTick_Handler;SysTickHandler;ExternalInterruptsDCDWWDG_IRQHandler;WindowWatchdogDCDPVD_IRQHandler;PVDthroughEXTILinedetectDCDTAMPER_IRQHandler;TamperDCDRTC_IRQHandler;RTCDCDFLASH_IRQHandler;FlashDCDRCC_IRQHandler;RCCDCDEXTI0_IRQHandler;EXTILine0DCDEXTI1_IRQHandler;EXTILine1DCDEXTI2_IRQHandler;EXTILine2DCDEXTI3_IRQHandler;EXTILine3DCDEXTI4_IRQHandler;EXTILine4DCDDMA1_Channel1_IRQHandler;DMA1Channel1DCDDMA1_Channel2_IRQHandler;DMA1Channel2DCDDMA1_Channel3_IRQHandler;DMA1Channel3DCDDMA1_Channel4_IRQHandler;DMA1Channel4DCDDMA1_Channel5_IRQHandler;DMA1Channel5DCDDMA1_Channel6_IRQHandler;DMA1Channel6DCDDMA1_Channel7_IRQHandler;DMA1Channel7DCDADC1_2_IRQHandler;ADC1andADC2DCDCAN1_TX_IRQHandler;CAN1TXDCDCAN1_RX0_IRQHandler;CAN1RX0DCDCAN1_RX1_IRQHandler;CAN1RX1DCDCAN1_SCE_IRQHandler;CAN1SCEDCDEXTI9_5_IRQHandler;EXTILine9.5DCDTIM1_BRK_IRQHandler;TIM1BreakDCDTIM1_UP_IRQHandler;TIM1UpdateDCDTIM1_TRG_COM_IRQHandler;TIM1TriggerandCommutationDCDTIM1_CC_IRQHandler;TIM1CaptureCompareDCDTIM2_IRQHandler;TIM2DCDTIM3_IRQHandler;TIM3DCDTIM4_IRQHandler;TIM4DCDI2C1_EV_IRQHandler;I2C1EventDCDI2C1_ER_IRQHandler;I2C1ErrorDCDI2C2_EV_IRQHandler;I2C2EventDCDI2C2_ER_IRQHandler;I2C1ErrorDCDSPI1_IRQHandler;SPI1DCDSPI2_IRQHandler;SPI2DCDUSART1_IRQHandler;USART1DCDUSART2_IRQHandler;USART2DCDUSART3_IRQHandler;USART3DCDEXTI15_10_IRQHandler;EXTILine15.10DCDRTCAlarm_IRQHandler;RTCalarmthroughEXTIlineDCDOTG_FS_WKUP_IRQHandler;USBOTGFSDCD0;ReservedDCD0;ReservedDCD0;ReservedDCD0;ReservedDCD0;ReservedDCD0;ReservedDCD0;ReservedDCDTIM5_IRQHandler;TIM5DCDSPI3_IRQHandler;SPI3DCDUART4_IRQHandler;UART4DCDUART5_IRQHandler;UART5DCDTIM6_IRQHandler;TIM6DCDTIM7_IRQHandler;TIM7DCDDMA2_Channel1_IRQHandler;DMA2Channel1DCDDMA2_Channel2_IRQHandler;DMA2Channel2DCDDMA2_Channel3_IRQHandler;DMA2Channel3DCDDMA2_Channel4_IRQHandler;DMA2Channel4DCDDMA2_Channel5_IRQHandler;DMA2Channel5DCDETH_IRQHandler;EthernetDCDETH_WKUP_IRQHandler;EthernetWakeupthroughEXTIlineDCDCAN2_TX_IRQHandler;CAN2TXDCDCAN2_RX0_IRQHandler;CAN2RX0DCDCAN2_RX1_IRQHandler;CAN2RX1DCDCAN2_SCE_IRQHandler;CAN2SCEDCDOTG_FS_IRQHandler;USBOTGFS_Vectors_End

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1