IAR keil5
Error while running ielftool.exe "--ihex" "--verbose" "E:\學(xué)習(xí)\安富萊教程\STM32-V3 F103ZE\Ex001-串口printf和scanf例程\Ex001-串口printf和scanf例程\Project\EWARMv5\Flash\Exe\STM32F103ZE-EK.out" "E:\學(xué)習(xí)\安富萊教程\STM32-V3 ?
1.啟動(dòng)文件的問(wèn)題。keil5的啟動(dòng)文件和iar的啟動(dòng)文件是不一樣的,從keil移植過(guò)來(lái)的一定要注意這個(gè)問(wèn)題。
? 2.core_cm3.h文件問(wèn)題。由于iar自帶了該文件,所以keil5中需要將core_cm3.h文件刪除或改成其他名字,iar中的需要更改的地方如圖1,在Options->General options->Library Configration的CMSIS下勾選UseCMSIS。注意Library下選擇Full是使用微庫(kù)。
如果沒(méi)有選擇芯片? 也不會(huì)有USE CMSIS
? ? ? 圖1
? 3.ROM/RAM起始地址問(wèn)題。keil5在Option中直接填入,如下圖2。iar如圖3所示,在Options->Linker->Config下勾選Override default(如果不勾選,默認(rèn)就是芯片的正常地址)選擇分散加載文件的路勁,然后點(diǎn)擊Edite...進(jìn)行編輯。注意:Vector table是中斷向量表偏移地址,注意和起始rom地址一致。
4.輸出hex文件。iar輸入hex文件如圖4。Options->Output Converter->Output下勾選Generate additional output,在Output format下拉中選擇Intel extended。同理輸出bin也是在這里選擇。?
?
或者
?5.iar的.h文件路徑和預(yù)處理宏,在Option->C/C++ Complier->Additonal include directorier和Define Symbols。圖5的Additional中填入的路勁是絕對(duì)路徑,如果工程考到別的地方再次編譯會(huì)報(bào)錯(cuò),可在Edit Include directory 中的路徑后面的倒三角中選擇帶$PROJ_DIR$的,表示選擇工程內(nèi)的路徑。
?
錯(cuò)誤積累1:Error[Ta097]: Cannot call intrinsic function "__nounwind __DSB" from Thumb mode in this architecture
這個(gè)主要原因是沒(méi)有設(shè)置芯片類型與型號(hào)
更改方法:
常見(jiàn)問(wèn)題一:Fatal Error[Pe1696]: cannot open source file "core_cm3.h"?
解決方案:
IAR的安裝路徑下已有CMSIS,不需要添加額外的文件,如果包含了自己的CMSIS文件就會(huì)有沖突而會(huì)報(bào)很多錯(cuò) 在options->general->library configuration里的CMSIS你看Use CMSIS是不是被勾選了可以勾選這個(gè)選項(xiàng),不用你的CMSIS文件,這樣就解決了??
常見(jiàn)問(wèn)題二 :Error[Pe020]: identifier "FILE" is undefined 解決方案:如果工程中是用了串口,需要在IAR的Options -> General Options ->Library Configuration里設(shè)置一下函數(shù)庫(kù), 不然printf函數(shù)不對(duì),將Library Configuration 中的Library 設(shè)置由"Normal"改為"Full"就可以了。常見(jiàn)問(wèn)題三:如果你的IAR工程是從別人那里復(fù)制而來(lái),如果編譯器版本不一致可能會(huì)出現(xiàn)各種問(wèn)題,
例如Error[Ta097]: Cannot call intrinsic function "__nounwind __DSB" from Thumb mode in this architecture? 啥啥的,很多。
解決方案:在打開(kāi)別人的工程后最后還是要按自己的實(shí)際情況設(shè)置一下工程選項(xiàng),
例子中的問(wèn)題就是因?yàn)闆](méi)有選芯片型號(hào)導(dǎo)致的,具體的操作是按自己的實(shí)際情況把工程選項(xiàng)都設(shè)置好了再編譯。
常見(jiàn)問(wèn)題四:還是IAR版本不同造成的,例如有時(shí)可能出現(xiàn):Warning[25]: Label 'Reset_Handler' is defined pubweak in a section implicitly declared root?
解決方案:7.1版本之前,section默認(rèn)是noroot,但現(xiàn)在是root。所以可以將SECTION .text:CODE:REORDER(1)改成SECTION .text:CODE:REORDER:NOROOT(1)或SECTION .text:CODE:REORDER:ROOT(1)。
注意 NOROOT和 ROOT 的區(qū)別,NOROOT表示如果符號(hào)沒(méi)有被關(guān)聯(lián)的時(shí)候是被優(yōu)化掉的,如果想不被優(yōu)化則使用ROOT。
解決辦法就是在SECTION .text:CODE:REORDER(1) 這句的REORDER 與(1)之間添加 :NOROOT !!! 注意位置和前面的冒號(hào)!!!
總結(jié)
- 上一篇: linux apache24 使用,科学
- 下一篇: 江山如画 中国多少绝色