assembly 在RISC V汇编程序中,“.weak”汇编指令做什么?

ddrv8njm  于 2023-02-16  发布在  其他
关注(0)|答案(1)|浏览(283)

我正在学习RISC V汇编语言,我一直在研究一些代码(我喜欢看别人如何编码的实际例子)。我在CH32003V的启动代码中发现了一个奇怪的汇编指令(一个新的RISC V MPU)。到目前为止,我已经搜索了一些材料,但没有找到任何关于". weak"指令的信息。下面是我找到它的代码片段。任何帮助都很感激。-)

.section  .init, "ax", @progbits
    .globl  _start
    .align  2
_start:
    .option   norvc;
    j       handle_reset
    .word   0
    .word   NMI_Handler                  /* NMI Handler */
    .word   HardFault_Handler            /* Hard Fault Handler */
    .word   0
    .word   0
    .word   0
    .word   0
    .word   0
    .word   0
    .word   0
    .word   0
    .word   SysTick_Handler             /* SysTick Handler */
    .word   0
    .word   SW_Handler                  /* SW Handler */
    .word   0
    /* External Interrupts */
    .word   WWDG_IRQHandler             /* Window Watchdog */
    .word   PVD_IRQHandler              /* PVD through EXTI Line detect */
    .word   FLASH_IRQHandler            /* Flash */
    .word   RCC_IRQHandler              /* RCC */
    .word   EXTI7_0_IRQHandler          /* EXTI Line 7..0 */
    .word   AWU_IRQHandler              /* AWU */
    .word   DMA1_Channel1_IRQHandler    /* DMA1 Channel 1 */
    .word   DMA1_Channel2_IRQHandler    /* DMA1 Channel 2 */
    .word   DMA1_Channel3_IRQHandler    /* DMA1 Channel 3 */
    .word   DMA1_Channel4_IRQHandler    /* DMA1 Channel 4 */
    .word   DMA1_Channel5_IRQHandler    /* DMA1 Channel 5 */
    .word   DMA1_Channel6_IRQHandler    /* DMA1 Channel 6 */
    .word   DMA1_Channel7_IRQHandler    /* DMA1 Channel 7 */
    .word   ADC1_IRQHandler             /* ADC1 */
    .word   I2C1_EV_IRQHandler          /* I2C1 Event */
    .word   I2C1_ER_IRQHandler          /* I2C1 Error */
    .word   USART1_IRQHandler           /* USART1 */
    .word   SPI1_IRQHandler             /* SPI1 */
    .word   TIM1_BRK_IRQHandler         /* TIM1 Break */
    .word   TIM1_UP_IRQHandler          /* TIM1 Update */
    .word   TIM1_TRG_COM_IRQHandler     /* TIM1 Trigger and Commutation */
    .word   TIM1_CC_IRQHandler          /* TIM1 Capture Compare */
    .word   TIM2_IRQHandler             /* TIM2 */

    .option rvc;
    .section  .text.vector_handler, "ax", @progbits
    .weak   NMI_Handler
    .weak   HardFault_Handler
    .weak   SysTick_Handler
    .weak   SW_Handler
    .weak   WWDG_IRQHandler
    .weak   PVD_IRQHandler
    .weak   FLASH_IRQHandler 

    .weak   RCC_IRQHandler
x8goxv8g

x8goxv8g1#

我假设您使用的是GCC汇编器。.weak指令与其他处理器(如ARM)相同。这些符号(显然指向处理函数)在您的代码中使用,但在其他地方定义。它们应该在链接时解决。您也可以检查相关的.symdepend指令。
手册:https://sourceware.org/binutils/docs/as/Weak.html

相关问题