Программирование ARM Что такое weak-функция? Sat, March 28 2020  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Что такое weak-функция? Печать
Добавил(а) microsin   

Атрибутом __weak в IDE IAR снабжают функцию-заглушку, которую может переопределить пользователь в своем коде, чтобы поменять её по своему усмотрению. Эту возможность широко используют многие библиотеки, в частности CMSIS и HAL. Компилятор GCC также поддерживает атрибут weak.

Использование атрибута __weak для объекта на внешней декларации символа делает "слабыми" (weak) все ссылки на этот символ, и он помещается в модуль weak.

Использование атрибута __weak для объекта при его публичном определении делает это определение "слабым", которое можно переопределить.

Линкер не будет включать модуль из библиотеки исключительно для удовлетворения слабых ссылок на символ, а отсутствие определения для слабой ссылки не приведет к ошибке. Если не было добавлено определение, то адрес объекта будет нулевой.

При линковке у символа может быть любое количество weak-определений, и не более одного не-weak определения. Если символ необходим, и существует не-weak определение, то это не-weak определение будет использовано. Если нет не-weak определения, то будет использовано одно из weak-определений.

Пример:

extern __weak int foo;  /* Декларация weak-функции */
 
__weak void bar(void)   /* Определение weak-функции */
{
   /* Инкремент переменной foo, если она существует. */
   if (&foo != 0)
      ++foo;
}

[Ссылки]

1. IAR C/C++ Development Guide Twenty-fourth edition: June 2018 site:supp.iar.com.

 

Добавить комментарий


Защитный код
Обновить

Top of Page