当前位置:首页 > 单片机 > 单片机
[导读]概况:STM32库版本:V3.5.0startup_stm32f10x_hd.s文件模块功能:设置初始堆栈指针;用ISR异常处理程序地址来设置向量表条目;配置系统时钟,配置安装在STM3210E-EVAL板子上被用作数据内存外部sram;设置初始PC程序计

概况:

STM32库版本:V3.5.0

startup_stm32f10x_hd.s文件模块功能:


设置初始堆栈指针;

用ISR异常处理程序地址来设置向量表条目;

配置系统时钟,配置安装在STM3210E-EVAL板子上被用作数据内存外部sram;

设置初始PC程序计数器 指向__iar_program_start代码段地址。

在这个文件中的模块被包含在libs库中,可能被替换通过任何用户定义的模块--被PUBLIC定义的_program_start或者用户定义的一个开始标识;

为了覆盖在库中定义的cstartup,只需添加被修改版本到 工作台项目;

矢量表通常是位于地址0;

当在RAM中调试时,矢量表位于ram中,至少对齐2^6;

对于C-SPY来说,“__vector_table”有特殊的意义;

堆栈指针SP能够在__vector_table中找到,如果NVIC(嵌套中断向量控制器) vectortable register (VTOR)的地址不为0,则初始化到这块地址。

启动代码解析:

为简单 明朗些,分成几部分展示:

关于IAR指令,参见《EWARM_AssemblerReference.ENU.pdf》文档。

.icf内存配置文件,与这个启动文件也是有大大的关系。

关于.icf 结构、功能分析,参见--stm32存储器结构、 IAR 开发环境下的.icf 文件、.map文件 解析
1、


;;格式:PROGRAMsymbol---其中symbol为分配模块的名字;;开始一个模块;PROGRAM和NAME指令的别名

MODULE?cstartup;汇编模块开始

;;Forwarddeclarationofsections.前置段声明

;;格式:SECTIONsection:type[flag][(align)]

;;NOROOT表示如果这个段里的标号(如CSTACK/.intvec等)没引用,则被linker舍弃;ROOT则是一定不舍弃。

;;(1)表示字节对齐数,为2的幂,(2)表示4字节对齐,(3)表示8字节对齐

;;定义各种模式STACK,具体大小、位置是由linker文件(IAR中.icf)决定的,这些STACK都定义在内部RAM中

SECTIONCSTACK:DATA:NOROOT(3);CSTACK数据段

;;通常INTVEC段被连接到flash闪存的开始地址,应该在.icf文件中有定义,如stmf10X系列闪存起始地址:0x08000000

SECTION.intvec:CODE:NOROOT(2);.intvec代码段

EXTERN__iar_program_start;;外部变量声明

EXTERNSystemInit;SystemInit声明,于外部定义

PUBLIC__vector_table;;外部可调用;向其他模块输出符号。


2、


DATA

;;中断向量表

__vector_table;;格式:DCDexpr[,expr]…;Generates32-bitconstants.生成32bit常数

DCDsfe(CSTACK);;格式:SFE(section[{+|-}offset])返回section段结束地址,SFB(section)返回section段开始地址;

DCDReset_Handler;ResetHandler

DCDNMI_Handler;NMIHandler

DCDHardFault_Handler;HardFaultHandler

DCDMemManage_Handler;MPUFaultHandler

DCDBusFault_Handler;BusFaultHandler

DCDUsageFault_Handler;UsageFaultHandler

DCD0;Reserved

DCD0;Reserved

DCD0;Reserved

DCD0;Reserved

DCDSVC_Handler;SVCallHandler

DCDDebugMon_Handler;DebugMonitorHandler

DCD0;Reserved

DCDPendSV_Handler;PendSVHandler

DCDSysTick_Handler;SysTickHandler

;ExternalInterrupts

DCDWWDG_IRQHandler;WindowWatchdog

DCDPVD_IRQHandler;PVDthroughEXTILinedetect

DCDTAMPER_IRQHandler;Tamper

DCDRTC_IRQHandler;RTC

DCDFLASH_IRQHandler;Flash

DCDRCC_IRQHandler;RCC

DCDEXTI0_IRQHandler;EXTILine0

DCDEXTI1_IRQHandler;EXTILine1

DCDEXTI2_IRQHandler;EXTILine2

DCDEXTI3_IRQHandler;EXTILine3

DCDEXTI4_IRQHandler;EXTILine4

DCDDMA1_Channel1_IRQHandler;DMA1Channel1

DCDDMA1_Channel2_IRQHandler;DMA1Channel2

DCDDMA1_Channel3_IRQHandler;DMA1Channel3

DCD DMA1_Cha

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

1-汇编编写的启动文件 startup_stm32f10x_hd.s:设置堆栈指针、设置PC指针、初始化中断向量表、配置系统时钟、对用C库函数_main最终去到C的世界

关键字: STM32 固件库

关注星标公众号,不错过精彩内容转自|茶话MCU基于STM32芯片的工程代码里有个很重要的文件,即启动文件。该文件主要由汇编语言写成,文件名冠以.s结尾,它是芯片程序运行首先要执行的一个文件。其功能及作用简单点说就是做执行...

关键字: STM32 启动文件

学习目标 从无到有创建一个STM32的Keil工程 点亮板子上的一个LED 工程创建 下载固件库 待下载的固件库版本为 STM32F10x_StdPeriph_Lib_V3.5.0: 官方网址: https://www....

关键字: MDK STM32 固件库

简单地说,单片机就是一个小计算机系统。为了说明清楚这个问题,得要从计算机说起。提到计算机,大家可能马上会想到“显示器、鼠标、键盘”,不过,这不是一个计算机的核心和关键,计算机的核心部分在一边的机箱里呢。打开机箱,可以看到...

关键字: iar keil 单片机编程软件

单片机编程软件是单片机开发不可缺少的工具,缺少单片机编程软件便如同回到原始社会。单片机编程软件目前使用较多的为keil单片机编程软件和IAR单片机编程软件。本文中,主要为大家讲解keil4与keil5的区别以及keil5...

关键字: iar keil 单片机编程软甲

对于单片机编程软件,小编个人较为推崇IAR。本文将基于3大方面介绍IAR单片机编程软件:一、IAR单片机编程软件开发环境界面设置,二、IAR单片机编程软件快捷键,三、IAR单片机编程软件使用小技巧。通过IAR单片机编程软...

关键字: iar 单片机编程软件 快捷键

目前,流通度较大的单片机编程软件为KEIL、IAR。其中,IAR单片机编程软件深受用户喜爱。初接触IAR单片机编程软件时,很多用户对其设置充满疑惑。故本文将对IAR单片机编程软件设置加以介绍,帮助大家掌握这款单片机编程软...

关键字: iar 单片机编程软件 设置

单片机编程软件是单片机开发不可缺少的工具之一,目前市场流通的单片机编程软件主要为IAR单片机编程软件和KEIL单片机编程软件。本文中,将为大家讲解IAR单片机编程软件编译优化问题,一起来了解下吧。

关键字: iar 单片机编程软件 编译优化

单片机编程软件在实际工程中具备诸多应用,每一款单片机编程软件乃至不同版本的单片机编程软件皆兼具自身特色。本文将涉及两方面内容,一是IAR单片机编程软件的简单介绍,二是阐述IAR单片机编程软件从建立工程到烧录程序的过程。如...

关键字: iar 单片机编程软件 烧录程序

Keil和IAR单片机编程软件,是当前流通度庞大的两款单片机编程软件。而对于单片机编程软件的使用,各自存在一定区别。本文中,将为大家讲解IAR单片机编程软件建立stm32工程的详细方法,希望大家通过本文能够有所收获哦。

关键字: iar STM32 单片机编程软件
关闭