历史上的今天
返回首页

历史上的今天

今天是:2024年10月19日(星期六)

正在发生

2021年10月19日 | stm32专题四:启动文件分析

2021-10-19 来源:eefocus

stm32的启动文件startup_stm32f10x_hd.s主要包含以下6个部分:


分配栈,包括大小和栈顶地址(不初始化);

分配堆,包括大小和堆起始地址(不初始化);

初始化中断向量表,将栈顶地址初始化为FLASH的0地址,复位程序为0X04地址,并将程序计数器指针PC指向复位程序0X04;

复位程序;

中断服务程序;

初始化1和2分配的堆栈;

以下是启动文件:


;******************** (C) COPYRIGHT 2011 STMicroelectronics ********************

;* File Name          : startup_stm32f10x_hd.s

;* Author             : MCD Application Team

;* Version            : V3.5.0

;* Date               : 11-March-2011

;* Description        : STM32F10x High Density Devices vector table for MDK-ARM 

;*                      toolchain. 

;*                      This module performs:

 

;*                      - Set the initial SP

;*                      - 初始化堆栈指针SP

 

;*                      - Set the initial PC == Reset_Handler

;*                      - 初始化PC指针 == Reset_Handler复位程序,上电复位后的第一个程序

 

;*                      - Set the vector table entries with the exceptions ISR address

;*                      - 以规定的ISR(中断服务请求)地址来设置中断向量表

 

;*                      - Configure the clock system and also configure the external 

;*                        SRAM mounted on STM3210E-EVAL board to be used as data 

;*                        memory (optional, to be enabled by user)

;*                      - 配置系统时钟,配置挂载到stm32板上的外部SRAM(可选项)

 

;*                      - Branches to __main in the C library (which eventually

;*                        calls main()).

;*                      - 调用Ck库函数 __main,去到C的世界

 

;*                      After Reset the CortexM3 processor is in Thread mode,

;*                      priority is Privileged, and the Stack is set to Main.

;* <<< Use Configuration Wizard in Context Menu >>>   

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

; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS

; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.

; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,

; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE

; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING

; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.

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

 

 

; 1-栈

; Amount of memory (in bytes) allocated for Stack

; 为堆栈分配内存,以字节为单位

 

; Tailor this value to your application needs

; 可以根据需要修改栈的大小

 

; Stack Configuration

; 配置栈(栈就是一块内存):变量(局部/全局),函数调用

 

;    Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>

;

 

Stack_Size      EQU     0x00000400

; 定义栈大小 1024字节(1KB)

 

                AREA    STACK, NOINIT, READWRITE, ALIGN=3

;               告诉编译器汇编一个数据段,段名为STACK,不初始化,可读可写,8字节对齐

 

Stack_Mem       SPACE   Stack_Size

;               分配内存空间,单位字节,大小为Stack_Size

__initial_sp

; 栈顶地址

 

 

; 2-堆

; Heap Configuration

; 配置堆,主要用于动态内存分配,malloc()

 

;     Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>

;

 

Heap_Size       EQU     0x00000200

; 512字节

 

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3

__heap_base

Heap_Mem        SPACE   Heap_Size

__heap_limit

; 堆起始地址

 

                PRESERVE8   ; 当前堆栈以8字节对齐

                THUMB       ; 兼容THUMB指令集,THUMB是16位指令集,现在使用的THUMB-2是32位指令

 

 

; 3-中断向量表

; Vector Table Mapped to Address 0 at Reset

; 初始化中断向量表,向量表在复位时映射到地址0

 

                AREA    RESET, DATA, READONLY

;               汇编一个数据段,属性只读

 

                EXPORT  __Vectors       

;               向量表起始地址

 

                EXPORT  __Vectors_End

;               向量表结束地址

 

                EXPORT  __Vectors_Size

 

__Vectors       DCD     __initial_sp               ; Top of Stack

;               把栈顶地址初始化成向量表的起始地址,解释如下:

;               向量表从FLASH的0地址开始放置,以4个字节为一个单位,地址0存放的是栈

;               顶地址,0X04存放的是复位程序的地址,以此类推。从代码上看,向量表中存放

;               的都是中断服务函数的函数名,可我们知道C语言中的函数名就是一个地址。      

 

                DCD     Reset_Handler              ; Reset Handler

;               初始化复位程序地址,地址0X04

 

                DCD     NMI_Handler                ; NMI Handler

                DCD     HardFault_Handler          ; Hard Fault Handler

                DCD     MemManage_Handler          ; MPU Fault Handler

                DCD     BusFault_Handler           ; Bus Fault Handler

                DCD     UsageFault_Handler         ; Usage Fault Handler

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     SVC_Handler                ; SVCall Handler

                DCD     DebugMon_Handler           ; Debug Monitor Handler

                DCD     0                          ; Reserved

                DCD     PendSV_Handler             ; PendSV Handler

                DCD     SysTick_Handler            ; SysTick Handler

 

                ; External Interrupts

                DCD     WWDG_IRQHandler            ; Window Watchdog

                DCD     PVD_IRQHandler             ; PVD through EXTI Line detect

                DCD     TAMPER_IRQHandler          ; Tamper

                DCD     RTC_IRQHandler             ; RTC

                DCD     FLASH_IRQHandler           ; Flash

                DCD     RCC_IRQHandler             ; RCC

                DCD     EXTI0_IRQHandler           ; EXTI Line 0

                DCD     EXTI1_IRQHandler           ; EXTI Line 1

                DCD     EXTI2_IRQHandler           ; EXTI Line 2

                DCD     EXTI3_IRQHandler           ; EXTI Line 3

推荐阅读

史海拾趣

amcc [applied micro circuits corp]公司的发展小趣事

Applied Micro Circuits Corp(AMCC)是一家半导体公司,主要从事高性能处理器和高速互连解决方案的设计和制造。以下是关于AMCC公司发展的五个相关故事:

  1. 公司成立与早期发展:AMCC公司于1979年由Hemant Kanakia等人在美国加利福尼亚州的圣塔克拉拉创立。公司最初专注于设计和制造用于通信和数据中心应用的集成电路芯片。在成立初期,AMCC致力于开发高性能、低功耗的处理器和互连解决方案,以满足不断增长的通信市场需求。

  2. 技术创新与产品发布:AMCC公司在技术创新方面处于行业领先地位。公司持续投入研发,并推出了一系列创新产品。1997年,AMCC发布了第一款64位PowerPC处理器,开创了其在高性能处理器市场的先河。随后,公司不断推出新一代的处理器产品,包括PowerPC、ARM等系列,以满足不同客户的需求。

  3. 业务拓展与市场扩张:随着时间的推移,AMCC不断拓展其业务范围和市场覆盖。公司不仅在通信领域取得了成功,还逐渐进军数据中心、云计算、存储等新兴领域。AMCC通过与各大客户和合作伙伴的紧密合作,扩大了产品的市场份额和影响力。

  4. 收购与整合:AMCC通过一系列收购和整合,加强了自身的技术实力和市场竞争力。公司收购了一些在特定领域具有核心技术的公司,如Tahoe Networks(2004年)、3ware(2005年)、Mindspeed Technologies(2014年)等。这些收购使得AMCC得以快速扩大产品线,并加速了公司在新兴市场的布局。

  5. 英特尔收购:2016年,英特尔公司宣布以约17亿美元的价格收购AMCC。这一交易使得AMCC成为英特尔旗下的子公司,英特尔得以借助AMCC在通信和数据中心领域的技术优势和客户资源,进一步拓展其在半导体行业的地位。此次收购也标志着AMCC作为独立实体的终结,但其在半导体行业的技术贡献和市场影响将持续延续。

这些故事展示了AMCC公司在技术创新、产品发布、业务拓展、收购整合等方面的发展历程,以及其作为半导体行业重要参与者的地位和影响力。

Computer Conversions Corp公司的发展小趣事

随着公司技术的成熟和知名度的提升,Computer Conversions Corp开始将目光投向国际市场。公司派出专业的市场拓展团队,深入欧洲、亚洲等多个地区进行市场调研。经过一系列精准的市场分析和产品定位,公司成功地将产品推向了全球市场。这一过程中,他们不仅赢得了众多国际客户的信赖,还通过与当地企业的合作,进一步提升了品牌的影响力和市场份额。

艾谱科(Epticore)公司的发展小趣事

艾谱科公司始终将产品质量放在首位。公司建立了严格的质量管理体系,从原材料采购到生产制造的每一个环节都进行严格的质量控制。同时,艾谱科还注重售后服务,为客户提供全方位的技术支持和解决方案。这种对品质的执着追求,赢得了客户的信任和好评,也为公司的长期发展提供了有力保障。

Amptek Inc公司的发展小趣事

随着公司的发展壮大,艾谱科开始关注社会责任。公司积极参与环保事业,采用环保材料和绿色生产工艺,减少对环境的影响。此外,艾谱科还积极参与公益慈善活动,为社会做出了积极贡献。这种积极履行社会责任的行为,进一步提升了公司的社会形象和声誉。

Advanced Photonix公司的发展小趣事

Advanced Photonix一直注重研发团队的建设和培养。公司投入大量资源用于研发创新,鼓励团队成员不断探索新技术和新应用。在这种氛围下,公司的研发团队不断取得新的突破和进展。他们成功开发出了一系列具有自主知识产权的光电产品和解决方案,这些产品不仅提升了公司的技术实力,也为公司的长期发展奠定了坚实的基础。

兵字(BingZi)公司的发展小趣事

为了进一步提升公司的管理水平和市场竞争力,兵字公司决定进行企业规范化和市场化运作。公司建立了完善的管理体系和运营机制,优化了业务流程和组织结构,提高了工作效率和响应速度。同时,兵字公司还积极引进外部投资和战略合作伙伴,为公司的发展注入了新的活力和动力。

问答坊 | AI 解惑

如何用译码器实现对多电机的控制?

大家好,本人新手,希望得到大家的帮助! 我想使用C51单片机连接一个74HC154译码器,进而实现对多个步进电机的控制,我想问的是这能否实现?如果不能实现,我该怎样才能做到用单片机控制多个电机呢? 非常感谢! 简单地说,怎样实现用单片机控制 ...…

查看全部问答>

msp430串口收发程序

现在想用msp430的串口进行收发程序开发,但不知道对方一次发送过来多少数据?如何才能完整接收呢?我感觉使用中断的方式一次只能接收一个字节的数据,不能把对方发送的完整数据全部接收!请问有什么解决办法?谢谢! 另外,使用串口通信,一方是ms ...…

查看全部问答>

wince下读写IC卡速度问题

在pc下测试,串口读写只要3s 在wince下测试,居然10s啊,怎么解决?? 怎么办 ?? 救命 …

查看全部问答>

有一套串口通信协议需要分析破解,寻求达人帮助

有一套串口通信协议需要分析破解,寻求达人帮助! 谢谢! to:hawking20001981(东东VC++Primer) 请速和我联系! QQ:652650436…

查看全部问答>

LED显示屏一般性故障诊断常见问题解答

replyreload += \',\' + 704935;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

【原创】:关于42x0TA问题

我用ta做pwm输出,设置如下: void init_timer_a(void) { TACTL = TASSEL1 +TACLR + MC_1; //选择SMCLK为时钟,定时器清空,选择up模式,中断允许 TACCTL0 = CCIE; //将CCR0设为比较模式,中断允许+ TAIE TACCR0 = 1 ...…

查看全部问答>

stm32F101死机,手动复位无效,只能上电复位

stm32F101死机,手动复位无效,只能上电复位,我应该检查什么地方?…

查看全部问答>

新手求解答 AD软件中 DB9的原理图后面怎么会有两条线

AD软件中 DB9的原理图后面怎么会有两条线 如图所示正常DB9不是没有吗 怎么去掉??新手求解答…

查看全部问答>

单片机工程师如何做好硬件设计

做了几年的单片机工程师,总感觉(传感器信号采集、信号调理、AD采集)比较难做,可能自己欠缺这方面的知识。高手们给点建议或推荐一些书籍啊…

查看全部问答>