完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
求组,用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 错误,我的会呢? |
|
相关推荐
13个回答
|
|
鄙视楼主。求助时,大家真心帮忙解决。问题解决了,也不通报一下解决办法。
|
|
|
|
__weak ,这个是关键,如果有和 _weak 同名函数的,则加了 __weak修饰的自动被替换
|
|
|
|
那你估计要研究下__weak这个是干嘛用的了
|
|
|
|
帮顶 帮顶
|
|
|
|
__WEAK可以类似于C++里的重载
|
|
|
|
如果有__weak,则如果外部定义了该函数,就使用外部定义,如果没有,则使用本地定义。所以是不会报错的。
我自己试了下,在stm32f1xx_hal_tim.c有__weak定义的情况下,我再在main.c中定义是没有问题的。 你看一下你自己的程序里到底有没有__weak。 |
|
|
|
我也是定义在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). |
|
|
|
你好,问题解决了吗? |
|
|
|
已经解决了
|
|
|
|
HAL库不是CUBE库
|
|
|
|
__weak函数用于定义变量或者函数,常见于定义函数,在MDK ARM链接时优先链接定义为非weak的函数或变量,如果找不到则再链接weak函数。
|
|
|
|
_ASM 了解一下
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
230 浏览 0 评论
2293 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2099 浏览 3 评论
4725 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2247 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 16:08 , Processed in 3.276136 second(s), Total 108, Slave 88 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号