求HC32F196 GCC的启动文件和链接文件
本帖最后由 xrymbr 于 2025-4-16 11:58 编辑#技术资源# 求HC32F196 GCC的启动文件和链接文件 学习一下啊!感觉有点知识慌了 这不得去下载官方的资料才行? 你找个小华的FAE吧,比较靠谱一些 这个启动文件我觉得你可以去官方的资料里找找 你想要GCC?官方提供吗? HC32F196 使用 GCC 工具链开发时,需重点配置启动文件(startup_hc32f196.s)和链接脚本(hc32f196.ld),这些估计这芯片的开发包里就能有 启动文件主要负责初始化硬件环境,包括栈指针(SP)、堆指针、向量表地址重映射等,并跳转到主函数 main()。 链接脚本(hc32f196.ld)是定义内存布局和代码段、数据段的放置规则,确保程序正确加载和运行。 工具链选择:使用 arm-none-eabi-gcc 编译,arm-none-eabi-ld 链接 堆栈溢出调整启动文件中的 _estack 定义,确保栈空间足够。 向量表地址错误检查链接脚本中 .isr_vector 的放置地址是否与芯片手册一致。 /*
* Startup file for HC32F196 (ARM Cortex-M4)
* Compatible with GCC toolchain
*/
.cpu cortex-m4
.fpu fpv4-sp-d16
.syntax unified
.thumb
.global _start
.global Default_Handler
/* Linker defined symbols */
.extern __data_start__
.extern __data_end__
.extern __data_load__
.extern __bss_start__
.extern __bss_end__
.extern __stack_top
.extern __heap_start
.extern __heap_end
/* Exception table */
.section .isr_vector,"a",%progbits
.type _isr_vector, %object
.size _isr_vector, . - _isr_vector
_isr_vector:
.word __stack_top /* Stack pointer */
.word Reset_Handler /* Reset Handler */
.word NMI_Handler /* NMI Handler */
.word HardFault_Handler /* Hard Fault Handler */
.word MemManage_Handler /* MPU Fault Handler */
.word BusFault_Handler /* Bus Fault Handler */
.word UsageFault_Handler /* Usage Fault Handler */
.word 0 /* Reserved */
.word 0 /* Reserved */
.word 0 /* Reserved */
.word 0 /* Reserved */
.word SVC_Handler /* SVCall Handler */
.word DebugMon_Handler /* Debug Monitor Handler */
.word 0 /* Reserved */
.word PendSV_Handler /* PendSV Handler */
.word SysTick_Handler /* SysTick Handler */
/* External interrupts */
.word WWDG_IRQHandler /* 0- Window Watchdog */
.word PVD_IRQHandler /* 1- PVD through EXTI Line detect */
.word TAMP_STAMP_IRQHandler /* 2- Tamper and TimeStamp */
.word RTC_WKUP_IRQHandler /* 3- RTC Wakeup */
.word FLASH_IRQHandler /* 4- Flash */
.word RCC_IRQHandler /* 5- RCC */
.word EXTI0_IRQHandler /* 6- EXTI Line0 */
.word EXTI1_IRQHandler /* 7- EXTI Line1 */
.word EXTI2_IRQHandler /* 8- EXTI Line2 */
.word EXTI3_IRQHandler /* 9- EXTI Line3 */
.word EXTI4_IRQHandler /* 10 - EXTI Line4 */
.word DMA1_Channel1_IRQHandler /* 11 - DMA1 Channel 1 */
.word DMA1_Channel2_IRQHandler /* 12 - DMA1 Channel 2 */
.word DMA1_Channel3_IRQHandler /* 13 - DMA1 Channel 3 */
.word DMA1_Channel4_IRQHandler /* 14 - DMA1 Channel 4 */
.word DMA1_Channel5_IRQHandler /* 15 - DMA1 Channel 5 */
.word DMA1_Channel6_IRQHandler /* 16 - DMA1 Channel 6 */
.word DMA1_Channel7_IRQHandler /* 17 - DMA1 Channel 7 */
.word ADC1_2_IRQHandler /* 18 - ADC1 & ADC2 */
.word USB_HP_CAN1_TX_IRQHandler /* 19 - USB High Priority or CAN1 TX */
.word USB_LP_CAN1_RX0_IRQHandler /* 20 - USB Low Priority or CAN1 RX0 */
.word CAN1_RX1_IRQHandler /* 21 - CAN1 RX1 */
.word CAN1_SCE_IRQHandler /* 22 - CAN1 SCE */
.word EXTI9_5_IRQHandler /* 23 - EXTI Line */
.word TIM1_BRK_TIM9_IRQHandler /* 24 - TIM1 Break or TIM9 */
.word TIM1_UP_TIM10_IRQHandler /* 25 - TIM1 Update or TIM10 */
.word TIM1_TRG_COM_TIM11_IRQHandler /* 26 - TIM1 Trigger and Commutation or TIM11 */
.word TIM1_CC_IRQHandler /* 27 - TIM1 Capture Compare */
.word TIM2_IRQHandler /* 28 - TIM2 */
.word TIM3_IRQHandler /* 29 - TIM3 */
.word TIM4_IRQHandler /* 30 - TIM4 */
.word I2C1_EV_IRQHandler /* 31 - I2C1 Event */
.word I2C1_ER_IRQHandler /* 32 - I2C1 Error */
.word I2C2_EV_IRQHandler /* 33 - I2C2 Event */
.word I2C2_ER_IRQHandler /* 34 - I2C2 Error */
.word SPI1_IRQHandler /* 35 - SPI1 */
.word SPI2_IRQHandler /* 36 - SPI2 */
.word USART1_IRQHandler /* 37 - USART1 */
.word USART2_IRQHandler /* 38 - USART2 */
.word USART3_IRQHandler /* 39 - USART3 */
.word EXTI15_10_IRQHandler /* 40 - EXTI Line */
.word RTC_Alarm_IRQHandler /* 41 - RTC Alarm (A and B) through EXTI Line */
.word OTG_FS_WKUP_IRQHandler /* 42 - USB OTG FS Wakeup through EXTI Line */
.word TIM8_BRK_TIM12_IRQHandler /* 43 - TIM8 Break or TIM12 */
.word TIM8_UP_TIM13_IRQHandler /* 44 - TIM8 Update or TIM13 */
.word TIM8_TRG_COM_TIM14_IRQHandler /* 45 - TIM8 Trigger and Commutation or TIM14 */
.word TIM8_CC_IRQHandler /* 46 - TIM8 Capture Compare */
.word ADC3_IRQHandler /* 47 - ADC3 */
.word FSMC_IRQHandler /* 48 - FSMC */
.word SDIO_IRQHandler /* 49 - SDIO */
.word TIM5_IRQHandler /* 50 - TIM5 */
.word SPI3_IRQHandler /* 51 - SPI3 */
.word UART4_IRQHandler /* 52 - UART4 */
.word UART5_IRQHandler /* 53 - UART5 */
.word TIM6_DAC_IRQHandler /* 54 - TIM6 and DAC1&2 underrun */
.word TIM7_IRQHandler /* 55 - TIM7 */
.word DMA2_Channel1_IRQHandler /* 56 - DMA2 Channel 1 */
.word DMA2_Channel2_IRQHandler /* 57 - DMA2 Channel 2 */
.word DMA2_Channel3_IRQHandler /* 58 - DMA2 Channel 3 */
.word DMA2_Channel4_5_IRQHandler /* 59 - DMA2 Channel 4 & 5 */
/* Reset handler */
.section .text.Reset_Handler
.thumb_func
.type Reset_Handler, %function
Reset_Handler:
/* Disable interrupts */
CPSID I
/* Initialize data segment */
LDR R0, =__data_start__
LDR R1, =__data_load__
LDR R2, =__data_end__
CMP R0, R1
BEQ .Lnoinit_data
.Linit_data:
LDR R3, , #4
STR R3, , #4
CMP R0, R2
BNE .Linit_data
.Lnoinit_data:
/* Initialize BSS segment */
LDR R0, =__bss_start__
LDR R1, =__bss_end__
MOV R2, #0
.Linit_bss:
STR R2, , #4
CMP R0, R1
BNE .Linit_bss
/* Configure system clock */
BL SystemInit
/* Call the application's entry point */
BL main
/* Infinite loop if main returns */
.Lhang:
B .Lhang
/* Default exception handlers */
.type Default_Handler, %function
Default_Handler:
.Ldefault_loop:
B .Ldefault_loop
/* Individual exception handlers */
.type NMI_Handler, %function
NMI_Handler:
B Default_Handler
.type HardFault_Handler, %function
HardFault_Handler:
B Default_Handler
.type MemManage_Handler, %function
MemManage_Handler:
B Default_Handler
.type BusFault_Handler, %function
BusFault_Handler:
B Default_Handler
.type UsageFault_Handler, %function
UsageFault_Handler:
B Default_Handler
.type SVC_Handler, %function
SVC_Handler:
B Default_Handler
.type DebugMon_Handler, %function
DebugMon_Handler:
B Default_Handler
.type PendSV_Handler, %function
PendSV_Handler:
B Default_Handler
.type SysTick_Handler, %function
SysTick_Handler:
B Default_Handler
/* External interrupt handlers */
.type WWDG_IRQHandler, %function
WWDG_IRQHandler:
B Default_Handler
.type PVD_IRQHandler, %function
PVD_IRQHandler:
B Default_Handler
.type TAMP_STAMP_IRQHandler, %function
TAMP_STAMP_IRQHandler:
B Default_Handler
.type RTC_WKUP_IRQHandler, %function
RTC_WKUP_IRQHandler:
B Default_Handler
.type FLASH_IRQHandler, %function
FLASH_IRQHandler:
B Default_Handler
.type RCC_IRQHandler, %function
RCC_IRQHandler:
B Default_Handler
.type EXTI0_IRQHandler, %function
EXTI0_IRQHandler:
B Default_Handler
.type EXTI1_IRQHandler, %function
EXTI1_IRQHandler:
B Default_Handler
.type EXTI2_IRQHandler, %function
EXTI2_IRQHandler:
B Default_Handler
.type EXTI3_IRQHandler, %function
EXTI3_IRQHandler:
B Default_Handler
.type EXTI4_IRQHandler, %function
EXTI4_IRQHandler:
B Default_Handler
.type DMA1_Channel1_IRQHandler, %function
DMA1_Channel1_IRQHandler:
B Default_Handler
.type DMA1_Channel2_IRQHandler, %function
DMA1_Channel2_IRQHandler:
B Default_Handler
.type DMA1_Channel3_IRQHandler, %function
DMA1_Channel3_IRQHandler:
B Default_Handler
.type DMA1_Channel4_IRQHandler, %function
DMA1_Channel4_IRQHandler:
B Default_Handler
.type DMA1_Channel5_IRQHandler, %function
DMA1_Channel5_IRQHandler:
B Default_Handler
.type DMA1_Channel6_IRQHandler, %function
DMA1_Channel6_IRQHandler:
B Default_Handler
.type DMA1_Channel7_IRQHandler, %function
DMA1_Channel7_IRQHandler:
B Default_Handler
.type ADC1_2_IRQHandler, %function
ADC1_2_IRQHandler:
B Default_Handler
.type USB_HP_CAN1_TX_IRQHandler, %function
USB_HP_CAN1_TX_IRQHandler:
B Default_Handler
.type USB_LP_CAN1_RX0_IRQHandler, %function
USB_LP_CAN1_RX0_IRQHandler:
B Default_Handler
.type CAN1_RX1_IRQHandler, %function
CAN1_RX1_IRQHandler:
B Default_Handler
.type CAN1_SCE_IRQHandler, %function
CAN1_SCE_IRQHandler:
B Default_Handler
.type EXTI9_5_IRQHandler, %function
EXTI9_5_IRQHandler:
B Default_Handler
.type TIM1_BRK_TIM9_IRQHandler, %function
TIM1_BRK_TIM9_IRQHandler:
B Default_Handler
.type TIM1_UP_TIM10_IRQHandler, %function
TIM1_UP_TIM10_IRQHandler:
B Default_Handler
.type TIM1_TRG_COM_TIM11_IRQHandler, %function
TIM1_TRG_COM_TIM11_IRQHandler:
B Default_Handler
.type TIM1_CC_IRQHandler, %function
TIM1_CC_IRQHandler:
B Default_Handler
.type TIM2_IRQHandler, %function
TIM2_IRQHandler:
B Default_Handler
.type TIM3_IRQHandler, %function
TIM3_IRQHandler:
B Default_Handler
.type TIM4_IRQHandler, %function
TIM4_IRQHandler:
B Default_Handler
.type I2C1_EV_IRQHandler, %function
I2C1_EV_IRQHandler:
B Default_Handler
.type I2C1_ER_IRQHandler, %function
I2C1_ER_IRQHandler:
B Default_Handler
.type I2C2_EV_IRQHandler, %function
I2C2_EV_IRQHandler:
B Default_Handler
.type I2C2_ER_IRQHandler, %function
I2C2_ER_IRQHandler:
B Default_Handler
.type SPI1_IRQHandler, %function
SPI1_IRQHandler:
B Default_Handler
.type SPI2_IRQHandler, %function
SPI2_IRQHandler:
B Default_Handler
.type USART1_IRQHandler, %function
USART1_IRQHandler:
B Default_Handler
.type USART2_IRQHandler, %function
USART2_IRQHandler:
B Default_Handler
.type USART3_IRQHandler, %function
USART3_IRQHandler:
B Default_Handler
.type EXTI15_10_IRQHandler, %function
EXTI15_10_IRQHandler:
B Default_Handler
.type RTC_Alarm_IRQHandler, %function
RTC_Alarm_IRQHandler:
B Default_Handler
.type OTG_FS_WKUP_IRQHandler, %function
OTG_FS_WKUP_IRQHandler:
B Default_Handler
.type TIM8_BRK_TIM12_IRQHandler, %function
TIM8_BRK_TIM12_IRQHandler:
B Default_Handler
.type TIM8_UP_TIM13_IRQHandler, %function
TIM8_UP_TIM13_IRQHandler:
B Default_Handler
.type TIM8_TRG_COM_TIM14_IRQHandler, %function
TIM8_TRG_COM_TIM14_IRQHandler:
B Default_Handler
.type TIM8_CC_IRQHandler, %function
TIM8_CC_IRQHandler:
B Default_Handler
.type ADC3_IRQHandler, %function
ADC3_IRQHandler:
B Default_Handler
.type FSMC_IRQHandler, %function
FSMC_IRQHandler:
B Default_Handler
.type SDIO_IRQHandler, %function
SDIO_IRQHandler:
B Default_Handler
.type TIM5_IRQHandler, %function
TIM5_IRQHandler:
B Default_Handler
.type SPI3_IRQHandler, %function
SPI3_IRQHandler:
B Default_Handler
.type UART4_IRQHandler, %function
UART4_IRQHandler:
B Default_Handler
.type UART5_IRQHandler, %function
UART5_IRQHandler:
B Default_Handler
.type TIM6_DAC_IRQHandler, %function
TIM6_DAC_IRQHandler:
B Default_Handler
.type TIM7_IRQHandler, %function
TIM7_IRQHandler:
B Default_Handler
.type DMA2_Channel1_IRQHandler, %function
DMA2_Channel1_IRQHandler:
B Default_Handler
.type DMA2_Channel2_IRQHandler, %function
DMA2_Channel2_IRQHandler:
B Default_Handler
.type DMA2_Channel3_IRQHandler, %function
DMA2_Channel3_IRQHandler:
B Default_Handler
.type DMA2_Channel4_5_IRQHandler, %function
DMA2_Channel4_5_IRQHandler:
B Default_Handler
.size Reset_Handler, . - Reset_Handler 链接文件
/*
* Linker script for HC32F196 (ARM Cortex-M4)
* Compatible with GCC toolchain
*/
/* Memory regions */
MEMORY
{
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 256K
RAM (rwx): ORIGIN = 0x20000000, LENGTH = 64K
}
/* Stack and heap sizes */
_estack = 0x20010000; /* End of RAM */
__stack_size = 0x00000800; /* 2KB stack */
__heap_size = 0x00003800; /* 14KB heap */
/* Sections */
SECTIONS
{
/* Exception vector table */
.isr_vector :
{
. = ALIGN(4);
KEEP(*(.isr_vector))
. = ALIGN(4);
} > FLASH
/* Code and read-only data */
.text :
{
. = ALIGN(4);
*(.text)
*(.text.*)
*(.glue_7)
*(.glue_7t)
*(.gcc_except_table)
*(.ARM.extab)
*(.ARM.exidx)
*(.rodata)
*(.rodata.*)
. = ALIGN(4);
} > FLASH
/* Data initialization values (stored in FLASH) */
.data_load :
{
. = ALIGN(4);
__data_load__ = .;
*(.data_load)
. = ALIGN(4);
} > FLASH AT > FLASH
/* Initialized data (loaded to RAM) */
.data : AT(__data_load__)
{
. = ALIGN(4);
__data_start__ = .;
*(.data)
*(.data.*)
. = ALIGN(4);
__data_end__ = .;
} > RAM
/* Uninitialized data (BSS) */
.bss :
{
. = ALIGN(4);
__bss_start__ = .;
*(.bss)
*(.bss.*)
*(COMMON)
. = ALIGN(4);
__bss_end__ = .;
} > RAM
/* Stack and heap */
.stack :
{
. = ALIGN(8);
__stack_start = .;
. = . + __stack_size;
__stack_end = .;
} > RAM
.heap :
{
. = ALIGN(8);
__heap_start = .;
. = . + __heap_size;
__heap_end = .;
__end = .;
} > RAM
}
页:
[1]