Разница в отладочных символах в arm gcc/gdb

#arm

Вопрос:

Я новичок в контроллерах ARM. Когда я начал отладку, я заметил кое-что странное. Я должен был получить прерывание, и оно должно было оказаться в Default_Handler. Когда я заглядываю в окно источника, кажется, что оно работает так, как ожидалось. Но в окне разборки показано, что компьютер находится на WWDG_IRQHandler. Согласно файлу карты, и Default_Handler, и WWDG_IRQHandler расположены по одному и тому же адресу (0x080007f8).

Я использую STM32F407 с компилятором GNU ARM.

Пожалуйста, взгляните на скриншот.скриншот

 g_pfnVectors:
  .word  _estack
  .word  Reset_Handler
  .word  NMI_Handler
  .word  HardFault_Handler
  .word  MemManage_Handler
  .word  BusFault_Handler
  .word  UsageFault_Handler
  .word  0
  .word  0
  .word  0
  .word  0
  .word  SVC_Handler
  .word  DebugMon_Handler
  .word  0
  .word  PendSV_Handler
  .word  SysTick_Handler



  /* External Interrupts */
  .word     WWDG_IRQHandler                  
  .word     PVD_IRQHandler                   
  .word     TAMP_STAMP_IRQHandler            
  .word     RTC_WKUP_IRQHandler              
  .word     FLASH_IRQHandler                 
  .word     RCC_IRQHandler                   
  .word     EXTI0_IRQHandler                 
  .word     EXTI1_IRQHandler                 
  .word     EXTI2_IRQHandler                 
  .word     EXTI3_IRQHandler                 
  .word     EXTI4_IRQHandler                 
  .word     DMA1_Stream0_IRQHandler          
  .word     DMA1_Stream1_IRQHandler          
  .word     DMA1_Stream2_IRQHandler          
  .word     DMA1_Stream3_IRQHandler          
  .word     DMA1_Stream4_IRQHandler          
  .word     DMA1_Stream5_IRQHandler          
  .word     DMA1_Stream6_IRQHandler          
  .word     ADC_IRQHandler                   
  .word     CAN1_TX_IRQHandler               
  .word     CAN1_RX0_IRQHandler              
  .word     CAN1_RX1_IRQHandler              
  .word     CAN1_SCE_IRQHandler              
  .word     EXTI9_5_IRQHandler               
  .word     TIM1_BRK_TIM9_IRQHandler         
  .word     TIM1_UP_TIM10_IRQHandler         
  .word     TIM1_TRG_COM_TIM11_IRQHandler    
  .word     TIM1_CC_IRQHandler               
  .word     TIM2_IRQHandler                  
  .word     TIM3_IRQHandler                  
  .word     TIM4_IRQHandler                  
  .word     I2C1_EV_IRQHandler               
  .word     I2C1_ER_IRQHandler               
  .word     I2C2_EV_IRQHandler               
  .word     I2C2_ER_IRQHandler               
  .word     SPI1_IRQHandler                  
  .word     SPI2_IRQHandler                  
  .word     USART1_IRQHandler                
  .word     USART2_IRQHandler                
  .word     USART3_IRQHandler                
  .word     EXTI15_10_IRQHandler             
  .word     RTC_Alarm_IRQHandler             
  .word     OTG_FS_WKUP_IRQHandler           
  .word     TIM8_BRK_TIM12_IRQHandler        
  .word     TIM8_UP_TIM13_IRQHandler         
  .word     TIM8_TRG_COM_TIM14_IRQHandler    
  .word     TIM8_CC_IRQHandler               
  .word     DMA1_Stream7_IRQHandler          
  .word     FSMC_IRQHandler                  
  .word     SDIO_IRQHandler                  
  .word     TIM5_IRQHandler                  
  .word     SPI3_IRQHandler                  
  .word     UART4_IRQHandler                 
  .word     UART5_IRQHandler                 
  .word     TIM6_DAC_IRQHandler              
  .word     TIM7_IRQHandler                  
  .word     DMA2_Stream0_IRQHandler          
  .word     DMA2_Stream1_IRQHandler          
  .word     DMA2_Stream2_IRQHandler          
  .word     DMA2_Stream3_IRQHandler          
  .word     DMA2_Stream4_IRQHandler          
  .word     ETH_IRQHandler                   
  .word     ETH_WKUP_IRQHandler              
  .word     CAN2_TX_IRQHandler               
  .word     CAN2_RX0_IRQHandler              
  .word     CAN2_RX1_IRQHandler              
  .word     CAN2_SCE_IRQHandler              
  .word     OTG_FS_IRQHandler                
  .word     DMA2_Stream5_IRQHandler          
  .word     DMA2_Stream6_IRQHandler          
  .word     DMA2_Stream7_IRQHandler          
  .word     USART6_IRQHandler                
  .word     I2C3_EV_IRQHandler               
  .word     I2C3_ER_IRQHandler               
  .word     OTG_HS_EP1_OUT_IRQHandler        
  .word     OTG_HS_EP1_IN_IRQHandler         
  .word     OTG_HS_WKUP_IRQHandler           
  .word     OTG_HS_IRQHandler                
  .word     DCMI_IRQHandler                  
  .word     CRYP_IRQHandler                  
  .word     HASH_RNG_IRQHandler              
  .word     FPU_IRQHandler                   
       

/*******************************************************************************
*
* Provide weak aliases for each Exception handler to the Default_Handler.
* As they are weak aliases, any function with the same name will override
* this definition.
*
*******************************************************************************/
                  
.weak      NMI_Handler
.thumb_set NMI_Handler,Default_Handler

.weak      HardFault_Handler
.thumb_set HardFault_Handler,Default_Handler

.weak      MemManage_Handler
.thumb_set MemManage_Handler,Default_Handler

.weak      BusFault_Handler
.thumb_set BusFault_Handler,Default_Handler

.weak      UsageFault_Handler
.thumb_set UsageFault_Handler,Default_Handler

.weak      SVC_Handler
.thumb_set SVC_Handler,Default_Handler

.weak      DebugMon_Handler
.thumb_set DebugMon_Handler,Default_Handler

.weak      PendSV_Handler
.thumb_set PendSV_Handler,Default_Handler

.weak      SysTick_Handler
.thumb_set SysTick_Handler,Default_Handler

.weak      WWDG_IRQHandler
.thumb_set WWDG_IRQHandler,Default_Handler

.weak      PVD_IRQHandler
.thumb_set PVD_IRQHandler,Default_Handler

.weak      TAMP_STAMP_IRQHandler
.thumb_set TAMP_STAMP_IRQHandler,Default_Handler

.weak      RTC_WKUP_IRQHandler
.thumb_set RTC_WKUP_IRQHandler,Default_Handler

.weak      FLASH_IRQHandler
.thumb_set FLASH_IRQHandler,Default_Handler

.weak      RCC_IRQHandler
.thumb_set RCC_IRQHandler,Default_Handler

.weak      EXTI0_IRQHandler
.thumb_set EXTI0_IRQHandler,Default_Handler

.weak      EXTI1_IRQHandler
.thumb_set EXTI1_IRQHandler,Default_Handler

.weak      EXTI2_IRQHandler
.thumb_set EXTI2_IRQHandler,Default_Handler

.weak      EXTI3_IRQHandler
.thumb_set EXTI3_IRQHandler,Default_Handler

.weak      EXTI4_IRQHandler
.thumb_set EXTI4_IRQHandler,Default_Handler

.weak      DMA1_Stream0_IRQHandler
.thumb_set DMA1_Stream0_IRQHandler,Default_Handler

.weak      DMA1_Stream1_IRQHandler
.thumb_set DMA1_Stream1_IRQHandler,Default_Handler

.weak      DMA1_Stream2_IRQHandler
.thumb_set DMA1_Stream2_IRQHandler,Default_Handler

.weak      DMA1_Stream3_IRQHandler
.thumb_set DMA1_Stream3_IRQHandler,Default_Handler
              
.weak      DMA1_Stream4_IRQHandler
.thumb_set DMA1_Stream4_IRQHandler,Default_Handler

.weak      DMA1_Stream5_IRQHandler
.thumb_set DMA1_Stream5_IRQHandler,Default_Handler

.weak      DMA1_Stream6_IRQHandler
.thumb_set DMA1_Stream6_IRQHandler,Default_Handler

.weak      ADC_IRQHandler
.thumb_set ADC_IRQHandler,Default_Handler

.weak      CAN1_TX_IRQHandler
.thumb_set CAN1_TX_IRQHandler,Default_Handler

.weak      CAN1_RX0_IRQHandler
.thumb_set CAN1_RX0_IRQHandler,Default_Handler

.weak      CAN1_RX1_IRQHandler
.thumb_set CAN1_RX1_IRQHandler,Default_Handler

.weak      CAN1_SCE_IRQHandler
.thumb_set CAN1_SCE_IRQHandler,Default_Handler

.weak      EXTI9_5_IRQHandler
.thumb_set EXTI9_5_IRQHandler,Default_Handler

.weak      TIM1_BRK_TIM9_IRQHandler
.thumb_set TIM1_BRK_TIM9_IRQHandler,Default_Handler

.weak      TIM1_UP_TIM10_IRQHandler
.thumb_set TIM1_UP_TIM10_IRQHandler,Default_Handler

.weak      TIM1_TRG_COM_TIM11_IRQHandler
.thumb_set TIM1_TRG_COM_TIM11_IRQHandler,Default_Handler

.weak      TIM1_CC_IRQHandler
.thumb_set TIM1_CC_IRQHandler,Default_Handler

.weak      TIM2_IRQHandler
.thumb_set TIM2_IRQHandler,Default_Handler

.weak      TIM3_IRQHandler
.thumb_set TIM3_IRQHandler,Default_Handler

.weak      TIM4_IRQHandler
.thumb_set TIM4_IRQHandler,Default_Handler

.weak      I2C1_EV_IRQHandler
.thumb_set I2C1_EV_IRQHandler,Default_Handler

.weak      I2C1_ER_IRQHandler
.thumb_set I2C1_ER_IRQHandler,Default_Handler

.weak      I2C2_EV_IRQHandler
.thumb_set I2C2_EV_IRQHandler,Default_Handler

.weak      I2C2_ER_IRQHandler
.thumb_set I2C2_ER_IRQHandler,Default_Handler

.weak      SPI1_IRQHandler
.thumb_set SPI1_IRQHandler,Default_Handler

.weak      SPI2_IRQHandler
.thumb_set SPI2_IRQHandler,Default_Handler

.weak      USART1_IRQHandler
.thumb_set USART1_IRQHandler,Default_Handler

.weak      USART2_IRQHandler
.thumb_set USART2_IRQHandler,Default_Handler

.weak      USART3_IRQHandler
.thumb_set USART3_IRQHandler,Default_Handler

.weak      EXTI15_10_IRQHandler
.thumb_set EXTI15_10_IRQHandler,Default_Handler

.weak      RTC_Alarm_IRQHandler
.thumb_set RTC_Alarm_IRQHandler,Default_Handler

.weak      OTG_FS_WKUP_IRQHandler
.thumb_set OTG_FS_WKUP_IRQHandler,Default_Handler

.weak      TIM8_BRK_TIM12_IRQHandler
.thumb_set TIM8_BRK_TIM12_IRQHandler,Default_Handler

.weak      TIM8_UP_TIM13_IRQHandler
.thumb_set TIM8_UP_TIM13_IRQHandler,Default_Handler

.weak      TIM8_TRG_COM_TIM14_IRQHandler
.thumb_set TIM8_TRG_COM_TIM14_IRQHandler,Default_Handler

.weak      TIM8_CC_IRQHandler
.thumb_set TIM8_CC_IRQHandler,Default_Handler

.weak      DMA1_Stream7_IRQHandler
.thumb_set DMA1_Stream7_IRQHandler,Default_Handler

.weak      FSMC_IRQHandler
.thumb_set FSMC_IRQHandler,Default_Handler

.weak      SDIO_IRQHandler
.thumb_set SDIO_IRQHandler,Default_Handler

.weak      TIM5_IRQHandler
.thumb_set TIM5_IRQHandler,Default_Handler

.weak      SPI3_IRQHandler
.thumb_set SPI3_IRQHandler,Default_Handler

.weak      UART4_IRQHandler
.thumb_set UART4_IRQHandler,Default_Handler

.weak      UART5_IRQHandler
.thumb_set UART5_IRQHandler,Default_Handler

.weak      TIM6_DAC_IRQHandler
.thumb_set TIM6_DAC_IRQHandler,Default_Handler

.weak      TIM7_IRQHandler
.thumb_set TIM7_IRQHandler,Default_Handler

.weak      DMA2_Stream0_IRQHandler
.thumb_set DMA2_Stream0_IRQHandler,Default_Handler

.weak      DMA2_Stream1_IRQHandler
.thumb_set DMA2_Stream1_IRQHandler,Default_Handler

.weak      DMA2_Stream2_IRQHandler
.thumb_set DMA2_Stream2_IRQHandler,Default_Handler

.weak      DMA2_Stream3_IRQHandler
.thumb_set DMA2_Stream3_IRQHandler,Default_Handler

.weak      DMA2_Stream4_IRQHandler
.thumb_set DMA2_Stream4_IRQHandler,Default_Handler

.weak      ETH_IRQHandler
.thumb_set ETH_IRQHandler,Default_Handler

.weak      ETH_WKUP_IRQHandler
.thumb_set ETH_WKUP_IRQHandler,Default_Handler

.weak      CAN2_TX_IRQHandler
.thumb_set CAN2_TX_IRQHandler,Default_Handler

.weak      CAN2_RX0_IRQHandler
.thumb_set CAN2_RX0_IRQHandler,Default_Handler

.weak      CAN2_RX1_IRQHandler
.thumb_set CAN2_RX1_IRQHandler,Default_Handler

.weak      CAN2_SCE_IRQHandler
.thumb_set CAN2_SCE_IRQHandler,Default_Handler

.weak      OTG_FS_IRQHandler
.thumb_set OTG_FS_IRQHandler,Default_Handler

.weak      DMA2_Stream5_IRQHandler
.thumb_set DMA2_Stream5_IRQHandler,Default_Handler

.weak      DMA2_Stream6_IRQHandler
.thumb_set DMA2_Stream6_IRQHandler,Default_Handler

.weak      DMA2_Stream7_IRQHandler
.thumb_set DMA2_Stream7_IRQHandler,Default_Handler

.weak      USART6_IRQHandler
.thumb_set USART6_IRQHandler,Default_Handler

.weak      I2C3_EV_IRQHandler
.thumb_set I2C3_EV_IRQHandler,Default_Handler

.weak      I2C3_ER_IRQHandler
.thumb_set I2C3_ER_IRQHandler,Default_Handler

.weak      OTG_HS_EP1_OUT_IRQHandler
.thumb_set OTG_HS_EP1_OUT_IRQHandler,Default_Handler

.weak      OTG_HS_EP1_IN_IRQHandler
.thumb_set OTG_HS_EP1_IN_IRQHandler,Default_Handler

.weak      OTG_HS_WKUP_IRQHandler
.thumb_set OTG_HS_WKUP_IRQHandler,Default_Handler

.weak      OTG_HS_IRQHandler
.thumb_set OTG_HS_IRQHandler,Default_Handler

.weak      DCMI_IRQHandler
.thumb_set DCMI_IRQHandler,Default_Handler

.weak      CRYP_IRQHandler
.thumb_set CRYP_IRQHandler,Default_Handler

.weak      HASH_RNG_IRQHandler
.thumb_set HASH_RNG_IRQHandler,Default_Handler

.weak      FPU_IRQHandler
.thumb_set FPU_IRQHandler,Default_Handler
 

Комментарии:

1. как выглядит ваша векторная таблица. какое прерывание/исключение вы пытаетесь запустить и т. Д….

2. @old_timer, я добавил векторную таблицу в вопрос. Пожалуйста, посмотрите также на скриншот. Я пытался запустить прерывание системного таймера. Я получаю это прерывание, но когда я не использую функцию SysTick_Handler (), я должен оказаться в обработчике по умолчанию, верно? Мои сомнения в окне разборки, компьютер находится в WWDG_IRQHandler(). Но в окне источника это кажется правильным. Пожалуйста, взгляните на скриншот, прикрепленный к вопросу.

3. Из руководства по ассемблеру GNU : » .thumb_set : Это выполняет эквивалент .set директивы в том смысле, что создает символ, который является псевдонимом для другого символа (возможно, еще не определенного)…» Таким образом, у вас .thumb_set WWDG_IRQHandler,Default_Handler есть именно тот эффект, что WWDG_IRQHandler вы ссылаетесь на тот же адрес, Default_Handler что и . .weak Средства, которые это может быть отменено, если вы переопределите WWDG_IRQHandler в другом месте своей программы, но, по-видимому, вы этого не делаете. Что вы ожидали здесь увидеть?

4. по одному обработчику на каждого, используя . слабый и т. Д. Просто затрудняет чтение, что показывает разборка/сброс? вот что имеет значение.

5. Он .weak предназначен для обеспечения функциональности по умолчанию (неконтролируемое выполнение), когда прерывания не предусмотрены. Большая 3-я идиома .weak и .set состоит в том, чтобы все неопределенные прерывания использовали обработчик по умолчанию. Это объясняется комментарием в коде. Все сделано специально, и у вас нет вопросов в вашем вопросе. Некоторые способы включения прерывания, которое обычно отключено; вам необходимо предоставить определение для этого прерывания. Это один из псевдонимов (слабый/установленный). Обработчик по умолчанию-это бесконечный цикл, который останавливает выполнение случайного кода.