Arm SysTick处理程序具有多个定义

Arm SysTick处理程序具有多个定义,arm,cortex-m,Arm,Cortex M,查看Blinky示例(Keil MDK5安装),特别是ST32F769,我注意到SysTick_处理程序两次,除了启动汇编程序文件中的第三个弱定义。irq_cm4f.s中的第一个: SysTick_Handler PROC EXPORT SysTick_Handler IMPORT osRtxTick_Handler PUSH {R0,LR} ; Save EXC_RETURN

查看Blinky示例(Keil MDK5安装),特别是ST32F769,我注意到SysTick_处理程序两次,除了启动汇编程序文件中的第三个弱定义。irq_cm4f.s中的第一个:

SysTick_Handler PROC
            EXPORT   SysTick_Handler
            IMPORT   osRtxTick_Handler
            PUSH     {R0,LR}                ; Save EXC_RETURN
            BL       osRtxTick_Handler      ; Call osRtxTick_Handler
            POP      {R0,LR}                ; Restore EXC_RETURN
            MRS      R12,PSP
            B        SVC_Context
以及EventRecorder.c中的另一个:

void SysTick_Handler (void) {
  SysTickOverflowCounter++;
  SysTickOverflowUpdated = 1U;
}

让我困惑的是,两个过程如何“覆盖”了弱的一个(如上所述)?

是否有可能通过一些
#define SysTick_处理程序osrttick_处理程序
将C
SysTick_处理程序重命名为
osRtxTick_处理程序
#让链接器告诉你它使用的是什么,通常,如果您要求Keil生成一个映射文件,它将位于映射文件中。由于#defines,它使用assembler one,但当两者似乎都处于活动状态时,存在#define variant@Erlkoenig-好主意,但在项目中没有这样或类似的线条,反汇编显示了这两者?我想我找到了歧义的地方。当我将(提到的)#define EVENT_TIMESTAMP_SOURCE从0(现在是)更改为1时,编译器会抱怨SysTick_处理程序的多个定义。