NXP - 用MCUXpresso IDE v25.6.136的工具链编译Smoothieware固件工程

文章目录

    • [NXP - 用MCUXpresso IDE v25.6.136的工具链编译Smoothieware固件工程](#NXP - 用MCUXpresso IDE v25.6.136的工具链编译Smoothieware固件工程)
    • 概述
    • 笔记
    • Smoothieware固件工程编译器的版本
    • [查看MCUXpresso IDE v25.6.136的工具链版本](#查看MCUXpresso IDE v25.6.136的工具链版本)
    • [替换冰沙的工具链为MCUXpresso IDE的,然后尝试重新编译](#替换冰沙的工具链为MCUXpresso IDE的,然后尝试重新编译)
    • [用完整的MCUXpresso IDE v25.6.136命令行来编译官方冰沙工程](#用完整的MCUXpresso IDE v25.6.136命令行来编译官方冰沙工程)
    • 备注
    • END

NXP - 用MCUXpresso IDE v25.6.136的工具链编译Smoothieware固件工程

概述

上次做了一个实验NXP - 查看Smoothieware固件工程命令行编译时的具体编译命令行,还有些要确认的地方。

Smoothieware固件工程使用的编译器是古早的版本,且是作者指定的。

如果我要将Smoothieware固件工程移植到MCUXpresso IDE,是否会因为编译器的不同,导致编译不过?或者编译后的elf体积增加,导致无法下载到LPC1769内?

想确认一下这些细节问题。即使真的没问题,确认一下,心里有底总是好的。

笔记

Smoothieware固件工程编译器的版本

双击 D:\3rd\openpnp_prj\Smoothieware\Smoothieware\BuildShell.cmd

bash 复制代码
D:\3rd\openpnp_prj\Smoothieware\Smoothieware>arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.8.3 20140228 (release) [ARM/embedded-4_8-branch revision 208322]
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

D:\3rd\openpnp_prj\Smoothieware\Smoothieware>arm-none-eabi-g++ --version
arm-none-eabi-g++ (GNU Tools for ARM Embedded Processors) 4.8.3 20140228 (release) [ARM/embedded-4_8-branch revision 208322]
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

D:\3rd\openpnp_prj\Smoothieware\Smoothieware>where arm-none-eabi-gcc
D:\3rd\openpnp_prj\Smoothieware\Smoothieware\gcc-arm-none-eabi\bin\arm-none-eabi-gcc.exe

可知,冰沙工程官方版本的工具链为arm-gcc-4.8.3

查看MCUXpresso IDE v25.6.136的工具链版本

打开MCUXpresso IDE, 新建c++工程,MCU为LPC1769, 不加任何库(LpcOpen或者CMSIS), 选择工具链(gun++11, gun11), 不使能CRP.

初始的工程代码是能编译过的。

打开匹配工程环境的命令行

bash 复制代码
Microsoft Windows [版本 10.0.19045.5487]
(c) Microsoft Corporation。保留所有权利。

D:\my_tmp\nxp_dev\ws\testOnly1>arm-none-eabi-gcc --version
arm-none-eabi-gcc (Arm GNU Toolchain 14.2.Rel1 (Build arm-14.52)) 14.2.1 20241119
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


D:\my_tmp\nxp_dev\ws\testOnly1>arm-none-eabi-g++ --version
arm-none-eabi-g++ (Arm GNU Toolchain 14.2.Rel1 (Build arm-14.52)) 14.2.1 20241119
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


D:\my_tmp\nxp_dev\ws\testOnly1>where arm-none-eabi-g++
C:\nxp\MCUXpressoIDE_25.6.136\ide\plugins\com.nxp.mcuxpresso.tools.win32_25.6.0.202501151204\tools\bin\arm-none-eabi-g++.exe

D:\my_tmp\nxp_dev\ws\testOnly1>where arm-none-eabi-gcc
C:\nxp\MCUXpressoIDE_25.6.136\ide\plugins\com.nxp.mcuxpresso.tools.win32_25.6.0.202501151204\tools\bin\arm-none-eabi-gcc.exe

可知,在MCUXpresso IDE v25.6.136中新建的固件工程,用的工具链为arm-gcc-14.52

替换冰沙的工具链为MCUXpresso IDE的,然后尝试重新编译

C:\nxp\MCUXpressoIDE_25.6.136\ide\plugins\com.nxp.mcuxpresso.tools.win32_25.6.0.202501151204\tools\bin\中的所有东西,都拷贝到D:\3rd\openpnp_prj\Smoothieware\Smoothieware\gcc-arm-none-eabi\bin\

可以看到未被替换的文件如下

重新编译官方版的冰沙工程

双击 D:\3rd\openpnp_prj\Smoothieware\Smoothieware\BuildShell.cmd

bash 复制代码
make clean
make

MCUXpresso IDE版的工具链还需要cc1.exe.

找一下

C:\nxp\LPCXpresso_8.2.2_650\lpcxpresso\tools\lib\gcc\arm-none-eabi\5.4.1下面的所有东西都复制到D:\3rd\openpnp_prj\Smoothieware\Smoothieware\gcc-arm-none-eabi\bin\

再尝试编译

编译不过

看来必须要用完整的MCUXpresso IDE v25.6.136命令行来试试。

用完整的MCUXpresso IDE v25.6.136命令行来编译官方冰沙工程

bash 复制代码
# 命令行打开时,工作目录是在MCUXpresso IDE中新建工程的目录
# 需要切到冰沙官方工程的目录
D:\my_tmp\nxp_dev\ws\testOnly1>cd /d D:\3rd\openpnp_prj\Smoothieware\Smoothieware
# 确认一下gcc是否还是MCUXpresso IDE自带的
D:\3rd\openpnp_prj\Smoothieware\Smoothieware>arm-none-eabi-gcc --version
arm-none-eabi-gcc (Arm GNU Toolchain 14.2.Rel1 (Build arm-14.52)) 14.2.1 20241119
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# 现在工具链还是MCUXpresso IDE自带的
# 开始编译冰沙官方工程
make clean
make all

编译不过,看来工具链还是有区别。不过问题不大,都是标准头文件缺失,补上就行。

按照编译报错的提示,用SI4载入工程所有文件,修正后,再编译

在SI4中,设置工程源码目录为D:\3rd\openpnp_prj\Smoothieware\Smoothieware,只需要将包含源码的4个目录加入即可。

LPC1768也是临时目录,make clean之后就没有了。这个目录不加入SI4.

报错时,看最上面一行来修正错误。

现在知道,换了编译器,工程中始终缺cstdint的头文件,这个错误就不记录了。

又编译了一下,还是有.h少这个头文件。

在SI4中,在过滤器中输入*.h, 然后点开每个.h, 在头上补充 *#include <cstdint>,不过数量比较多,挨个补充后,再编译

怪不得官方要指定编译器,原来冰沙官方工程,在这个编译器下的测试是通过的。

工程中的drop目录是临时的,里面有拷贝过来的头文件,将这个临时目录删掉,再补充头文件内容。

加到一半,发现有些.h是不需要加的。有点担心了,不过是系统头文件,加了也不会有啥副作用。

算了,都加完,如果有副作用,git恢复,再一个一个按需添加(尽量加到上层的.h中)。

说copy没找到,尝试将C:\nxp\MCUXpressoIDE_25.6.136\ide\plugins\com.nxp.mcuxpresso.tools.win32_25.6.0.202501151204\buildtools\bin\中的cp.exe复制为copy.exe试试,不行。

bash 复制代码
# 手工新建 .\mbed\src\drop目录后,下面的cp命令成功
cp .\mbed\src\cpp\AnalogIn.h .\mbed\src\drop\AnalogIn.h

那需要将makefile中的copy命令改为cp命令才行了。

修改 D:\3rd\openpnp_prj\Smoothieware\Smoothieware\mbed\src\arm-common.mk

修改 D:\3rd\openpnp_prj\Smoothieware\Smoothieware\mbed\src\Makefile

再尝试编译,报错。

是路径符号要换成'/'才行,不能是windows下的'\'

修改 D:\3rd\openpnp_prj\Smoothieware\Smoothieware\mbed\src\Makefile

再尝试编译,报错

cstdint不能随便加,因为这个工程是c和C++混合编程,如果.c包含了头文件,是无法找到c++的头文件的。

看来图省事,乱搞是不行的。

那我将.h中加入的cstdint都恢复,然后按照编译提示去加,尽量加在上层的.h中(如果没有上级.h, 只能加在本.h中),这样工作量小一些。

加的东西如下

bash 复制代码
#ifdef __cplusplus
#include <cstdint>
#include <cstddef>
#include <string>
#else
// #include <stdint.h>
#endif

再重新编译一遍

bash 复制代码
make clean
make all

编译过了,且生成的elf的flash占用空间,并不比官方指定的旧工具链编译出来的大。O了。

备注

这个实验达到目的了。

已经将官方的原版Smoothieware固件工程,更换了工具链(MCUXpresso IDE v25.6.136自带的arm-gcc), 成功编译出了文件。

这个实验保证了,只要移植到MCUXpresso IDE编译环境,一定是可以正常编译调试的。需要注意: 添加进MCUXpresso IDE要指定好原版的编译参数(e.g. 预编译宏), 保证编译的效果和命令行环境下一致就行,这从MCUXpresso IDE编译过程的日志中,是能看出来的。

END

相关推荐
LostSpeed2 天前
NXP - 在MCUXpresso IDE中查看编译日志文件的方法
nxp
LostSpeed3 天前
在MCUXpresso IDE中建立使用静态库的工程
nxp
LostSpeed5 天前
NXP - 用MCUXpresso IDE导入lpcopen_2_10_lpcxpresso_nxp_lpcxpresso_1769.zip中的工程
nxp
LostSpeed6 天前
NXP - 在MCUXpresso IDE中编译调试Smoothieware固件工程 - 思路
nxp
LostSpeed8 天前
NXP - 安装后的MCUXpresso IDE里面有所有的支持包,不用另外去下载
nxp
飞凌嵌入式4 个月前
基于RK3588,飞凌教育品牌推出嵌入式人工智能实验箱EDU-AIoT ELF 2
linux·人工智能·嵌入式硬件·arm·nxp
深圳米客方德半导体有限公司4 个月前
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
嵌入式硬件·汽车·nxp·sd nand·t-box
toradexsh4 个月前
HDMI 显示器热插拔对应显示应用启停测试
arm·nxp·hdmi·imx8qm·hotplug
toradexsh5 个月前
NXP iMX8MP ARM 平台多屏幕克隆显示测试
linux·arm·nxp·toradex·imx8mp