本帖最后由 小恩GG 于 2020-7-18 22:00 编辑
近日,有客户在最新版本Keilv5.30/5.31升级或安装LPCxxx DFP 12.1.x后,对NXP提供得SDK工程编译时,出现编译报错error: too many positionalarguments。具体报错现象如下图1所示。 图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 图3
解决方法 针对这一问题,有两种解决方法,分别为: 1. 在Option for target工具中的Asm窗口栏中的Misccontrols一栏中添加 -xassembler-with-cpp指令,如图4所示
图4
2.在startup_LPCS018.s文件所在的路径中找到该文件,将该文件的后缀名改为.S,如下图5、6所示。 图5
图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 请注意:由于SDK测试的Keil IDE最新版本为MDK v5.29,因此建议客户使用MDK v5.30之前版本IDE对SDK中的工程进行操作。
|