历史上的今天
返回首页

历史上的今天

今天是:2024年12月22日(星期日)

2021年12月22日 | STM32F429--启动文件简单分析

2021-12-22 来源:eefocus

下面的内容是stm32f429的启动文件拷贝过来的,并对其部分进行了说明


;******************** © COPYRIGHT 2016 STMicroelectronics ********************

;* File Name : startup_stm32f429_439xx.s

;* Author : MCD Application Team

;* @version : V1.8.0

;* @date : 09-November-2016

;* Description : STM32F429xx/439xx devices vector table for MDK-ARM toolchain.

;* This module performs:

;* - Set the initial SP

;* - Set the initial PC == Reset_Handler

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

;* - Configure the system clock and the external SRAM/SDRAM mounted

;* on STM324x9I-EVAL boards to be used as data memory

;* (optional, to be enabled by user)

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

;* calls main()). 分支执行到

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

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

上述讲的就是启动文件的作用

1- 初始化堆栈指针SP

2- 初始化PC指针,指向复位程序

3- 初始化中断向量表

4- 配置系统时钟

5- 调用C库函数_main,最终进入C世界


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

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

;

; Licensed under MCD-ST Liberty SW License Agreement V2, (the “License”);

; You may not use this file except in compliance with the License.

; You may obtain a copy of the License at:

;

; http://www.st.com/software_license_agreement_liberty_v2

;

; Unless required by applicable law or agreed to in writing, software

; distributed under the License is distributed on an “AS IS” BASIS,

; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

; See the License for the specific language governing permissions and

; limitations under the License.

;

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


; 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

说明:

1KB的栈(Stack)空间大小 0x00000400 = 41616 = 1024 =1 KB

栈:用于局部变量、函数调用、函数形参的开销

EQU:宏定义的伪指令,相当于等于的意思,类似于C中的define

AREA:告诉汇编器汇编一个新的代码段或者数据段

SPACE:用于分配一定大小的内存空间,单位为字节

__initial_sp 紧挨着SPACE语句放置,表示栈的结束地址,即栈顶地址

栈是由高向低生长的。


要怎么找到指令说明呢?

打开我们的Keil–>Help–>uVision Help -->搜索–>输入搜索关键词word

–>Assembler User Guide:word

AREA STACK, NOINIT, READWRITE, ALIGN=3

Stack_Mem SPACE Stack_Size

__initial_sp

说明:

先开辟一段栈空间,大小为1KB,不初始化它,可读可写,按2的3次方8字节对齐。

__initial_sp 表示栈的结束地址


; Heap Configuration

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

;


Heap_Size EQU 0x00000200


            AREA    HEAP, NOINIT, READWRITE, ALIGN=3


__heap_base

Heap_Mem SPACE Heap_Size

__heap_limit


            PRESERVE8

            THUMB


说明:

HEAP–堆

用于动态内存的分配,malloc函数

用的比较少

PRESERVE8:指定当前文件的堆栈按照8字节对齐

THUMB:表示后面指令为THUMB指令。THUMB是ARM以前的指令集,16bit,

现在的Cortex-M系列的都使用THUMB-2指令集,THUMB-2是32位的,兼容

16位和32位的指令,是THUMB的超集。


EXPORT:声明一个标号具有全局属性,【可被外部的文件使用】。

如果是IAR编译器,则使用的是GLOBAL这个指令。


DCD:分配一个或者多个以字为单位的内存,以四字节对齐,

并要求初始化这些内存。在向量表中,DCD分配了一堆内存,

并且以ESR的入口地址初始化它们。


; Vector Table Mapped to Address 0 at Reset

AREA RESET, DATA, READONLY

EXPORT __Vectors

EXPORT __Vectors_End

EXPORT __Vectors_Size


下面用__Vectors关键字分配了一连串的内存。

向量表:

1-向量表实际上是一个32位的整型数组,一个元素对应一个异常(ESR),

数组元素存的就是ESR的入口地址。异常==中断

2- 向量表在复位后从FLASH的0地址开始,具体的初始化值查询参考手册的中断章节。

从代码上看,向量表中存放的都是中断服务函数的【函数名】,我们知道C语言中的

函数名就是一个地址。后续写中断函数,名称要参考下面的XXX_Handler


__Vectors DCD __initial_sp ; Top of Stack

DCD Reset_Handler ; Reset Handler

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 detection                        

            DCD     TAMP_STAMP_IRQHandler             ; Tamper and TimeStamps through the EXTI line            

            DCD     RTC_WKUP_IRQHandler               ; RTC Wakeup through the EXTI line                       

            DCD     FLASH_IRQHandler                  ; FLASH                                           

            DCD     RCC_IRQHandler                    ; RCC                                             

            DCD     EXTI0_IRQHandler                  ; EXTI Line0                                             

            DCD     EXTI1_IRQHandler                  ; EXTI Line1                                             

            DCD     EXTI2_IRQHandler                  ; EXTI Line2                                             

            DCD     EXTI3_IRQHandler                  ; EXTI Line3                                             

            DCD     EXTI4_IRQHandler                  ; EXTI Line4                                             

            DCD     DMA1_Stream0_IRQHandler           ; DMA1 Stream 0                                   

            DCD     DMA1_Stream1_IRQHandler           ; DMA1 Stream 1                                   

            DCD     DMA1_Stream2_IRQHandler           ; DMA1 Stream 2                                   

            DCD     DMA1_Stream3_IRQHandler           ; DMA1 Stream 3                                   

            DCD     DMA1_Stream4_IRQHandler           ; DMA1 Stream 4                                   

            DCD     DMA1_Stream5_IRQHandler           ; DMA1 Stream 5                                   

            DCD     DMA1_Stream6_IRQHandler           ; DMA1 Stream 6                                   

            DCD     ADC_IRQHandler                    ; ADC1, ADC2 and ADC3s                            

            DCD     CAN1_TX_IRQHandler                ; CAN1 TX                                                

            DCD     CAN1_RX0_IRQHandler               ; CAN1 RX0                                               

            DCD     CAN1_RX1_IRQHandler               ; CAN1 RX1                                               

推荐阅读

史海拾趣

ACCUTEK公司的发展小趣事

ACCUTEK公司深知人才是企业发展的核心力量。因此,公司始终注重人才培养和团队建设。公司建立了完善的人才培养和激励机制,鼓励员工不断学习和创新。同时,公司还注重营造良好的工作氛围和团队文化,让员工能够在轻松愉快的环境中工作。这些举措不仅提升了员工的归属感和忠诚度,也为公司的持续发展提供了有力的人才保障。

这些故事基于电子行业的一般发展规律和可能的企业发展路径构建,并不代表ACCUTEK公司的真实历史。如需了解该公司的真实发展情况,建议查阅相关资料或访问其官方网站。

宝乘(baocheng)公司的发展小趣事

随着产品质量的提升和技术的不断创新,宝乘公司开始积极拓展市场。公司与多家知名企业建立了战略合作关系,共同推动半导体功率器件在LED照明、电源、消费类电子等多个领域的应用。同时,宝乘还积极参加国内外电子行业的展览和交流活动,与同行交流学习,不断提升自身的竞争力。

Alpha Wire公司的发展小趣事

面对未来电子行业的发展趋势,宝乘公司继续坚持创新驱动的发展战略。公司加大研发投入,不断推出具有创新性和前瞻性的产品。同时,宝乘还积极探索新的市场领域和应用场景,为公司的未来发展奠定坚实的基础。相信在不久的将来,宝乘公司将成为电子行业中的佼佼者,为社会的进步和发展做出更大的贡献。

请注意,这些故事是基于现有信息的推测,并不代表宝乘公司的真实历史。如果您需要更准确和详细的信息,建议直接联系宝乘公司或查阅相关报道和资料。

Cretex Companies Inc公司的发展小趣事

随着环保意识的日益增强,Cretex积极响应国家绿色发展的号召,将绿色环保理念融入产品研发和生产过程中。他们采用环保材料和生产工艺,减少了对环境的污染。同时,公司还推出了一系列节能减排的电子产品,帮助客户降低能耗、减少碳排放。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

Autotrol公司的发展小趣事

随着全球水资源日益紧张和水质问题的日益突出,水处理行业迎来了巨大的发展机遇。Autotrol公司凭借其在控制系统方面的独特优势和完善的企业管理体系,成功进军水处理领域。公司开发了一系列高端水处理设备和技术,为全球客户提供专业的水处理解决方案。同时,Autotrol还不断推出创新的水处理产品和服务,满足了客户对高效、环保、节能的需求。

Antenna Factor公司的发展小趣事

Antenna Factor公司最初由几位热衷于无线通信技术的工程师创立。创业初期,他们面临着资金短缺、技术难题和市场认可度低等多重挑战。然而,他们凭借着对技术的执着和不懈的努力,成功开发出了一款具有高性价比的天线产品,并获得了市场的初步认可。这一突破性的产品为公司的发展奠定了坚实的基础。

问答坊 | AI 解惑

急需!!! 可编程方案!!!

急需!!! 电子技术研发设计开发方案!!! 公司拓展,急需方案,请拥有方案或部分技术的公司和个人迅速与我联系, 邮箱 rdeasy@yahoo.cn 请注明公司全名或个人的姓,详细准确的联系方式和方案,否则不予考。 你有别的电子技术设计 ...…

查看全部问答>

ARM的大小端如何能够自己设置

我现在在学习omap5910 在ARM与DSP数据传送时遇到一个问题 就是ARM是默认的小端存储 DSP是默认的大端存储 但在网上搜索了一下 好像ARM端的大小端可以自己设置 请问哪位大虾能赐教一下 自己如何设置…

查看全部问答>

基础不扎实,关键时候就掉链子

昨天二次面试结束了,佩服面试大哥的提问技巧,都问晕了。 连const都搞乱了。呵呵,鄙视一下自己。…

查看全部问答>

C8051F040汇编调试问题!请大家帮我看看以下程序有什么错误!我发现定时器没启动!

GREEN_LED      equ   P1.6                               ORG  00h      & ...…

查看全部问答>

如何判断串口数据已经发送发毕

430串口中,有个R/D控制线,在接收上位机的数据,但本身的数据有无发送完毕不知道啊,什么时候才可置低R/d位来接收数据啊?好像430没有发送完中断标志…

查看全部问答>

【MSP430共享】MSP430单片机的端口介绍

 MSP430的端口有P1、P2、P3、P4、P5、P6、S和COM(型号不同,包含的端口也不仅相同,如MSP430X11X系列只有P1,P2端口,而MSP430X4XX系列则包含全部上述端口),它们都可以直接用于输入/输出。MSP430系统中没有专门的输入/输出指令,输入/输出操 ...…

查看全部问答>

Nios ii与农业生产

各位前辈,我是FPGA的新手,但是我一直在思索FPGA与农业的结合点,尤其是与山区农业的结合点,因为我就是山区的,甚至在我们那边的农村生活是多么的不方便,而现代机械在山区的使用由于地势的原因,受到了很大的限制,因此我想能否用FPGA对山区的农 ...…

查看全部问答>

TI【免费样片!高棚灯 LED 照明/化学/气体传感器/LED 阵列驱动,,立即获取!!!】

【免费样片! 数量有限, 立即获取!!!】TI整合国半(NS)后推出系列系统解决方案 从通讯、计算机、消费类电子到汽车、工业,从能源、医疗到安防、航空航天,收购国半之后的TI整合双方优势,不断提升产品结合后的总体效用,已陆续推出一系列创新、完 ...…

查看全部问答>

求大神指点。。。

基础型学习板。。。在用数据线连接电脑时,安装完驱动,电脑显示无法识别。。。。这是怎么回事????求助。。。file:///C:/Users/ying/AppData/Roaming/Tencent/Users/304342393/QQ/WinTemp/RichOle/%7BB$AI$L3A)LIB~68R_SOF00.jpg…

查看全部问答>

炼狱传奇-移位和位拼运算符之战

1. 移位运算符移位运算符是双目运算符,将运算符左边的操作数左移或右移运算符右边的操作数指定的位数,用0来补充空闲位。如果右边操作数的值为X或Z,则移位结果为未知数X。Verilog HDL中有两种移位运算符:(右逻辑移)。  例程1 &nb ...…

查看全部问答>