历史上的今天
今天是: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
下一篇:STM32F429--位带操作
史海拾趣
|
急需!!! 电子技术研发设计开发方案!!! 公司拓展,急需方案,请拥有方案或部分技术的公司和个人迅速与我联系, 邮箱 rdeasy@yahoo.cn 请注明公司全名或个人的姓,详细准确的联系方式和方案,否则不予考。 你有别的电子技术设计 ...… 查看全部问答> |
|
我现在在学习omap5910 在ARM与DSP数据传送时遇到一个问题 就是ARM是默认的小端存储 DSP是默认的大端存储 但在网上搜索了一下 好像ARM端的大小端可以自己设置 请问哪位大虾能赐教一下 自己如何设置… 查看全部问答> |
|
430串口中,有个R/D控制线,在接收上位机的数据,但本身的数据有无发送完毕不知道啊,什么时候才可置低R/d位来接收数据啊?好像430没有发送完中断标志… 查看全部问答> |
|
MSP430的端口有P1、P2、P3、P4、P5、P6、S和COM(型号不同,包含的端口也不仅相同,如MSP430X11X系列只有P1,P2端口,而MSP430X4XX系列则包含全部上述端口),它们都可以直接用于输入/输出。MSP430系统中没有专门的输入/输出指令,输入/输出操 ...… 查看全部问答> |
|
各位前辈,我是FPGA的新手,但是我一直在思索FPGA与农业的结合点,尤其是与山区农业的结合点,因为我就是山区的,甚至在我们那边的农村生活是多么的不方便,而现代机械在山区的使用由于地势的原因,受到了很大的限制,因此我想能否用FPGA对山区的农 ...… 查看全部问答> |
|
TI【免费样片!高棚灯 LED 照明/化学/气体传感器/LED 阵列驱动,,立即获取!!!】 【免费样片! 数量有限, 立即获取!!!】TI整合国半(NS)后推出系列系统解决方案 从通讯、计算机、消费类电子到汽车、工业,从能源、医疗到安防、航空航天,收购国半之后的TI整合双方优势,不断提升产品结合后的总体效用,已陆续推出一系列创新、完 ...… 查看全部问答> |
|
1. 移位运算符移位运算符是双目运算符,将运算符左边的操作数左移或右移运算符右边的操作数指定的位数,用0来补充空闲位。如果右边操作数的值为X或Z,则移位结果为未知数X。Verilog HDL中有两种移位运算符:(右逻辑移)。 例程1 &nb ...… 查看全部问答> |




