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 !!! 注意位置和前面的冒号!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值