查看: 2923|回复: 0

[分享] 解决MDK 升级至v5.30后出现的编译错误

[复制链接]

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
20017
最后登录
2024-4-25
发表于 2020-7-18 21:52:01 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2020-7-18 22:00 编辑

近日,有客户在最新版本Keilv5.30/5.31升级或安装LPCxxx DFP 12.1.x后,对NXP提供得SDK工程编译时,出现编译报错error: too many positionalarguments。具体报错现象如下图1所示。
1.jpg
图1
原因分析
编译器具体的报错信息为:
RTE/Device/LPC54S018JET180/startup_LPC54S018.s(842): error: too many positionalarguments。
通过查看该报错信息,可以知道问题出在startup_LPCS018.s文件中,后缀名为.s的文件意思是该文件中使用的操作命令为汇编命令。startup_LPCS018.s文件包含了设备启动信息,其中使用了汇编命令和C预操作命令两种操作命令。
在Keil开发环境中使用的编译器为ARM-CLANG编译器,如下图2所示。通过查阅ARM编译器的应用手册4.2Preprocessing assembly code章节内容,可以知道ARM-CLANG编译器是通过文件的后缀名来确定在编译过程中是否对C预操作命令进行编译的。.S和.s后缀文件对ARM-CLANG编译器来说代表的含义不同,其中:
.S文件中既包含汇编指令也允许包含C预操作指令
.s文件中只包含汇编指令不包括C预操作指令
而在最新的MDK v5.30中,ARM-CLANG编译器的配置里没有对上述的不同进行区分,因此编译器默认的配置为.s后缀名的文件中不能包含C预操作指令。而在LPC54S018M DFP 12.1.0的Pack中startup_LPCS018.s文件中,包含了汇编和C预操作两种指令。因此在进行编译时,编译器会报错。
2.jpg
图2
3.jpg
图3


解决方法
针对这一问题,有两种解决方法,分别为:
1. 在Option for target工具中的Asm窗口栏中的Misccontrols一栏中添加
-xassembler-with-cpp指令,如图4所示

         4.jpg
图4
2.startup_LPCS018.s文件所在的路径中找到该文件,将该文件的后缀名改为.S,如下图5、6所示。
         5.jpg
图5

       6.jpg
          图6
请注意:这一问题目前只存在于最新版本的MDK v5.30中,之前版本的MDK中ARM-CLANG编译器的Assemblercontrol string选项中默认加入了-xassembler-with-cpp指令。

注意事项

   经过测试,在目前使用最新的MDK v5.30对恩智浦官方的最新SDK中的工程进行编译时,会出现error: 'RTE_Components.h' file not found报错提醒。具体的解决方法如下:

使用Keil的Manage Run-Time Environment工具添加RTE_Components.h文件,具体操作如下图7所示。
         7.jpg
图7
请注意:由于SDK测试的Keil IDE最新版本为MDK v5.29,因此建议客户使用MDK v5.30之前版本IDE对SDK中的工程进行操作。




回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2024-4-26 04:49 , Processed in 0.130179 second(s), 28 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表