移植 STM32 Keil 工程到 IAR遇到的常見問題
常見問題一:Fatal Error[Pe1696]: cannot open source file "core_cm3.h"
解決方案:
IAR的安裝路徑下已有CMSIS,不需要添加額外的文件,
如果包含了自己的CMSIS文件就會有沖突而會報很多錯
在options->general->library configuration裏的CMSIS你看Use CMSIS是不是被勾選了
可以勾選這個選項,不用你的CMSIS文件,這樣就解決了
常見問題二 :Error[Pe020]: identifier "FILE" is undefined
解決方案:如果工程中是用了串口,需要在IAR的Options -> General Options ->Library Configuration裏設置一下函數庫,
不然printf函數不對,將Library Configuration 中的Library 設置由"Normal"改為"Full"就可以了。
常見問題三:如果你的IAR工程是從別人那裏復制而來,如果編譯器版本不一致可能會出現各種問題,
例如Error[Ta097]: Cannot call intrinsic function "__nounwind __DSB" from Thumb mode in this architecture 啥啥的,很多。
解決方案:在打開別人的工程後最後還是要按自己的實際情況設置一下工程選項,
例子中的問題就是因為沒有選芯片型號導致的,具體的操作是按自己的實際情況把工程選項都設置好了再編譯。
常見問題四:還是IAR版本不同造成的,例如有時可能出現:Warning[25]: Label ‘Reset_Handler‘ is defined pubweak in a section implicitly declared root
解決方案:7.1版本之前,section默認是noroot,但現在是root。所以可以將SECTION .text:CODE:REORDER(1)改成SECTION .text:CODE:REORDER:NOROOT(1)或SECTION .text:CODE:REORDER:ROOT(1)。
註意 NOROOT和 ROOT 的區別,NOROOT表示如果符號沒有被關聯的時候是被優化掉的,如果想不被優化則使用ROOT。
解決辦法就是在SECTION .text:CODE:REORDER(1) 這句的REORDER 與(1)之間添加 :NOROOT !!! 註意位置和前面的冒號!!!
移植 STM32 Keil 工程到 IAR遇到的常見問題