xrymbr 发表于 2025-4-16 10:20

求HC32F196 GCC的启动文件和链接文件

本帖最后由 xrymbr 于 2025-4-16 11:58 编辑

#技术资源# 求HC32F196 GCC的启动文件和链接文件

Amazingxixixi 发表于 2025-4-24 15:34

学习一下啊!感觉有点知识慌了

Augenstern星星 发表于 2025-6-5 11:45

这不得去下载官方的资料才行?

Betty1299 发表于 2025-6-5 12:50

你找个小华的FAE吧,比较靠谱一些

Carina卡 发表于 2025-6-5 14:02

这个启动文件我觉得你可以去官方的资料里找找

Allison8859 发表于 2025-6-5 15:09

你想要GCC?官方提供吗?

Emily999 发表于 2025-6-5 16:13

HC32F196 使用 GCC 工具链开发时,需重点配置启动文件(startup_hc32f196.s)和链接脚本(hc32f196.ld),这些估计这芯片的开发包里就能有

Freeandeasy 发表于 2025-6-5 17:20

启动文件主要负责初始化硬件环境,包括栈指针(SP)、堆指针、向量表地址重映射等,并跳转到主函数 main()。

MahalKita 发表于 2025-6-5 19:27

链接脚本(hc32f196.ld)是定义内存布局和代码段、数据段的放置规则,确保程序正确加载和运行。

MercuryStar 发表于 2025-6-6 09:12

工具链选择:使用 arm-none-eabi-gcc 编译,arm-none-eabi-ld 链接

Euphoriaxixi 发表于 2025-6-6 11:20

堆栈溢出调整启动文件中的 _estack 定义,确保栈空间足够。

HeimdallHoney 发表于 2025-6-6 13:26

向量表地址错误检查链接脚本中 .isr_vector 的放置地址是否与芯片手册一致。

初级工程渣 发表于 2025-6-30 15:23

/*
* 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

远芳侵古道 发表于 2025-6-30 23:49

链接文件
/*
* 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]
查看完整版本: 求HC32F196 GCC的启动文件和链接文件