Программирование ARM: решение проблем, FAQ IAR Warning[25]: Label .. is defined pubweak in a section implicitly declared root Thu, November 21 2019  

Поделиться

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

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

IAR Warning[25]: Label .. is defined pubweak in a section implicitly declared root Печать
Добавил(а) microsin   

После обновления до версии 7.10.1 (или более новой) среды разработки IAR Embedded Workbench for ARM или на версию 2.10.1 (или более новую) IAR Embedded Workbench for STM8 при компиляции кода ассемблера может появляться предупреждение примерно такого рода:

Warning[25]: Label 'Reset_Handler' is defined pubweak in a section implicitly declared root
.\STM32-E_revE_demo\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F2xx\startup\iar\startup_stm32f2xx.s 160

Ассемблер IAR выдает это предупреждение на устаревшей конструкции ассемблера, где неявный флаг :ROOT не соответствует способу использования PUBWEAK. Например, рассмотрим следующие строки кода:

   PUBWEAK NMI_Handler
   SECTION .text:CODE:REORDER(1)
NMI_Handler

Здесь, как и в большинстве других случаев, Вы должны добавить флаг :NOROOT, чтобы снять несоответствие и избежать появления предупреждения.

Синтаксис директивы ассемблера SECTION следующий:

   SECTION  секция  :тип [:флаг] [(выравнивание)]

Дополнительную информацию можно найти в [2], см. раздел "Section control directives".

В большинстве случаев добавление :NOROOT к директиве управления SECTION - хороший способ удалить устаревшую конструкцию и избежать появления warning:

   PUBWEAK NMI_Handler 
   SECTION .text:CODE:REORDER:NOROOT(1)
NMI_Handler

NOREORDER (режим по умолчанию) начинает новый фрагмент в секции с указанным именем, или новую секцию, если секции с таким именем еще нет. REORDER начинает новую секцию с указанным именем.

ROOT (режим по умолчанию) показывает, что этот фрагмент секции не должен отбрасываться. NOROOT означает, что этот фрагмент кода отбрасывается линкером, если ни к какому символу из этой секции нет внешнего обращения. Обычно все фрагменты секции, кроме кода запуска (startup code) и векторов прерываний, должны установить этот флаг.

Примечание: что такое weak-символ, см. в статье [3].

[Ссылки]

1. Technical Note 30605 Label 'xxxxx' is defined pubweak in a section implicitly declared root site:iar.com.
2. IAR Assembler Reference Guide site:ftp.iar.se.
3. FreeRTOS, STM32: отладка ошибок и исключений.

 

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


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

Top of Page