Arm SysTick处理程序具有多个定义
查看Blinky示例(Keil MDK5安装),特别是ST32F769,我注意到SysTick_处理程序两次,除了启动汇编程序文件中的第三个弱定义。irq_cm4f.s中的第一个: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
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_处理程序
将CSysTick_处理程序重命名为osRtxTick_处理程序
#让链接器告诉你它使用的是什么,通常,如果您要求Keil生成一个映射文件,它将位于映射文件中。由于#defines,它使用assembler one,但当两者似乎都处于活动状态时,存在#define variant@Erlkoenig-好主意,但在项目中没有这样或类似的线条,反汇编显示了这两者?我想我找到了歧义的地方。当我将(提到的)#define EVENT_TIMESTAMP_SOURCE从0(现在是)更改为1时,编译器会抱怨SysTick_处理程序的多个定义。