移植 STM32 Keil 工程到 IAR遇到的常见问题

移植 STM32 Keil 工程到 IAR遇到的常见问题

AMENG
2019-02-20 / 0 评论 / 25 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2021年09月24日,已超过995天没有更新,若内容或图片失效,请留言反馈。

常见问题一: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 !!! 注意位置和前面的冒号!!!

0

评论 (0)

取消