IAR keil5
Error while running ielftool.exe "--ihex" "--verbose" "E:\學習\安富萊教程\STM32-V3 F103ZE\Ex001-串口printf和scanf例程\Ex001-串口printf和scanf例程\Project\EWARMv5\Flash\Exe\STM32F103ZE-EK.out" "E:\學習\安富萊教程\STM32-V3 ?
1.啟動文件的問題。keil5的啟動文件和iar的啟動文件是不一樣的,從keil移植過來的一定要注意這個問題。
? 2.core_cm3.h文件問題。由于iar自帶了該文件,所以keil5中需要將core_cm3.h文件刪除或改成其他名字,iar中的需要更改的地方如圖1,在Options->General options->Library Configration的CMSIS下勾選UseCMSIS。注意Library下選擇Full是使用微庫。
如果沒有選擇芯片? 也不會有USE CMSIS
? ? ? 圖1
? 3.ROM/RAM起始地址問題。keil5在Option中直接填入,如下圖2。iar如圖3所示,在Options->Linker->Config下勾選Override default(如果不勾選,默認就是芯片的正常地址)選擇分散加載文件的路勁,然后點擊Edite...進行編輯。注意:Vector table是中斷向量表偏移地址,注意和起始rom地址一致。
4.輸出hex文件。iar輸入hex文件如圖4。Options->Output Converter->Output下勾選Generate additional output,在Output format下拉中選擇Intel extended。同理輸出bin也是在這里選擇。?
?
或者
?5.iar的.h文件路徑和預處理宏,在Option->C/C++ Complier->Additonal include directorier和Define Symbols。圖5的Additional中填入的路勁是絕對路徑,如果工程考到別的地方再次編譯會報錯,可在Edit Include directory 中的路徑后面的倒三角中選擇帶$PROJ_DIR$的,表示選擇工程內的路徑。
?
錯誤積累1:Error[Ta097]: Cannot call intrinsic function "__nounwind __DSB" from Thumb mode in this architecture
這個主要原因是沒有設置芯片類型與型號
更改方法:
常見問題一: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 !!! 注意位置和前面的冒號!!!
總結
- 上一篇: linux apache24 使用,科学
- 下一篇: HTML标签类型及特点