首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:`SysTick_Handler编译truestudio IDE的多个定义

错误:`SysTick_Handler编译truestudio IDE的多个定义
EN

Stack Overflow用户
提问于 2022-01-29 10:26:38
回答 2查看 91关注 0票数 0

请请求帮助。尝试使用STM32F1 syst_tick中断。我正在使用Atollic 9.3.0。

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

但是有趣的是,当我编译时,我得到了错误:“`SysTick_Handler的多个定义”--这就是我声明它的方式。

代码语言:javascript
复制
extern "C"void SysTick_Handler(void)
{
  timeElapsed++;
}

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

EN

回答 2

Stack Overflow用户

发布于 2022-02-02 16:17:07

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

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

代码语言:javascript
复制
void __attribute__((weak))SysTick_Handler( )
{
}

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

代码语言:javascript
复制
extern "C" { 
    void SysTick_Handler( )
    { 
    
    } 
};

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

备注:

  1. 此问题仅限于默认中断处理程序。
  2. I只在TrueStudio IDE中测试;我不确定多维数据集IDE.

中的行为。

票数 1
EN

Stack Overflow用户

发布于 2022-01-29 18:27:32

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70904386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档