什么是弱功能,它们的用途是什么?我正在使用stm32f429微控制器

问题描述 投票:0回答:1

维基百科说:

弱符号表示在链接可执行文件和可链接格式(ELF)对象文件期间特别注释的符号。默认情况下,如果没有任何注释,则目标文件中的符号很强。在链接期间,强符号可以覆盖同名的弱符号。相反,共享名称的两个强符号在链接时产生链接错误。链接二进制可执行文件时,弱声明的符号不需要定义。相比之下,(默认情况下)没有定义的声明的强符号会触发未定义的符号链接错误。 C或C ++语言标准没有提到弱符号;因此,将它们插入代码中并不是非常便携。即使两个平台支持用于将符号标记为弱的相同或类似语法,语义也可能在细微点上不同,例如,在运行时动态链接期间的弱符号是否会丢失其语义。

什么是弱功能,它们的用途是什么?我使用的是stm32f429微控制器。库中有一些弱函数。但我无法理解,他们和他们的使用是什么!

我在谷歌搜索它但没有得到满意的答案。

c stm32f4discovery stm32f4 stm32ldiscovery
1个回答
1
投票

当一个函数前置了描述符__weak时,它基本上意味着如果你(编码器)没有定义它,它就在这里定义。

让我们来看看我的主要对手“HAL_UART_RxCpltCallback()”。

此功能存在于STM32F4-HAL代码库的HAL中,您可以从ST-Micro下载。

在文件stm32f4xx_hal_uart.c文件中,您会发现此函数定义为:

__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  /* NOTE: This function Should not be modified, when the callback is needed,
       the HAL_UART_RxCpltCallback could be implemented in the user  file
  */
}

因此,正如此处代码中的注释所示,将此函数放在您自己的用户文件中。但是,当你这样做时,不要加入__weak术语。这意味着链接器将定义HAL_UART_RxCpltCallback()函数,而不是stm32f4xx_hal_uart.c文件中定义的函数。

这使得通用代码库能够始终进行编译。您不必编写一大堆您不感兴趣的函数,但它会编译。在编写自己的时候,你只需要将你的定义为__weak并编写它。

简单?有用吗?

干杯!!

© www.soinside.com 2019 - 2024. All rights reserved.