Cube库定时器回调函数工程编译时不会报错

2019-07-14 15:03发布

求组,用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  错误,我的会呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
letian575
1楼-- · 2019-07-15 08:57
我也是定义在main函数里面,没有加__weak,,如下:
/* USER CODE BEGIN 0 */

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{

  HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);
}

/* USER CODE END 0 */

但是编译报错,这是为何:
EWEW.axf: Error: L6200E: Symbol HAL_TIM_PeriodElapsedCallback multiply defined (by main.o and stm32f1xx_hal_timebase_tim.o).
yanxl0028
2楼-- · 2019-07-15 14:24
letian575 发表于 2018-12-21 15:22
我也是定义在main函数里面,没有加__weak,,如下:
/* USER CODE BEGIN 0 */

你好,问题解决了吗?
letian575
3楼-- · 2019-07-15 18:24
已经解决了
csw_ying
4楼-- · 2019-07-15 18:39
 精彩回答 2  元偷偷看……
dpqw
5楼-- · 2019-07-15 19:48
__weak函数用于定义变量或者函数,常见于定义函数,在MDK ARM链接时优先链接定义为非weak的函数或变量,如果找不到则再链接weak函数。
山川1998
6楼-- · 2019-07-16 00:59
_ASM 了解一下

一周热门 更多>