错误:编译 truestudio IDE 时"SysTick_Handler"的多个定义



请请求帮助。正在尝试使用STM32F1 syst_tick中断。我使用的是Atolic truestudio 9.3.0。

我有一个c++文件(tasks.cpp(,我在这个文件中声明了中断处理程序,并希望它能覆盖默认处理程序,因为默认处理程序在启动文件中有一个属性.weak。

但有趣的是,当我编译时,我得到了错误:"SysTick_Handler"的多重定义;我是这样声明的。

extern "C"void SysTick_Handler(void)
{
timeElapsed++;
}

TIM1、2、3、4的其他中断处理程序在同一个中声明文件,它们工作正常,但syst_tick不正常。问题是,为什么?

对于我之前发布的问题,后来对我有效的是编辑默认文件stm32103f10xx_it.c

sysTick处理程序上,我添加了:

void __attribute__((weak))SysTick_Handler( )
{
}

现在,在我的C++项目中的任何地方,我都可以这样实现SysTick处理程序:

extern "C" { 
void SysTick_Handler( )
{ 

} 
};

现在,这肯定会在编译时覆盖默认的处理程序。

注意:

  1. 此问题仅在默认中断处理程序中常见
  2. 我只在TrueStudio IDE中进行了测试;我不确定CUBE IDE中的行为

SysTick_Handler在STM文件中定义。如果你使用HAL,不要自己定义。如果您想获得计数器值,只需使用HAL函数HAL_GetTick();,如果您想在处理程序中调试一些代码,请定义回调函数。该定义位于项目中的..._it.c文件中。

相关内容

  • 没有找到相关文章

最新更新