创建STM32万能项目模板,适用于所有种类的MCU
万能链接脚本
链接脚本中定义了入口函数,也即上电之后执行的第一个函数 Reset_Handler、定义了内存区域分配情况,以及手动去除一些标准库中的信息。
ST 官方并未在标准外设库中提供适用于各种型号的链接脚本,只有在项目实例中给出了零星几个型号项目的链接脚本。但是在 HAL 库中提供了如下链接脚本可供参考:
- STM32F100XB_FLASH.ld
- STM32F100XE_FLASH.ld
- STM32F101X6_FLASH.ld
- STM32F101XB_FLASH.ld
- STM32F101XE_FLASH.ld
- STM32F101XG_FLASH.ld
- STM32F102X6_FLASH.ld
- STM32F102XB_FLASH.ld
- STM32F103X6_FLASH.ld
- STM32F103XB_FLASH.ld
- STM32F103XE_FLASH.ld
- STM32F103XG_FLASH.ld
- STM32F105XC_FLASH.ld
- STM32F107XC_FLASH.ld
上述文件可以在 ST 官方提供的 STM32F1 系列 HAL 库中找到,路径为:STM32Cube_FW_F1_V1.8.7/Drivers/CMSIS/Device/ST/STM32F1xx/Source/Templates/gcc/linker/
阅读上述链接脚本会发现,他们之间几乎完全相同,唯一的区别就是栈顶指针和 RAM、FLASH 区域的大小:
/* STM32F101X6_FLASH.ld */ |
|
/* Highest address of the user mode stack */ |
|
_estack = 0x200017FF; /* end of RAM */ |
|
/* Generate a link error if heap and stack don't fit into RAM */ |
|
_Min_Heap_Size = 0x200; /* required amount of heap */ |
|
_Min_Stack_Size = 0x400; /* required amount of stack */ |
|
/* Specify the memory areas */ |
|
MEMORY |
|
{ |
|
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 32K |
|
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 6K |
|
} |
|
/* STM32F103XB_FLASH.ld */ |
|
/* Highest address of the user mode stack */ |
|
_estack = 0x20004FFF; /* end of RAM */ |
|
/* Generate a link error if heap and stack don't fit into RAM */ |
|
_Min_Heap_Size = 0x200; /* required amount of heap */ |
|
_Min_Stack_Size = 0x400; /* required amount of stack */ |
|
/* Specify the memory areas */ |
|
MEMORY |
|
{ |
|
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = 128K |
|
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 20K |
|
} |
对此,我们希望实现一份“万能链接脚本”,实现之后可以无缝衔接到任何项目中而无需修改源代码,需要变更的参数通过项目配置来实现。对此,可以使用 GNU Linker Script 中的 PROVIDE 指令来实现。PROVIDE 指令可以为脚本内的变量提供默认值,同时也支持通过传入链接器参数 -Wl,--defsym=symbol=value 来覆盖默认值。借此,可以将 RAM、FLASH 大小设置为可以被覆盖的值。此外用户堆栈大小 _Min_Stack_Size 和 _Min_Heap_Size 也可以根据实际情况调整:
PROVIDE(_Ram_Size = 10K); /* RAM size, 默认 : 10K */ |
|
PROVIDE(_Flash_Size = 32K); /* FLASH size, 默认 : 32K */ |
|
PROVIDE(_Min_Heap_Size = 0); /* 堆大小, 默认 : 0 */ |
|
PROVIDE(_Min_Stack_Size = 1K); /* 栈大小, 默认 : 1K */ |
|
MEMORY |
|
{ |
|
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = _Flash_Size |
|
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = _Ram_Size |
|
} |
栈顶指针 _estack 应当始终为 RAM 空间的结束为止,因为栈指针是从高地址向低地址增长的。将其定义在 MEMORY 区域之后,利用表达式动态计算其值,避免硬编码:
_estack = ORIGIN(RAM) + _Ram_Size; |
其余部分复制粘贴即可,不用修改。
使用例
将上述万能链接脚本作为某项目的链接脚本,默认 10K RAM/32K FLASH 是 STM32F103C6T6 的容量,添加链接器参数 -Wl,--defsym=_Ram_Size=20K -Wl,--defsym=_Flash_Size=64K ,就可以适配 20K RAM/64K FLASH 的 STM32F103C8T6 了。
万能启动文件
启动文件中使用 ARM 汇编做了三件事:实现函数 Reset_Handler、定义中断向量表,以及为各个中断函数提供默认实现和弱符号定义。
ST 官方为 STM32F10X 系列 MCU 提供了如下启动文件:
- startup_stm32f10x_cl.s
- startup_stm32f10x_hd.s
- startup_stm32f10x_hd_vl.s
- startup_stm32f10x_ld.s
- startup_stm32f10x_ld_vl.s
- startup_stm32f10x_md.s
- startup_stm32f10x_md_vl.s
- startup_stm32f10x_xl.s
上述文件可以在 ST 官方提供的 STM32F10X 系列标准外设库中找到,路径为 STM32F10x_StdPeriph_Lib_V3.6.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/TrueSTUDIO/
其命名规则为,常见的 F101、102、103 分为低容量(Low Density)、中容量(Medium Density)、高容量(High Density)三种,分别使用 ld、md、hd 后缀。
- F100 属于超值系列(Value Line),因此其启动文件有 vl 后缀,再根据容量不同,就有了 ld_vl、md_vl 和 hd_vl。
- F105/107 属于互联型(Connectivity Line),因此后缀为 cl。
- xl 代表超大容量产品,包括 F101 和 F103 的 ZF、ZG 版本,容量分别为 768K/80K 和 1M/80K。
阅读各个版本的启动文件可以发现,各种启动文件几乎完全相同,唯一区别就是 BootRAM 的值、中断向量表的大小以及中断函数名称不同。因此很容易就能想到使用 C 语言的条件编译功能,可以实现一份“万能启动文件”。
首先根据不同型号的宏定义,定义不同的 BootRAM 值:
/* Specific value for RAM boot mode */ |
|
#if defined(STM32F10X_LD) |
|
#define BootRAM 0xF108F85F |
|
#elif defined(STM32F10X_LD_VL) |
|
#define BootRAM 0xF108F85F |
|
#elif defined(STM32F10X_MD) |
|
#define BootRAM 0xF108F85F |
|
#elif defined(STM32F10X_MD_VL) |
|
#define BootRAM 0xF108F85F |
|
#elif defined(STM32F10X_HD) |
|
#define BootRAM 0xF1E0F85F |
|
#elif defined(STM32F10X_HD_VL) |
|
#define BootRAM 0xF108F85F |
|
#elif defined(STM32F10X_XL) |
|
#define BootRAM 0xF1E0F85F |
|
#elif defined(STM32F10X_CL) |
|
#define BootRAM 0xF1E0F85F |
|
#endif |
然后是中断函数的声明:
// 这一部分是通用的中断函数,适用于任何型号,因此不用放在条件编译中 |
|
/* System exception handlers */ |
|
__attribute__((weak, alias("Default_Handler"))) void NMI_Handler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void HardFault_Handler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void MemManage_Handler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void BusFault_Handler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void UsageFault_Handler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SVC_Handler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DebugMon_Handler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void PendSV_Handler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SysTick_Handler(void); |
|
// 这一部分是外设中断,根据型号不同有不同的名称 |
|
/* Peripheral interrupt handlers */ |
|
#if defined(STM32F10X_LD) |
|
// ... |
|
#elif defined(STM32F10X_LD_VL) |
|
#elif defined(STM32F10X_MD) |
|
#elif defined(STM32F10X_MD_VL) |
|
#elif defined(STM32F10X_HD) |
|
#elif defined(STM32F10X_HD_VL) |
|
#elif defined(STM32F10X_XL) |
|
#elif defined(STM32F10X_CL) |
|
#endif |
最后是中断向量表的定义:
/* Interrupt handler function pointer type definition */ |
|
typedef void (*InterruptHandlerPtr_TypeDef)(void); |
|
/* The Vector Table */ |
|
__attribute__((used, section(".isr_vector"))) |
|
InterruptHandlerPtr_TypeDef g_pfnVectors[] = { |
|
/* Initial stack pointer */ |
|
(InterruptHandlerPtr_TypeDef)(uintptr_t)_estack, |
|
/* Core exceptions */ |
|
#if defined(STM32F10X_LD) |
|
// ... |
|
#elif defined(STM32F10X_LD_VL) |
|
#elif defined(STM32F10X_MD) |
|
#elif defined(STM32F10X_MD_VL) |
|
#elif defined(STM32F10X_HD) |
|
#elif defined(STM32F10X_HD_VL) |
|
#elif defined(STM32F10X_XL) |
|
#elif defined(STM32F10X_CL) |
|
#endif |
|
(InterruptHandlerPtr_TypeDef)BootRAM, |
|
}; |
最后根据不同的启动文件中的函数不同填充上述条件编译框架,就得到了一份“万能启动文件”,适用于 STM32F10X 所有系列的 MCU。
附录
链接脚本
/* STM32F10X 链接脚本 */ |
|
/* 程序入口 */ |
|
ENTRY(Reset_Handler) |
|
/* 指定内存区域 */ |
|
/* 可以使用连接器参数 -Wl,--defsym=_foo=_size 来设置 RAM 和 FLASH 大小 */ |
|
PROVIDE(_Ram_Size = 10K); /* RAM size, 默认 : 10K */ |
|
PROVIDE(_Flash_Size = 32K); /* FLASH size, 默认 : 32K */ |
|
/* 用户堆栈大小 */ |
|
PROVIDE(_Min_Heap_Size = 0); /* 堆大小, 默认 : 0 */ |
|
PROVIDE(_Min_Stack_Size = 1K); /* 栈大小, 默认 : 1K */ |
|
/* 内存区域定义 */ |
|
MEMORY |
|
{ |
|
FLASH (rx) : ORIGIN = 0x08000000, LENGTH = _Flash_Size |
|
RAM (rwx) : ORIGIN = 0x20000000, LENGTH = _Ram_Size |
|
} |
|
/* 栈顶指针 */ |
|
_estack = ORIGIN(RAM) + _Ram_Size; |
|
/* 定义段 */ |
|
SECTIONS |
|
{ |
|
/* 向量表位于 FLASH 区域起始位置 */ |
|
.isr_vector : |
|
{ |
|
. = ALIGN(4); /* 起始位置 4 字节对齐 */ |
|
KEEP(*(.isr_vector)) /* 始终保留 */ |
|
. = ALIGN(4); /* 结束位置 4 字节对齐 */ |
|
} >FLASH /* 存放到 FLASH 区域 */ |
|
/* 程序代码保存到 FLASH 中 */ |
|
.text : |
|
{ |
|
. = ALIGN(4); |
|
*(.text*) /* 代码段 .text* */ |
|
*(.glue_7) |
|
*(.glue_7t) /* arm 和 thumb 胶水代码 */ |
|
*(.eh_frame) /* 异常处理框架 */ |
|
KEEP(*(.init)) |
|
KEEP(*(.fini)) |
|
. = ALIGN(4); |
|
_etext = .; /* 定义程序段结束地址 */ |
|
} >FLASH |
|
/* 常量数据保存到 FLASH 中 */ |
|
.rodata : |
|
{ |
|
. = ALIGN(4); |
|
*(.rodata*) /* 只读数据段 .rodata* 如 cosnt 变量、字符串常量 */ |
|
. = ALIGN(4); |
|
} >FLASH |
|
/* ARM 异常处理相关段 */ |
|
.ARM.extab : |
|
{ |
|
*(.ARM.extab* .gnu.linkonce.armextab.*) |
|
} >FLASH |
|
.ARM : |
|
{ |
|
__exidx_start = .; |
|
*(.ARM.exidx*) |
|
__exidx_end = .; |
|
} >FLASH |
|
.ARM.attributes : |
|
{ |
|
*(.ARM.attributes) |
|
} >FLASH |
|
.preinit_array : |
|
{ |
|
PROVIDE_HIDDEN(__preinit_array_start = .); |
|
KEEP(*(.preinit_array*)) |
|
PROVIDE_HIDDEN(__preinit_array_end = .); |
|
} >FLASH |
|
.init_array : |
|
{ |
|
PROVIDE_HIDDEN (__init_array_start = .); |
|
KEEP(*(SORT(.init_array.*))) |
|
KEEP(*(.init_array*)) |
|
PROVIDE_HIDDEN (__init_array_end = .); |
|
} >FLASH |
|
.fini_array : |
|
{ |
|
PROVIDE_HIDDEN (__fini_array_start = .); |
|
KEEP(*(.fini_array*)) |
|
KEEP(*(SORT(.fini_array.*))) |
|
PROVIDE_HIDDEN (__fini_array_end = .); |
|
} >FLASH |
|
/* 导出符号,用于启动文件中初始化数据 */ |
|
_sidata = LOADADDR(.data); |
|
/* 已初始化的数据段在运行时复制到 RAM 中 */ |
|
.data : |
|
{ |
|
. = ALIGN(4); |
|
_sdata = .; /* 定义 .data 段起始地址 */ |
|
*(.data*) /* .data 数据段 */ |
|
. = ALIGN(4); |
|
_edata = .; /* 定义 .data 段结束地址 */ |
|
} >RAM AT>FLASH |
|
/* 未初始化的数据段 */ |
|
.bss : |
|
{ |
|
. = ALIGN(4); |
|
_sbss = .; /* 定义 .bss 段起始地址 */ |
|
__bss_start__ = _sbss; |
|
*(.bss*) /* .bss 段 */ |
|
*(COMMON) |
|
. = ALIGN(4); |
|
_ebss = .; /* 定义 .bss 段结束地址 */ |
|
__bss_end__ = _ebss; |
|
} >RAM |
|
/* 用户堆栈段 */ |
|
._user_heap_stack : |
|
{ |
|
. = ALIGN(8); |
|
PROVIDE(end = .); /* 定义 end 符号 */ |
|
PROVIDE(_end = .); /* 定义 _end 符号 */ |
|
. = . + _Min_Heap_Size; /* 添加用户堆大小 */ |
|
. = . + _Min_Stack_Size; /* 添加用户栈大小 */ |
|
. = ALIGN(8); |
|
} >RAM |
|
/* 移除 C 标准库 */ |
|
/DISCARD/ : |
|
{ |
|
libc.a ( * ) |
|
libm.a ( * ) |
|
libgcc.a ( * ) |
|
} |
|
} |
|
启动文件
#include <stddef.h> |
|
#include <stdint.h> |
|
/* Symbols Defined in Linker Script */ |
|
extern uint8_t _estack[]; /* Top of Stack Pointer */ |
|
extern uint8_t _sidata[]; /* Start address for .data initialization values (in Flash) */ |
|
extern uint8_t _sdata[]; /* Start address for .data section (in RAM) */ |
|
extern uint8_t _edata[]; /* End address for .data section (in RAM) */ |
|
extern uint8_t _sbss[]; /* Start address for .bss section (in RAM) */ |
|
extern uint8_t _ebss[]; /* End address for .bss section (in RAM) */ |
|
/* Specific value for RAM boot mode */ |
|
#if defined(STM32F10X_LD) |
|
#define BootRAM 0xF108F85F |
|
#elif defined(STM32F10X_LD_VL) |
|
#define BootRAM 0xF108F85F |
|
#elif defined(STM32F10X_MD) |
|
#define BootRAM 0xF108F85F |
|
#elif defined(STM32F10X_MD_VL) |
|
#define BootRAM 0xF108F85F |
|
#elif defined(STM32F10X_HD) |
|
#define BootRAM 0xF1E0F85F |
|
#elif defined(STM32F10X_HD_VL) |
|
#define BootRAM 0xF108F85F |
|
#elif defined(STM32F10X_XL) |
|
#define BootRAM 0xF1E0F85F |
|
#elif defined(STM32F10X_CL) |
|
#define BootRAM 0xF1E0F85F |
|
#elif |
|
#error "Invalid device selected." |
|
#endif |
|
/* External function declarations */ |
|
extern void SystemInit(void); /* Defined in system_stm32f10x.c */ |
|
extern int main(void); /* Defined in main.c */ |
|
extern void __libc_init_array(void); /* Newlib library initialization */ |
|
/* Function prototypes */ |
|
void Default_Handler(void); |
|
__attribute__((weak)) void Reset_Handler(void); |
|
/* Provide weak aliases for each Exception handler to the Default_Handler */ |
|
/* System exception handlers */ |
|
__attribute__((weak, alias("Default_Handler"))) void NMI_Handler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void HardFault_Handler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void MemManage_Handler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void BusFault_Handler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void UsageFault_Handler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SVC_Handler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DebugMon_Handler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void PendSV_Handler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SysTick_Handler(void); |
|
/* Peripheral interrupt handlers */ |
|
#if defined(STM32F10X_LD) |
|
__attribute__((weak, alias("Default_Handler"))) void WWDG_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void PVD_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TAMPER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RTC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void FLASH_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RCC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI0_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel6_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel7_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void ADC1_2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USB_HP_CAN1_TX_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USB_LP_CAN1_RX0_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CAN1_RX1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CAN1_SCE_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI9_5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_BRK_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_UP_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_TRG_COM_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_CC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM3_IRQHandler(void); |
|
/* Reversed */ |
|
__attribute__((weak, alias("Default_Handler"))) void I2C1_EV_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C1_ER_IRQHandler(void); |
|
/* Reversed */ |
|
/* Reversed */ |
|
__attribute__((weak, alias("Default_Handler"))) void SPI1_IRQHandler(void); |
|
/* Reversed */ |
|
__attribute__((weak, alias("Default_Handler"))) void USART1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART2_IRQHandler(void); |
|
/* Reversed */ |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI15_10_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RTCAlarm_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USBWakeUp_IRQHandler(void); |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* BootRAM */ |
|
#elif defined(STM32F10X_LD_VL) |
|
__attribute__((weak, alias("Default_Handler"))) void WWDG_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void PVD_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TAMPER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RTC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void FLASH_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RCC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI0_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel6_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel7_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void ADC1_IRQHandler(void); |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI9_5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_BRK_TIM15_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_UP_TIM16_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_TRG_COM_TIM17_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_CC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM3_IRQHandler(void); |
|
/* Reversed */ |
|
__attribute__((weak, alias("Default_Handler"))) void I2C1_EV_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C1_ER_IRQHandler(void); |
|
/* Reversed */ |
|
/* Reversed */ |
|
__attribute__((weak, alias("Default_Handler"))) void SPI1_IRQHandler(void); |
|
/* Reversed */ |
|
__attribute__((weak, alias("Default_Handler"))) void USART1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART2_IRQHandler(void); |
|
/* Reversed */ |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI15_10_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RTCAlarm_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CEC_IRQHandler(void); |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
__attribute__((weak, alias("Default_Handler"))) void TIM6_DAC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM7_IRQHandler(void); |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* BootRAM */ |
|
#elif defined(STM32F10X_MD) |
|
__attribute__((weak, alias("Default_Handler"))) void WWDG_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void PVD_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TAMPER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RTC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void FLASH_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RCC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI0_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel6_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel7_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void ADC1_2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USB_HP_CAN1_TX_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USB_LP_CAN1_RX0_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CAN1_RX1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CAN1_SCE_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI9_5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_BRK_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_UP_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_TRG_COM_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_CC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C1_EV_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C1_ER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C2_EV_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C2_ER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SPI1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SPI2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI15_10_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RTCAlarm_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USBWakeUp_IRQHandler(void); |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* BootRAM */ |
|
#elif defined(STM32F10X_MD_VL) |
|
__attribute__((weak, alias("Default_Handler"))) void WWDG_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void PVD_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TAMPER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RTC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void FLASH_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RCC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI0_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel6_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel7_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void ADC1_IRQHandler(void); |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI9_5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_BRK_TIM15_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_UP_TIM16_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_TRG_COM_TIM17_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_CC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C1_EV_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C1_ER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C2_EV_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C2_ER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SPI1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SPI2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI15_10_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RTCAlarm_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CEC_IRQHandler(void); |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
__attribute__((weak, alias("Default_Handler"))) void TIM6_DAC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM7_IRQHandler(void); |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
#elif defined(STM32F10X_HD) |
|
__attribute__((weak, alias("Default_Handler"))) void WWDG_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void PVD_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TAMPER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RTC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void FLASH_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RCC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI0_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel6_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel7_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void ADC1_2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USB_HP_CAN1_TX_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USB_LP_CAN1_RX0_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CAN1_RX1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CAN1_SCE_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI9_5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_BRK_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_UP_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_TRG_COM_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_CC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C1_EV_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C1_ER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C2_EV_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C2_ER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SPI1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SPI2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI15_10_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RTCAlarm_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USBWakeUp_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM8_BRK_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM8_UP_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM8_TRG_COM_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM8_CC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void ADC3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void FSMC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SDIO_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SPI3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void UART4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void UART5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM6_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM7_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel4_5_IRQHandler(void); |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* BootRAM */ |
|
#elif defined(STM32F10X_HD_VL) |
|
__attribute__((weak, alias("Default_Handler"))) void WWDG_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void PVD_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TAMPER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RTC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void FLASH_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RCC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI0_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel6_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel7_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void ADC1_IRQHandler(void); |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI9_5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_BRK_TIM15_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_UP_TIM16_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_TRG_COM_TIM17_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_CC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C1_EV_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C1_ER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C2_EV_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C2_ER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SPI1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SPI2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI15_10_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RTCAlarm_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CEC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM12_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM13_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM14_IRQHandler(void); |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
__attribute__((weak, alias("Default_Handler"))) void TIM5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SPI3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void UART4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void UART5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM6_DAC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM7_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel4_5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel5_IRQHandler(void); |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* BootRAM */ |
|
#elif defined(STM32F10X_XL) |
|
__attribute__((weak, alias("Default_Handler"))) void WWDG_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void PVD_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TAMPER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RTC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void FLASH_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RCC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI0_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel6_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel7_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void ADC1_2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USB_HP_CAN1_TX_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USB_LP_CAN1_RX0_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CAN1_RX1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CAN1_SCE_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI9_5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_BRK_TIM9_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_UP_TIM10_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_TRG_COM_TIM11_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_CC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C1_EV_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C1_ER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C2_EV_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C2_ER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SPI1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SPI2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI15_10_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RTCAlarm_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USBWakeUp_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM8_BRK_TIM12_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM8_UP_TIM13_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM8_TRG_COM_TIM14_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM8_CC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void ADC3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void FSMC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SDIO_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SPI3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void UART4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void UART5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM6_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM7_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel4_5_IRQHandler(void); |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* BootRAM */ |
|
#elif defined(STM32F10X_CL) |
|
__attribute__((weak, alias("Default_Handler"))) void WWDG_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void PVD_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TAMPER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RTC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void FLASH_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RCC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI0_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel6_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA1_Channel7_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void ADC1_2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CAN1_TX_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CAN1_RX0_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CAN1_RX1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CAN1_SCE_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI9_5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_BRK_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_UP_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_TRG_COM_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM1_CC_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C1_EV_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C1_ER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C2_EV_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void I2C2_ER_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SPI1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SPI2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void USART3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void EXTI15_10_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void RTCAlarm_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void OTG_FS_WKUP_IRQHandler(void); |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
__attribute__((weak, alias("Default_Handler"))) void TIM5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void SPI3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void UART4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void UART5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM6_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void TIM7_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel2_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel3_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel4_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void DMA2_Channel5_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void ETH_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void ETH_WKUP_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CAN2_TX_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CAN2_RX0_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CAN2_RX1_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void CAN2_SCE_IRQHandler(void); |
|
__attribute__((weak, alias("Default_Handler"))) void OTG_FS_IRQHandler(void); |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* Reversed */ |
|
/* BootRAM */ |
|
#endif |
|
/* Interrupt handler function pointer type definition */ |
|
typedef void (*InterruptHandlerPtr_TypeDef)(void); |
|
/* The Vector Table */ |
|
__attribute__((used, section(".isr_vector"))) |
|
InterruptHandlerPtr_TypeDef g_pfnVectors[] = { |
|
/* Initial stack pointer */ |
|
(InterruptHandlerPtr_TypeDef)(uintptr_t)_estack, |
|
/* Core exceptions */ |
|
#if defined(STM32F10X_LD) |
|
Reset_Handler, |
|
NMI_Handler, |
|
HardFault_Handler, |
|
MemManage_Handler, |
|
BusFault_Handler, |
|
UsageFault_Handler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
SVC_Handler, |
|
DebugMon_Handler, |
|
NULL, |
|
PendSV_Handler, |
|
SysTick_Handler, |
|
/* External interrupts */ |
|
WWDG_IRQHandler, |
|
PVD_IRQHandler, |
|
TAMPER_IRQHandler, |
|
RTC_IRQHandler, |
|
FLASH_IRQHandler, |
|
RCC_IRQHandler, |
|
EXTI0_IRQHandler, |
|
EXTI1_IRQHandler, |
|
EXTI2_IRQHandler, |
|
EXTI3_IRQHandler, |
|
EXTI4_IRQHandler, |
|
DMA1_Channel1_IRQHandler, |
|
DMA1_Channel2_IRQHandler, |
|
DMA1_Channel3_IRQHandler, |
|
DMA1_Channel4_IRQHandler, |
|
DMA1_Channel5_IRQHandler, |
|
DMA1_Channel6_IRQHandler, |
|
DMA1_Channel7_IRQHandler, |
|
ADC1_2_IRQHandler, |
|
USB_HP_CAN1_TX_IRQHandler, |
|
USB_LP_CAN1_RX0_IRQHandler, |
|
CAN1_RX1_IRQHandler, |
|
CAN1_SCE_IRQHandler, |
|
EXTI9_5_IRQHandler, |
|
TIM1_BRK_IRQHandler, |
|
TIM1_UP_IRQHandler, |
|
TIM1_TRG_COM_IRQHandler, |
|
TIM1_CC_IRQHandler, |
|
TIM2_IRQHandler, |
|
TIM3_IRQHandler, |
|
NULL, |
|
I2C1_EV_IRQHandler, |
|
I2C1_ER_IRQHandler, |
|
NULL, |
|
NULL, |
|
SPI1_IRQHandler, |
|
NULL, |
|
USART1_IRQHandler, |
|
USART2_IRQHandler, |
|
NULL, |
|
EXTI15_10_IRQHandler, |
|
RTCAlarm_IRQHandler, |
|
USBWakeUp_IRQHandler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
#elif defined(STM32F10X_LD_VL) |
|
(InterruptHandlerPtr_TypeDef)(uintptr_t)_estack, |
|
Reset_Handler, |
|
NMI_Handler, |
|
HardFault_Handler, |
|
MemManage_Handler, |
|
BusFault_Handler, |
|
UsageFault_Handler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
SVC_Handler, |
|
DebugMon_Handler, |
|
NULL, |
|
PendSV_Handler, |
|
SysTick_Handler, |
|
WWDG_IRQHandler, |
|
PVD_IRQHandler, |
|
TAMPER_IRQHandler, |
|
RTC_IRQHandler, |
|
FLASH_IRQHandler, |
|
RCC_IRQHandler, |
|
EXTI0_IRQHandler, |
|
EXTI1_IRQHandler, |
|
EXTI2_IRQHandler, |
|
EXTI3_IRQHandler, |
|
EXTI4_IRQHandler, |
|
DMA1_Channel1_IRQHandler, |
|
DMA1_Channel2_IRQHandler, |
|
DMA1_Channel3_IRQHandler, |
|
DMA1_Channel4_IRQHandler, |
|
DMA1_Channel5_IRQHandler, |
|
DMA1_Channel6_IRQHandler, |
|
DMA1_Channel7_IRQHandler, |
|
ADC1_IRQHandler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
EXTI9_5_IRQHandler, |
|
TIM1_BRK_TIM15_IRQHandler, |
|
TIM1_UP_TIM16_IRQHandler, |
|
TIM1_TRG_COM_TIM17_IRQHandler, |
|
TIM1_CC_IRQHandler, |
|
TIM2_IRQHandler, |
|
TIM3_IRQHandler, |
|
NULL, |
|
I2C1_EV_IRQHandler, |
|
I2C1_ER_IRQHandler, |
|
NULL, |
|
NULL, |
|
SPI1_IRQHandler, |
|
NULL, |
|
USART1_IRQHandler, |
|
USART2_IRQHandler, |
|
NULL, |
|
EXTI15_10_IRQHandler, |
|
RTCAlarm_IRQHandler, |
|
CEC_IRQHandler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
TIM6_DAC_IRQHandler, |
|
TIM7_IRQHandler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
#elif defined(STM32F10X_MD) |
|
Reset_Handler, |
|
NMI_Handler, |
|
HardFault_Handler, |
|
MemManage_Handler, |
|
BusFault_Handler, |
|
UsageFault_Handler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
SVC_Handler, |
|
DebugMon_Handler, |
|
NULL, |
|
PendSV_Handler, |
|
SysTick_Handler, |
|
/* External interrupts */ |
|
WWDG_IRQHandler, |
|
PVD_IRQHandler, |
|
TAMPER_IRQHandler, |
|
RTC_IRQHandler, |
|
FLASH_IRQHandler, |
|
RCC_IRQHandler, |
|
EXTI0_IRQHandler, |
|
EXTI1_IRQHandler, |
|
EXTI2_IRQHandler, |
|
EXTI3_IRQHandler, |
|
EXTI4_IRQHandler, |
|
DMA1_Channel1_IRQHandler, |
|
DMA1_Channel2_IRQHandler, |
|
DMA1_Channel3_IRQHandler, |
|
DMA1_Channel4_IRQHandler, |
|
DMA1_Channel5_IRQHandler, |
|
DMA1_Channel6_IRQHandler, |
|
DMA1_Channel7_IRQHandler, |
|
ADC1_2_IRQHandler, |
|
USB_HP_CAN1_TX_IRQHandler, |
|
USB_LP_CAN1_RX0_IRQHandler, |
|
CAN1_RX1_IRQHandler, |
|
CAN1_SCE_IRQHandler, |
|
EXTI9_5_IRQHandler, |
|
TIM1_BRK_IRQHandler, |
|
TIM1_UP_IRQHandler, |
|
TIM1_TRG_COM_IRQHandler, |
|
TIM1_CC_IRQHandler, |
|
TIM2_IRQHandler, |
|
TIM3_IRQHandler, |
|
TIM4_IRQHandler, |
|
I2C1_EV_IRQHandler, |
|
I2C1_ER_IRQHandler, |
|
I2C2_EV_IRQHandler, |
|
I2C2_ER_IRQHandler, |
|
SPI1_IRQHandler, |
|
SPI2_IRQHandler, |
|
USART1_IRQHandler, |
|
USART2_IRQHandler, |
|
USART3_IRQHandler, |
|
EXTI15_10_IRQHandler, |
|
RTCAlarm_IRQHandler, |
|
USBWakeUp_IRQHandler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
#elif defined(STM32F10X_MD_VL) |
|
Reset_Handler, |
|
NMI_Handler, |
|
HardFault_Handler, |
|
MemManage_Handler, |
|
BusFault_Handler, |
|
UsageFault_Handler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
SVC_Handler, |
|
DebugMon_Handler, |
|
NULL, |
|
PendSV_Handler, |
|
SysTick_Handler, |
|
/* External interrupts */ |
|
WWDG_IRQHandler, |
|
PVD_IRQHandler, |
|
TAMPER_IRQHandler, |
|
RTC_IRQHandler, |
|
FLASH_IRQHandler, |
|
RCC_IRQHandler, |
|
EXTI0_IRQHandler, |
|
EXTI1_IRQHandler, |
|
EXTI2_IRQHandler, |
|
EXTI3_IRQHandler, |
|
EXTI4_IRQHandler, |
|
DMA1_Channel1_IRQHandler, |
|
DMA1_Channel2_IRQHandler, |
|
DMA1_Channel3_IRQHandler, |
|
DMA1_Channel4_IRQHandler, |
|
DMA1_Channel5_IRQHandler, |
|
DMA1_Channel6_IRQHandler, |
|
DMA1_Channel7_IRQHandler, |
|
ADC1_IRQHandler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
EXTI9_5_IRQHandler, |
|
TIM1_BRK_TIM15_IRQHandler, |
|
TIM1_UP_TIM16_IRQHandler, |
|
TIM1_TRG_COM_TIM17_IRQHandler, |
|
TIM1_CC_IRQHandler, |
|
TIM2_IRQHandler, |
|
TIM3_IRQHandler, |
|
TIM4_IRQHandler, |
|
I2C1_EV_IRQHandler, |
|
I2C1_ER_IRQHandler, |
|
I2C2_EV_IRQHandler, |
|
I2C2_ER_IRQHandler, |
|
SPI1_IRQHandler, |
|
SPI2_IRQHandler, |
|
USART1_IRQHandler, |
|
USART2_IRQHandler, |
|
USART3_IRQHandler, |
|
EXTI15_10_IRQHandler, |
|
RTCAlarm_IRQHandler, |
|
CEC_IRQHandler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
TIM6_DAC_IRQHandler, |
|
TIM7_IRQHandler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
#elif defined(STM32F10X_HD) |
|
Reset_Handler, |
|
NMI_Handler, |
|
HardFault_Handler, |
|
MemManage_Handler, |
|
BusFault_Handler, |
|
UsageFault_Handler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
SVC_Handler, |
|
DebugMon_Handler, |
|
NULL, |
|
PendSV_Handler, |
|
SysTick_Handler, |
|
/* External interrupts */ |
|
WWDG_IRQHandler, |
|
PVD_IRQHandler, |
|
TAMPER_IRQHandler, |
|
RTC_IRQHandler, |
|
FLASH_IRQHandler, |
|
RCC_IRQHandler, |
|
EXTI0_IRQHandler, |
|
EXTI1_IRQHandler, |
|
EXTI2_IRQHandler, |
|
EXTI3_IRQHandler, |
|
EXTI4_IRQHandler, |
|
DMA1_Channel1_IRQHandler, |
|
DMA1_Channel2_IRQHandler, |
|
DMA1_Channel3_IRQHandler, |
|
DMA1_Channel4_IRQHandler, |
|
DMA1_Channel5_IRQHandler, |
|
DMA1_Channel6_IRQHandler, |
|
DMA1_Channel7_IRQHandler, |
|
ADC1_2_IRQHandler, |
|
USB_HP_CAN1_TX_IRQHandler, |
|
USB_LP_CAN1_RX0_IRQHandler, |
|
CAN1_RX1_IRQHandler, |
|
CAN1_SCE_IRQHandler, |
|
EXTI9_5_IRQHandler, |
|
TIM1_BRK_IRQHandler, |
|
TIM1_UP_IRQHandler, |
|
TIM1_TRG_COM_IRQHandler, |
|
TIM1_CC_IRQHandler, |
|
TIM2_IRQHandler, |
|
TIM3_IRQHandler, |
|
TIM4_IRQHandler, |
|
I2C1_EV_IRQHandler, |
|
I2C1_ER_IRQHandler, |
|
I2C2_EV_IRQHandler, |
|
I2C2_ER_IRQHandler, |
|
SPI1_IRQHandler, |
|
SPI2_IRQHandler, |
|
USART1_IRQHandler, |
|
USART2_IRQHandler, |
|
USART3_IRQHandler, |
|
EXTI15_10_IRQHandler, |
|
RTCAlarm_IRQHandler, |
|
USBWakeUp_IRQHandler, |
|
TIM8_BRK_IRQHandler, |
|
TIM8_UP_IRQHandler, |
|
TIM8_TRG_COM_IRQHandler, |
|
TIM8_CC_IRQHandler, |
|
ADC3_IRQHandler, |
|
FSMC_IRQHandler, |
|
SDIO_IRQHandler, |
|
TIM5_IRQHandler, |
|
SPI3_IRQHandler, |
|
UART4_IRQHandler, |
|
UART5_IRQHandler, |
|
TIM6_IRQHandler, |
|
TIM7_IRQHandler, |
|
DMA2_Channel1_IRQHandler, |
|
DMA2_Channel2_IRQHandler, |
|
DMA2_Channel3_IRQHandler, |
|
DMA2_Channel4_5_IRQHandler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
#elif defined(STM32F10X_HD_VL) |
|
Reset_Handler, |
|
NMI_Handler, |
|
HardFault_Handler, |
|
MemManage_Handler, |
|
BusFault_Handler, |
|
UsageFault_Handler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
SVC_Handler, |
|
DebugMon_Handler, |
|
NULL, |
|
PendSV_Handler, |
|
SysTick_Handler, |
|
/* External interrupts */ |
|
WWDG_IRQHandler, |
|
PVD_IRQHandler, |
|
TAMPER_IRQHandler, |
|
RTC_IRQHandler, |
|
FLASH_IRQHandler, |
|
RCC_IRQHandler, |
|
EXTI0_IRQHandler, |
|
EXTI1_IRQHandler, |
|
EXTI2_IRQHandler, |
|
EXTI3_IRQHandler, |
|
EXTI4_IRQHandler, |
|
DMA1_Channel1_IRQHandler, |
|
DMA1_Channel2_IRQHandler, |
|
DMA1_Channel3_IRQHandler, |
|
DMA1_Channel4_IRQHandler, |
|
DMA1_Channel5_IRQHandler, |
|
DMA1_Channel6_IRQHandler, |
|
DMA1_Channel7_IRQHandler, |
|
ADC1_IRQHandler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
EXTI9_5_IRQHandler, |
|
TIM1_BRK_TIM15_IRQHandler, |
|
TIM1_UP_TIM16_IRQHandler, |
|
TIM1_TRG_COM_TIM17_IRQHandler, |
|
TIM1_CC_IRQHandler, |
|
TIM2_IRQHandler, |
|
TIM3_IRQHandler, |
|
TIM4_IRQHandler, |
|
I2C1_EV_IRQHandler, |
|
I2C1_ER_IRQHandler, |
|
I2C2_EV_IRQHandler, |
|
I2C2_ER_IRQHandler, |
|
SPI1_IRQHandler, |
|
SPI2_IRQHandler, |
|
USART1_IRQHandler, |
|
USART2_IRQHandler, |
|
USART3_IRQHandler, |
|
EXTI15_10_IRQHandler, |
|
RTCAlarm_IRQHandler, |
|
CEC_IRQHandler, |
|
TIM12_IRQHandler, |
|
TIM13_IRQHandler, |
|
TIM14_IRQHandler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
TIM5_IRQHandler, |
|
SPI3_IRQHandler, |
|
UART4_IRQHandler, |
|
UART5_IRQHandler, |
|
TIM6_DAC_IRQHandler, |
|
TIM7_IRQHandler, |
|
DMA2_Channel1_IRQHandler, |
|
DMA2_Channel2_IRQHandler, |
|
DMA2_Channel3_IRQHandler, |
|
DMA2_Channel4_5_IRQHandler, |
|
DMA2_Channel5_IRQHandler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
#elif defined(STM32F10X_XL) |
|
Reset_Handler, /* Reset handler */ |
|
NMI_Handler, /* Non Maskable Interrupt handler */ |
|
HardFault_Handler, /* Hard Fault handler */ |
|
MemManage_Handler, /* Memory Management Fault handler */ |
|
BusFault_Handler, /* Bus Fault handler */ |
|
UsageFault_Handler, /* Usage Fault handler */ |
|
NULL, /* Reserved */ |
|
NULL, /* Reserved */ |
|
NULL, /* Reserved */ |
|
NULL, /* Reserved */ |
|
SVC_Handler, /* SVCall handler */ |
|
DebugMon_Handler, /* Debug Monitor handler */ |
|
NULL, /* Reserved */ |
|
PendSV_Handler, /* PendSV handler */ |
|
SysTick_Handler, /* SysTick handler */ |
|
/* External interrupts */ |
|
WWDG_IRQHandler, |
|
PVD_IRQHandler, |
|
TAMPER_IRQHandler, |
|
RTC_IRQHandler, |
|
FLASH_IRQHandler, |
|
RCC_IRQHandler, |
|
EXTI0_IRQHandler, |
|
EXTI1_IRQHandler, |
|
EXTI2_IRQHandler, |
|
EXTI3_IRQHandler, |
|
EXTI4_IRQHandler, |
|
DMA1_Channel1_IRQHandler, |
|
DMA1_Channel2_IRQHandler, |
|
DMA1_Channel3_IRQHandler, |
|
DMA1_Channel4_IRQHandler, |
|
DMA1_Channel5_IRQHandler, |
|
DMA1_Channel6_IRQHandler, |
|
DMA1_Channel7_IRQHandler, |
|
ADC1_2_IRQHandler, |
|
USB_HP_CAN1_TX_IRQHandler, |
|
USB_LP_CAN1_RX0_IRQHandler, |
|
CAN1_RX1_IRQHandler, |
|
CAN1_SCE_IRQHandler, |
|
EXTI9_5_IRQHandler, |
|
TIM1_BRK_TIM9_IRQHandler, |
|
TIM1_UP_TIM10_IRQHandler, |
|
TIM1_TRG_COM_TIM11_IRQHandler, |
|
TIM1_CC_IRQHandler, |
|
TIM2_IRQHandler, |
|
TIM3_IRQHandler, |
|
TIM4_IRQHandler, |
|
I2C1_EV_IRQHandler, |
|
I2C1_ER_IRQHandler, |
|
I2C2_EV_IRQHandler, |
|
I2C2_ER_IRQHandler, |
|
SPI1_IRQHandler, |
|
SPI2_IRQHandler, |
|
USART1_IRQHandler, |
|
USART2_IRQHandler, |
|
USART3_IRQHandler, |
|
EXTI15_10_IRQHandler, |
|
RTCAlarm_IRQHandler, |
|
USBWakeUp_IRQHandler, |
|
TIM8_BRK_TIM12_IRQHandler, |
|
TIM8_UP_TIM13_IRQHandler, |
|
TIM8_TRG_COM_TIM14_IRQHandler, |
|
TIM8_CC_IRQHandler, |
|
ADC3_IRQHandler, |
|
FSMC_IRQHandler, |
|
SDIO_IRQHandler, |
|
TIM5_IRQHandler, |
|
SPI3_IRQHandler, |
|
UART4_IRQHandler, |
|
UART5_IRQHandler, |
|
TIM6_IRQHandler, |
|
TIM7_IRQHandler, |
|
DMA2_Channel1_IRQHandler, |
|
DMA2_Channel2_IRQHandler, |
|
DMA2_Channel3_IRQHandler, |
|
DMA2_Channel4_5_IRQHandler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
#elif defined(STM32F10X_CL) |
|
Reset_Handler, |
|
NMI_Handler, |
|
HardFault_Handler, |
|
MemManage_Handler, |
|
BusFault_Handler, |
|
UsageFault_Handler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
SVC_Handler, |
|
DebugMon_Handler, |
|
NULL, |
|
PendSV_Handler, |
|
SysTick_Handler, |
|
/* External interrupts */ |
|
WWDG_IRQHandler, |
|
PVD_IRQHandler, |
|
TAMPER_IRQHandler, |
|
RTC_IRQHandler, |
|
FLASH_IRQHandler, |
|
RCC_IRQHandler, |
|
EXTI0_IRQHandler, |
|
EXTI1_IRQHandler, |
|
EXTI2_IRQHandler, |
|
EXTI3_IRQHandler, |
|
EXTI4_IRQHandler, |
|
DMA1_Channel1_IRQHandler, |
|
DMA1_Channel2_IRQHandler, |
|
DMA1_Channel3_IRQHandler, |
|
DMA1_Channel4_IRQHandler, |
|
DMA1_Channel5_IRQHandler, |
|
DMA1_Channel6_IRQHandler, |
|
DMA1_Channel7_IRQHandler, |
|
ADC1_2_IRQHandler, |
|
CAN1_TX_IRQHandler, |
|
CAN1_RX0_IRQHandler, |
|
CAN1_RX1_IRQHandler, |
|
CAN1_SCE_IRQHandler, |
|
EXTI9_5_IRQHandler, |
|
TIM1_BRK_IRQHandler, |
|
TIM1_UP_IRQHandler, |
|
TIM1_TRG_COM_IRQHandler, |
|
TIM1_CC_IRQHandler, |
|
TIM2_IRQHandler, |
|
TIM3_IRQHandler, |
|
TIM4_IRQHandler, |
|
I2C1_EV_IRQHandler, |
|
I2C1_ER_IRQHandler, |
|
I2C2_EV_IRQHandler, |
|
I2C2_ER_IRQHandler, |
|
SPI1_IRQHandler, |
|
SPI2_IRQHandler, |
|
USART1_IRQHandler, |
|
USART2_IRQHandler, |
|
USART3_IRQHandler, |
|
EXTI15_10_IRQHandler, |
|
RTCAlarm_IRQHandler, |
|
OTG_FS_WKUP_IRQHandler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
TIM5_IRQHandler, |
|
SPI3_IRQHandler, |
|
UART4_IRQHandler, |
|
UART5_IRQHandler, |
|
TIM6_IRQHandler, |
|
TIM7_IRQHandler, |
|
DMA2_Channel1_IRQHandler, |
|
DMA2_Channel2_IRQHandler, |
|
DMA2_Channel3_IRQHandler, |
|
DMA2_Channel4_IRQHandler, |
|
DMA2_Channel5_IRQHandler, |
|
ETH_IRQHandler, |
|
ETH_WKUP_IRQHandler, |
|
CAN2_TX_IRQHandler, |
|
CAN2_RX0_IRQHandler, |
|
CAN2_RX1_IRQHandler, |
|
CAN2_SCE_IRQHandler, |
|
OTG_FS_IRQHandler, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
NULL, |
|
#endif |
|
(InterruptHandlerPtr_TypeDef)BootRAM, |
|
}; |
|
/** |
|
* @brief An infinite loop function. |
|
* |
|
*/ |
|
__attribute__((noreturn)) static void Infinite_Loop(void) |
|
{ |
|
while (1) { |
|
/* Infinite loop */ |
|
} |
|
} |
|
/** |
|
* @brief The default interrupt handler. |
|
* |
|
* @param None |
|
* @return None |
|
* |
|
* @note This function is called when an interrupt is triggered that is not handled by any other interrupt handler. |
|
*/ |
|
void Default_Handler(void) |
|
{ |
|
Infinite_Loop(); |
|
} |
|
/** |
|
* @brief Copy the data segment initializers from flash to SRAM |
|
* @param None |
|
* @retval None |
|
*/ |
|
static void CopyDataInit(void) |
|
{ |
|
volatile const uint32_t *src_begin = (void *)_sidata; |
|
const uint32_t *data_end = (void *)_edata; |
|
volatile uint32_t *data_begin = (void *)_sdata; |
|
while (data_begin < data_end) { |
|
*data_begin = *src_begin; |
|
data_begin++; |
|
src_begin++; |
|
} |
|
} |
|
/** |
|
* @brief Zero fill the bss segment |
|
* @param None |
|
* @retval None |
|
*/ |
|
static void FillZerobss(void) |
|
{ |
|
volatile uint32_t *bss_begin = (void *)_sbss; |
|
const uint32_t *bss_end = (void *)_ebss; |
|
while (bss_begin < bss_end) { |
|
*bss_begin = 0x00; |
|
bss_begin++; |
|
} |
|
} |
|
/** |
|
* @brief This is the code that gets called when the processor first |
|
* starts execution following a reset event. Only the absolutely |
|
* necessary set is performed, after which the application |
|
* supplied main() routine is called. |
|
* @param None |
|
* @retval None |
|
*/ |
|
__attribute__((noreturn)) void Reset_Handler(void) |
|
{ |
|
/* Copy the data segment initializers from flash to SRAM */ |
|
CopyDataInit(); |
|
/* Zero fill the bss segment */ |
|
FillZerobss(); |
|
/* Call the clock system initialization function */ |
|
SystemInit(); |
|
/* Call static constructors */ |
|
__libc_init_array(); |
|
/* Call the application's entry point */ |
|
main(); |
|
/* Should never reach here */ |
|
Infinite_Loop(); |
|
} |
更多推荐



所有评论(0)