.s、.c 和 .h 上下文中的 .vec 文件是什么?具体来说,stm32f10x_md.vec

What is .vec file in a .s, .c, and .h context? Specifically, stm32f10x_md.vec

什么是 .s、.c 和 .h 上下文中的 .vec 文件?具体来说,stm32f10x_md.vec。我一直卡在 .vec 文件中的 "ISR_HANDLER USART3_IRQHandler" 上,所有谷歌搜索都让我阅读了有关 openCV 的内容。 .vec 文件似乎不存在于任何地方。最接近的似乎是startup_stm32f10x_md.s。我将 Rowley CrossWorks 与 Nucleo f103rb 一起使用。

这些是文件的全部内容。根据目前的答案,我想知道 .vec 是否特定于 CrossWorks?

ISR_HANDLER WWDG_IRQHandler
ISR_HANDLER PVD_IRQHandler
ISR_HANDLER TAMPER_IRQHandler
ISR_HANDLER RTC_IRQHandler
ISR_HANDLER FLASH_IRQHandler
ISR_HANDLER RCC_IRQHandler
ISR_HANDLER EXTI0_IRQHandler
ISR_HANDLER EXTI1_IRQHandler
ISR_HANDLER EXTI2_IRQHandler
ISR_HANDLER EXTI3_IRQHandler
ISR_HANDLER EXTI4_IRQHandler
ISR_HANDLER DMA1_Channel1_IRQHandler
ISR_HANDLER DMA1_Channel2_IRQHandler
ISR_HANDLER DMA1_Channel3_IRQHandler
ISR_HANDLER DMA1_Channel4_IRQHandler
ISR_HANDLER DMA1_Channel5_IRQHandler
ISR_HANDLER DMA1_Channel6_IRQHandler
ISR_HANDLER DMA1_Channel7_IRQHandler
ISR_HANDLER ADC1_2_IRQHandler
ISR_HANDLER USB_HP_CAN1_TX_IRQHandler
ISR_HANDLER USB_LP_CAN1_RX0_IRQHandler
ISR_HANDLER CAN1_RX1_IRQHandler
ISR_HANDLER CAN1_SCE_IRQHandler
ISR_HANDLER EXTI9_5_IRQHandler
ISR_HANDLER TIM1_BRK_IRQHandler
ISR_HANDLER TIM1_UP_IRQHandler
ISR_HANDLER TIM1_TRG_COM_IRQHandler
ISR_HANDLER TIM1_CC_IRQHandler
ISR_HANDLER TIM2_IRQHandler
ISR_HANDLER TIM3_IRQHandler
ISR_HANDLER TIM4_IRQHandler
ISR_HANDLER I2C1_EV_IRQHandler
ISR_HANDLER I2C1_ER_IRQHandler
ISR_HANDLER I2C2_EV_IRQHandler
ISR_HANDLER I2C2_ER_IRQHandler
ISR_HANDLER SPI1_IRQHandler
ISR_HANDLER SPI2_IRQHandler
ISR_HANDLER USART1_IRQHandler
ISR_HANDLER USART2_IRQHandler
ISR_HANDLER USART3_IRQHandler
ISR_HANDLER EXTI15_10_IRQHandler
ISR_HANDLER RTCAlarm_IRQHandler
ISR_HANDLER USBWakeUp_IRQHandler

我认为 .vec 是您可以在链接描述文件中找到的一个部分。与 MPC56XX 一样,有一个名为 .vect 的部分,专门用于中断向量 table.

这是我第一次听说.vec 文件。

这是一个了解更多信息的好机会。

我认为它是一个包含中断向量的一部分的文件 table。考虑一个如下所示的启动程序集文件:

_vectors:
  .word __stack_end__
  ...
  ISR_HANDLER SysTick_Handler 
  #if defined(__TARGET_LD)
    #include "STM32F10X_LD.vec"
  #elif defined(__TARGET_MD)
    #include "STM32F10X_MD.vec"
  ...
  #endif

使用单独的 .vec 文件,您可以在您正在使用的目标微控制器上独立使用相同的顶级 Startup.s 文件,并且仅 customize/include 您的目标特定 .vec 文件

cortex-m 的优点在于您不必用特殊条目或 return 东西来包装异常。因此,除了重置处理 .data 和 .bss 之外,您可以不用 bootstrap 的程序集,但您仍然必须以某种方式生成向量 table 并用函数地址填充它。所以这看起来像是一种方法。我怀疑它特定于该工具链。简单的方法当然是只使用汇编器和汇编器指令,因为你已经有了支持编译器的汇编器。

这是一个普通的程序集文件,应该包含在另一个程序集文件中。名称 ISR_HANDLER 是在其他文件中定义的汇编宏,可能是 startup_stm32f10x_md.s,看起来像这样(取自 Rowley Associates's STM32_Startup.s):

.macro ISR_HANDLER name= 
   .section .vectors, "ax" 
   .word \name 
   .section .init, "ax" 
   .thumb_func 
   .weak \name 
 \name: 
 1: b 1b /* endless loop */ 
 .endm 

此宏在中断向量 table 中为命名的中断例程添加一个条目,它还提供该例程的默认实现,即无限循环,以防应用程序未提供以下之一它自己的。