GD32 MCU启动后如何运行到main函数

发布者:tau29最新更新时间:2024-10-31 来源: elecfans关键字:GD32  main函数 手机看文章 扫描二维码
随时随地手机看文章

GD32 MCU启动后如何运行到main函数入口?你是否也有这样的疑虑。在执行到main函数之前MCU干了哪些事情呢?下面为大家解答。


MCMCU上电后,首先会根据BOOT0和BOOT1的状态判断从主Flash/SRAM/ISP中启动,如果BOOT0为低电平,MCU将会从主Flash中启动,即主Flash中的数据会被映射到0x0000 0000地址,ARM处理器将会从0x0000 0000地址获取栈顶指针,再从0x0000 0004获取复位中断入口地址(引导代码基地址),如下图所示,我们随便打开一个bin文件,前4个字节为MSP堆栈指针,之后四个字节为复位中断入口地址,之后为中断向量表。

wKgZomWkkZ-AXdcaAADF2Kcmzuc258.png?imageView2/2/w/1000


MCU找到堆栈指针和复位中断入口地址之后,将会加载执行复位中断,复位中断函数定义在.s启动文件中,具体定义如下所示,进入到复位中断函数中之后,首先执行SystemInit系统初始化函数,该函数主要为系统时钟配置函数,之后跳转到main函数进行执行,也就是说在执行到main函数之前,已经进行了系统时钟配置。执行完复位中断函数之后,MCU将会进入到main函数进行执行。

;/* reset Handler */ Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT SystemInit IMPORT __main LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP


关键字:GD32  main函数 引用地址:GD32 MCU启动后如何运行到main函数

上一篇:【GD32 MCU 入门教程】二、GD32 MCU 烧录说明 (2)SWD/JTAG在线下载
下一篇:如何对GD32 MCU进行加密?

推荐阅读最新更新时间:2026-03-24 07:41

STM32单片机实现中断后不继续向下执行而是返回到main函数
做公司的一个项目,实现一个功能就是 机器在进行一项功能时(这项工作时间挺长),想要取消这项工作,重新选择。想了半天没想出来,结果同事提醒了一句,可以在程序中加一个外部中断,在中断中软件复位程序。用到以下两句话 __set_FAULTMASK(1); // 关闭所有中断 NVIC_SystemReset(); // 复位 在中断最后执行这两句话就系统复位了。但是在运行过程中出现了一下两个问题: ①发现我的程序死在复位函数中了 如下 static __INLINE void NVIC_SystemReset(void) { SCB- AIRCR = ((0x5FA SCB_AIRCR_VECTKEY_Pos) | (SCB- AIR
[单片机]
STM32启动分析之main函数是怎样跑起来的
1、STM32启动规则 STM32根据boot0和boot1的电平决定启动位置,boot0=0时从主Flash启动,即0x08000000地址启动。 按照spec,M3核的中断向量表是不变的(中断向量表每一项为4个字节),中断向量表的顺序:栈顶、复位向量、中断向量.....。所以复位时0x00000000(映射在0x08000000)的值为栈顶指针,0x00000004(映射在0x08000004)是复位向量。 __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DC
[单片机]
STM32程序无法进入main函数的解决方法
很多人在基于STM32单片机项目开发过程中,会遇到STM32程序无法进入main的现象,在这篇文将分享STM32程序无法进入main函数的解决方法,希望对用户有所帮助。 1.printf等函数采用了半主机模式 解决方法:关掉半主机模式,将输入输出端重定向到ARM器件上,重写fputc和fgetc函数。 2.系统滴答systick中断导致无法进入main函数 解决方法有两种: 1)在bootloader程序跳转到app层时就关闭系统滴答中断:SysTick-》CTRL &= ~SysTick_CTRL_ENABLE_Msk; 2)在SystemInit函数关闭系统滴答中断:SysTick-》CTRL &= ~SysTick_CT
[单片机]
MCU 是如何从上电复位运行到 main 函数的?
前言 在笔者的上一篇文章中《中断服务子程序是如何被执行的》,详细阐述了中断响应以及执行的整个过程,其中涉及到关于中断向量表的相关知识,本篇文章再次以中断向量表为出发点阐述上电复位的整个过程。 复位的相关概念 复位就类似于我们的个人 PC 重启一样,又比 PC 的重启要简单一些。引起复位的原因也是多种多样,笔者在这里大致列出以下几种: 上电复位,也就是我们给我们的 MCU 通电后,其实也是一次复位的过程。 外部产生的手动复位信号,这个也比较常见,我们在平时学习所使用的开发板中就存在一个复位的按键,来实现手动的复位信号。 执行复位指令引发的复位 看门狗复位 。。。。。。 上述所示的复位虽然引起复位的原因各不相同,但是其复位的过
[单片机]
<font color='red'>MCU</font> 是如何从上电复位运行到 <font color='red'>main</font> <font color='red'>函数</font>的?
51单片机入门经验分享2-关于进制 typedef 头文件 main 延时函数
接上篇帖子,单片机这种东西,如果是用来考试,翻翻书大概就可以了,如果是拿来开发一些小的作品,自学2个月,也不会太难,因为现在开发板也是很多的,资料也很丰富,如果你是想找工作,想独立开发产品,这个,对于一个刚毕业的人来说,就比较难了,很大的原因,是走了弯路,而且沿着弯路一直走了下去。我们希望分享一些有用的东西,实用的东西,让新手少走些弯路,如果每个坑都重踩一遍,这得浪费多少时间啊。 言归正传,单片机是必须要亲自动手敲代码才能学会的,所以从这一章节开始,我们会分享一些例程,并详细解析,希望能给新手带来帮助,还是那句话,本人水平有限,老手轻拍,有错误请指出,有事请留言。 一个经典的例程,点亮你的LED 我以手里的这块STC15W1
[单片机]
51<font color='red'>单片机</font>入门经验分享2-关于进制 typedef 头文件 <font color='red'>main</font> 延时<font color='red'>函数</font>
ARM在进入main函数之前会做什么
首先声明,#define是在程序启动代码运行之前就会编译好的。烧录到芯片中时是已经替换完成的数值; 1、芯片复位,启动代码运行,启动代码进行初级硬件初始化等,比如内核从初始复位地址取指令,开始执行程序,最重要的是设置堆栈指针,如图 2、初始化0值变量,将对应内存初始化为0,这些内存对应在程序中的“int i= 0”的变量地址,图示 3、初始化非零变量,例如“int j = 6;”这样的语句对应的内存应该初始化为6,在启动程序中,从ROM中的Initializers段复制到对应的内存,图示 最后调用main(); 记忆:(启(启动代码)栈(初始化堆栈)0(0变量到RAM)变(非零变量到RAM))
[单片机]
ARM在进入<font color='red'>main</font><font color='red'>函数</font>之前会做什么
Keil MDK中 ST/Link 硬件仿真的配置,解决不进入main函数的方法
最近买了个STM32 的开发版, 又顺便配了一个ST Link v2 的硬件调试仿真器. 在Keil MDK 中调试,总是在汇编语言里面的3条语句里面循环. 不会进入到main函数. main函数一次都不执行. 单步暂停的时候程序确实会停止, (LED停止闪烁). 但是刷入的程序好像是上次的. 起初以为是买了假的ST/Link 导致的. 后来用了开发版官方的测试程序烧写进去调试了一下,竟然可以调试. 那就说明,ST/Link 硬件上没啥问题. 肯定是程序或者配置上出错了. 但是程序出错编译和链接这关肯定过不去.. 就算有程序逻辑错误,写了死循环. 总得进main函数吧.. 结果main函数都没进,就在汇编里面
[单片机]
STM32调试,无法进入main函数 LDR r0,[pc,#0]
1.打开j-flash软件 2.connect jlink 3.解除芯片加密
[单片机]
STM32调试,无法进入<font color='red'>main</font><font color='red'>函数</font> LDR r0,[pc,#0]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved