gd32f103c8t6 gcc startup
时间: 2023-08-25 12:05:40 浏览: 208
GCC编译器起步
以下是使用 GCC 编译器在 GD32F103C8T6 上启动的基本步骤:
1. 编写 startup 文件
创建一个名为 startup_gd32f10x.s 的文件,其中包含以下内容:
```
/* 启动代码 */
.section .isr_vector
.word _estack /* 堆栈顶指针 */
.word Reset_Handler /* 复位中断处理函数 */
.word NMI_Handler /* NMI中断处理函数 */
.word HardFault_Handler /* 硬件故障中断处理函数 */
.word MemManage_Handler /* 内存管理中断处理函数 */
.word BusFault_Handler /* 总线故障中断处理函数 */
.word UsageFault_Handler /* 用法故障中断处理函数 */
.word 0 /* 保留 */
.word 0 /* 保留 */
.word 0 /* 保留 */
.word 0 /* 保留 */
.word SVC_Handler /* SVC中断处理函数 */
.word DebugMon_Handler /* Debug Monitor中断处理函数 */
.word 0 /* 保留 */
.word PendSV_Handler /* PendSV中断处理函数 */
.word SysTick_Handler /* SysTick中断处理函数 */
/* 复位中断处理函数 */
Reset_Handler:
ldr sp, =_estack /* 初始化堆栈指针 */
bl SystemInit /* 系统初始化 */
bl main /* 跳转到主函数 */
/* 中断处理函数 */
NMI_Handler:
b .
HardFault_Handler:
b .
MemManage_Handler:
b .
BusFault_Handler:
b .
UsageFault_Handler:
b .
SVC_Handler:
b .
DebugMon_Handler:
b .
PendSV_Handler:
b .
SysTick_Handler:
b .
```
2. 编译 startup 文件
使用以下命令将 startup_gd32f10x.s 文件编译为 startup_gd32f10x.o 文件:
```
arm-none-eabi-as -mthumb -o startup_gd32f10x.o startup_gd32f10x.s
```
3. 编写链接文件
创建一个名为 gd32f103c8t6.ld 的文件,其中包含以下内容:
```
/* 定义内存区域 */
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 64K
SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 20K
}
/* 定义符号 */
SECTIONS
{
.text :
{
KEEP(*(.isr_vector))
*(.text)
} >FLASH
.rodata :
{
*(.rodata)
} >FLASH
.data :
{
*(.data)
} >SRAM AT >FLASH
.bss :
{
*(.bss)
} >SRAM
/* 定义栈顶指针 */
_estack = ORIGIN(SRAM) + LENGTH(SRAM);
}
```
4. 编译应用程序文件
编写应用程序的 C/C++ 文件,并将其编译为 .o 文件。
5. 链接所有文件
使用以下命令将所有 .o 文件链接在一起:
```
arm-none-eabi-gcc -mthumb -specs=nano.specs -specs=nosys.specs -T gd32f103c8t6.ld startup_gd32f10x.o main.o -o main.elf
```
6. 生成二进制文件
使用以下命令将 .elf 文件转换为 .bin 文件:
```
arm-none-eabi-objcopy -O binary main.elf main.bin
```
7. 烧录二进制文件
将生成的 main.bin 文件烧录到 GD32F103C8T6 上,即完成启动。
阅读全文