Что такое 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. |