NXP - 用MCUXpresso IDE v25.6.136的工具链编译Smoothieware固件工程
文章目录
- NXP - 用MCUXpresso IDE v25.6.136的工具链编译Smoothieware固件工程
- 概述
- 笔记
- Smoothieware固件工程编译器的版本
- 查看MCUXpresso IDE v25.6.136的工具链版本
- 替换冰沙的工具链为MCUXpresso IDE的,然后尝试重新编译
- 用完整的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
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.
初始的工程代码是能编译过的。
打开匹配工程环境的命令行
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++.exeD:\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
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命令行来编译官方冰沙工程
# 命令行打开时,工作目录是在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试试,不行。
# 手工新建 .\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中),这样工作量小一些。
加的东西如下
#ifdef __cplusplus
#include <cstdint>
#include <cstddef>
#include <string>
#else
// #include <stdint.h>
#endif
再重新编译一遍
make clean
make all
编译过了,且生成的elf的flash占用空间,并不比官方指定的旧工具链编译出来的大。O了。
备注
这个实验达到目的了。
已经将官方的原版Smoothieware固件工程,更换了工具链(MCUXpresso IDE v25.6.136自带的arm-gcc), 成功编译出了文件。
这个实验保证了,只要移植到MCUXpresso IDE编译环境,一定是可以正常编译调试的。需要注意: 添加进MCUXpresso IDE要指定好原版的编译参数(e.g. 预编译宏), 保证编译的效果和命令行环境下一致就行,这从MCUXpresso IDE编译过程的日志中,是能看出来的。