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

相关推荐
weifengdq13 天前
SJA1124 SPI转4路LIN STM32 测试笔记
stm32·spi·nxp·lin·sja1124·spi4lin
皮皮哎哟19 天前
ARM驱动基础(基于正点原子IMX6ULL Mini)
arm开发·linux内核·imx6ull·nxp·正点原子、·imx6u mini
toradexsh2 个月前
基于 NXP iMX8MP ARM平台安装测试 Openclaw
linux·docker·arm·nxp·openclaw
toradexsh3 个月前
在NXP iMX8QM上使用 Jailhouse
arm·nxp·toradex·imx8mp·jailhouse
Jerry丶Li5 个月前
NXP--S32K移植FreeRTOS
嵌入式硬件·rtos·nxp·s32k
日更嵌入式的打工仔5 个月前
MCUXpresso开启汇编调试
汇编·单片机·nxp·mcuxpresso
LostSpeed6 个月前
NXP - 用MDK建立基于arm-none-eabi工具链的工程框架
nxp·mdk·arm-none-eabi
深圳市尚想信息技术有限公司7 个月前
NXP恩智浦 TEA6856AHN/V205K 车载射频接收芯片 赋能多元车载信息娱乐系统
nxp·导航·车载·恩智浦·电子元器件·射频接收器·接收芯片
LostSpeed7 个月前
NXP - 在MCUXpresso IDE中查看编译日志文件的方法
nxp