2016-02-19 9 views
0

Википедия говорит:Что такое слабые функции и каково их использование? Я использую stm32f429 микроконтроллер

слабый символ обозначает специально аннотированный символ в процессе подключения Executable и Linkable Format (ELF) объектных файлов. По умолчанию без любая аннотация, символ в объектном файле является сильным. Во время ссылки сильный символ может переопределить слабый символ с тем же именем. В контраст, два сильных символа, которые имеют имя, дают ошибку ссылки во время ссылки. При связывании двоичного исполняемого файла слабо объявленный символ не нуждается в определении. Для сравнения, (по умолчанию) объявленный сильный символ без определения запускает неопределенную ошибку ссылки на . Слабые символы не упоминаются на языках C или C++ ; как таковой, вставка их в код не очень переносима. Даже если две платформы поддерживают одинаковый или похожий синтаксис для обозначения символов как слабый, семантика может отличаться в тонких точках, например. ли слабые символы во время динамической компоновки во время выполнения теряют свою семантику или нет.

Каковы слабые функции и каково их использование? Я использую микроконтроллер stm32f429. В библиотеке есть некоторые слабые функции. Но я не могу понять, что они и их использование!

Я искал об этом в google, но не получил удовлетворительного ответа.

ответ

0

Когда функция добавлена ​​с дескриптором __weak, это в основном означает, что если вы (кодер) не определяете ее, она определяется здесь.

Давайте посмотрим на мою заклятую «HAL_UART_RxCpltCallback()».

Эта функция существует внутри HAL базы кода STM32F4-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 и написать это.

Простой? Полезно?

Приветствия!

+0

thanx ...... :) получил вашу мысль –