《嵌入式 – GD32开发实战指南(RISC-V版本)》第4章 GD32VF103启动流程详解
开发环境:
IDE:MounRiver Studio
开发板:GD32VF103V-EVAL
MCU:GD32VF103VB
对于我们常用的桌面操作系统而言,我们在开发应用时,并不关心系统的初始化,绝大多数应用程序是在操作系统运行后才开始运行的,操作系统已经提供了一个合适的运行环境,然而对于嵌入式设备而言,在设备上电后,所有的一切都需要由开发者来设置,这里处理器是没有堆栈,没有中断,更没有外围设备,这些工作是需要软件来指定的,而且不同的CPU类型、不同大小的内存和不同种类的外设,其初始化工作都是不同的。
下面我们就来具体看一下用户从Flash启动GD32VF103VB的过程,主要讲解从上电复位到main函数的过程。主要有以下步骤:
1、硬件复位后从_start开始执行。
2、进行启动地址判断。
3、初始化堆栈指针(SP)和全局指针(GP)。
4、配置中断和异常向量表(MTVT, MTVT2, MTVEC)。
5、初始化.data段和.bss段。
6、最终跳转至main函数。
在开始讲解之前,我们需要了解GD32的启动模式。
1 GD32的启动模式
首先要讲一下GD32的启动模式,因为启动模式决定了向量表的位置,GD32有三种启动模式:
1)主闪存存储器(Main Flash)启动:从GD32内置的Flash启动(0x0800 0000-0x0807 FFFF),一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。以0x08000000 对应的内存为例,则该块内存既可以通过0x0000