你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于Cube库定时器回调函数的使用问题

[复制链接]
D罩杯恋人 提问时间:2016-4-8 00:07 /
求组,用Cube生存的工程,它里面有例程;他例程库文件stm32f1xx_hal_tim.c定义了回调函数:如
__weak void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(htim);
  /* NOTE : This function Should not be modified, when the callback is needed,
            the __HAL_TIM_PeriodElapsedCallback could be implemented in the user file
   */

}

然后他在main.c又定义了:如
/**
  * @brief  Period elapsed callback in non blocking mode
  * @param  htim : TIM handle
  * @retval None
  */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  BSP_LED_Toggle(LED2);
  HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);
}

问题:为什么他的工程编译时不会报:Symbol HAL_TIM_PeriodElapsedCallback multiply defined  错误,我的会呢?
收藏 1 评论12 发布时间:2016-4-8 00:07

举报

12个回答
ataudio 回答时间:2017-8-15 09:59:18
鄙视楼主。求助时,大家真心帮忙解决。问题解决了,也不通报一下解决办法。
wofei1314 回答时间:2016-4-8 13:17:40
__weak ,这个是关键,如果有和 _weak 同名函数的,则加了 __weak修饰的自动被替换
yklstudent-1794 回答时间:2016-4-8 08:24:40
那你估计要研究下__weak这个是干嘛用的了
肖久 回答时间:2016-4-8 10:03:14
帮顶 帮顶
netlhx 回答时间:2016-4-8 10:06:55
__WEAK可以类似于C++里的重载
潇潇雨歇pku 回答时间:2016-4-8 10:18:59
如果有__weak,则如果外部定义了该函数,就使用外部定义,如果没有,则使用本地定义。所以是不会报错的。
我自己试了下,在stm32f1xx_hal_tim.c有__weak定义的情况下,我再在main.c中定义是没有问题的。
你看一下你自己的程序里到底有没有__weak。
D罩杯恋人 回答时间:2016-4-8 23:12:44
我也是定义在main函数里面,没有加__weak,,如下:
/* USER CODE BEGIN 0 */

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{

  HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);
}

/* USER CODE END 0 */

但是编译报错,这是为何:
EW\EW.axf: Error: L6200E: Symbol HAL_TIM_PeriodElapsedCallback multiply defined (by main.o and stm32f1xx_hal_timebase_tim.o).
auto_y 回答时间:2016-10-8 15:28:36
D罩杯恋人 发表于 2016-4-8 23:12
我也是定义在main函数里面,没有加__weak,,如下:
/* USER CODE BEGIN 0 */

你好,问题解决了吗?
D罩杯恋人 回答时间:2016-10-11 22:02:01
已经解决了
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版