关于几种新版的stm32CubeMX 配合IAR7.x编译时出错的问题。

STM32CubeMX更新很频繁,不确定从哪一个版本起,它生成的IAR7.x的代码直接编译会出现错误,大致有几种。

一、如果MCU配置的是STM32F3XX,那么需要在IAR工程的Option中确认一下是否有正确的配置了MCU的型号,反正我用的5.X版本的CubeMX生成的工程打开后Device都是None,就没有对过

这种情况下编译必然是错误,一堆乱七八糟的错误。需要手动的把这一项设置为对应的MCU后才有可能编译通过。

二、几乎也是必出的错误,上一步设置了正确的型号后,再编译还是会有一堆错误,大约如下图所示

定位一下出错的地方,会找到一个库文件

如果不是对IAR的自定义的数据类型很熟悉,看起来是一头雾水的,而且这还是一个库文件。我第一次遇到这个问题的时候找了很久,终于查到问题出在 __RESTRICT这个宏定义上。在这个宏上点右键查看定义的地方,会定位到另一个库文件cmsis_iccarm.h中。如果右键不跳转那就直接去打开这个文件,里面有__RESTRICT的定义

这里需要将__restrict前的两个下划线删除掉,就可以编译通过了。度娘给出的解释是__restrict是linux下的写法,对于windows的写法是restrict,所以需要修改才能编译过去。这种错误也挺无语的。这个代码是CubeMX自动生成的,所以如果Cubemx中芯片的硬件外设有改动重新生成IAR工程时,这里也需要再手动改一次。

三、如果用CubeMX生成带FreeRTOS的工程,除了上面两个,还会出现一个编译错误。

Fatal Error[Pe035]: #error directive: intrinsics.h is already included previously!

如下所示:

它同样指向库文件cmsis_iccarm.h

从语法上看,是因为有定义过__INTRINSTICS_INCLUDED才会出这个错误,我搜编了工程,也没有找到在哪里有这个宏的定义。我也在网上搜过,有人遇到过这个问题,但是没有给出具体的解决方案,只是说换高版本的IAR可以解决这个问题。我也想换版本的IAR啊,我用的7.4是已经是六七年前的古董的,可是公司没钱给你换啊啊啊啊。

没办法,死马当活马医,我试着把#error那句话注释掉,结果编译居然就OK了

不过因为这个修改的是库文件,我并不清楚会不会有别的影响,我也是刚刚开始学FreeRTOS,目前还没有遇到别的问题。这个和第二个问题一样,每生成一次IAR的工程就需要改一次。

上面这几个问题应该都是CubeMX与IAR7.X的兼容性问题,按理这么明显的必发BUG不应该出现的,可是ST一直都没有修正,可能ST觉得IAR7.X太古老吧。不过像我一样只能用IAR7.X的同学可以参考一下。

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值