IAR編譯警告Warning25解決辦法STM32
在使用IAR7.7編譯工程的時(shí)候,出現(xiàn)一大堆Warning[25]: Label 'xxx' is defined pubweak
in a section implicitly declared root
的警告,點(diǎn)進(jìn)去是指到啟動(dòng)文件startup_stm32f10x_xd.s里面的,這個(gè)問題有網(wǎng)友說是IAR在早期的版本里面使用了core_cm3文件,而在6以后高版本IAR中就不需要了。解決的辦法IAR官方也給出了方案了(文章末尾):
具體做法就是在啟動(dòng)文件里面startup_stm32f10x_xd.s(雙擊警告可以直接打開),在SECTION
.text:CODE:REORDER(1)后面添加一個(gè)NOROOT,改成下面這個(gè)樣子,注意那個(gè)數(shù)字是在NOROOT后面的。每一個(gè)SECTION都添加后保存,再次編譯就不會(huì)出錯(cuò)了。
-
Reset_Handler
-
LDR R0, =SystemInit
-
BLX R0
-
LDR R0, =__iar_program_start
-
BX R0
-
-
PUBWEAK NMI_Handler
-
SECTION .text:CODE:REORDER:NOROOT(1)
Warning[25]: Label 'xxxxx' is defined pubweak in a section
implicitly declared root
EW targets: |
ARM, STM8 |
EW component: |
Assembler |
Keywords: |
assembly |
Last update: |
January 12, 2015 |
Problem
After upgrading to...
EWARM 7.10.1
EWSTM8 2.10.1
...the Warning[25] is issued during assembly of a file that
assembled without warning on earlier version of the Embedded
Workbench.
Solution
To avoid the warning,
add ":NOROOT" to
the "SECTION" control
directive.
Add
the ":NOROOT" to
the left of the ()-part of the line.
PUBWEAK NMI_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
NMI_Handler
Background
The assembler is issuing Warning[25] for a deprecated assembler
construction.
The deprecated assembler source construction looks like this:
PUBWEAK NMI_Handler
SECTION .text:CODE:REORDER(1)
NMI_Handler
Details
The assembler control directive
of "SECTION" consists
of:
SECTION section :type [:flag] [(align)]
The change
is only to be
made among
the flag items.
I.e. don't change the"SECTION" , "section" ,
":type" nor
the "[(align)]" parts
of the line. (For example if
the alignment is
expressed as (2) then keep it at (2). (The (2) stands for an
alignment of 4 bytes, as the (2) is the power of two to which the
address should be aligned.))
The "[:flag]"-part can
have these flags:
ROOT (the default mode) or NOROOT
and
REORDER or NOREORDER (the default mode)
Where now the Warning from the Assembler shows that
the "explicit
noroot", due to the
directive "PUBWEAK", mismatch
the default mode, which gives an "implied
root"
So the "explicit
noroot", from "PUBWEAK", should
be matched with the flag"NOROOT".
The details for the assembler control directive
of "SECTION" can
be found in the chapter "Section control
directives" in
the "IAR Assembler™ Reference
Guide."
All product names are trademarks or registered trademarks of
their respective owners. |