文章目录
-
- [NXP - 在MCUXpresso IDE中编译调试Smoothieware固件工程 - 思路](#NXP - 在MCUXpresso IDE中编译调试Smoothieware固件工程 - 思路)
- 概述
- 笔记
- c++编译器路径
- C编译器路径
- 头文件路径的编辑支持拷贝粘贴
- 工程前置框架
- 语言标准
- 工程随便在哪个位置都行
- 编译宏
- 确定编译宏
- 编译前置
- 不参与编译(被排除掉)的文件夹和文件
- 尝试编译
- 不用的配置实现要去掉
- 要写入的代码体积超过MCU的代码空间容量
- 裁剪多了也报错
- 备注
- END
NXP - 在MCUXpresso IDE中编译调试Smoothieware固件工程 - 思路
概述
以前一直奇怪,为啥Smoothieware没提到工程如何在IDE中编译,单步调试。他们是如何调试程序的。
因为正常开发者都要单步调试的,否则无法确定改的固件逻辑是否正确。
今天看到了官方文档,终于知道官方是如何编译调试的了。
但是官方给的方法,只能是编译。如果要单步调试的很难(老旧的工程,官方说的软件已经不好使了).
笔记
bash
https://github.com/Smoothieware/smoothieware-website-v1.git
D:\3rd\openpnp_prj\Smoothieware\smoothieware-website-v1\docs
compiling-smoothie.md
eclipse.md
看了说明,不好使和不方便。
mebd官方以前只有在线编译器,现在有mebd studio。
mebd已经废弃了,2026年就要关闭。
mebd studio试了一下不好用,是真的不好使。
eclipse需要装调试器,不方便。再说了,官方文档只是说,最后要装的是JLINK调试器。
但是,如果我现在手头的是NXP官方的1769板子,上面是板载的LPC-LINK2,怎么让eclipse用板载的调试器呢?
尝试用MCUXpresso IDE v25.6.136来编译调试,如果能行,那就很顺了。
用MCUXpresso IDE v25.6.136来编译Smoothieware,需要自己设置C++编译器和C编译器的头文件路径。
已经加好的头文件路径如下
c++编译器路径
bash
"${workspace_loc:/CMSIS_DSPLIB_CM3/inc}"
"${workspace_loc:/CMSIS_CORE_LPC17xx/inc}"
"${workspace_loc:/${ProjName}/src}"
"${workspace_loc:/${ProjName}/src/libs}"
"${workspace_loc:/${ProjName}/src/libs/Network}"
"${workspace_loc:/${ProjName}/src/libs/Network/Drivers}"
"${workspace_loc:/${ProjName}/src/libs/Network/uip}"
"${workspace_loc:/${ProjName}/src/libs/Network/uip/dhcpc}"
"${workspace_loc:/${ProjName}/src/libs/Network/uip/uip}"
"${workspace_loc:/${ProjName}/src/libs/Network/uip/telnetd}"
"${workspace_loc:/${ProjName}/src/libs/Network/uip/webserver}"
"${workspace_loc:/${ProjName}/src/libs/Network/uip/sftp}"
"${workspace_loc:/${ProjName}/src/libs/Network/uip/plan9}"
"${workspace_loc:/${ProjName}/src/libs/USBDevice}"
"${workspace_loc:/${ProjName}/src/libs/USBDevice/USBDevice}"
"${workspace_loc:/${ProjName}/src/libs/USBDevice/USBMSD}"
"${workspace_loc:/${ProjName}/src/libs/USBDevice/USBSerial}"
"${workspace_loc:/${ProjName}/src/libs/LPC17xx}"
"${workspace_loc:/${ProjName}/src/libs/LPC17xx/LPC17xxLib/inc}"
"${workspace_loc:/${ProjName}/src/libs/ConfigSources}"
"${workspace_loc:/${ProjName}/src/libs/ChaNFS}"
"${workspace_loc:/${ProjName}/src/libs/ChaNFS/CHAN_FS}"
"${workspace_loc:/${ProjName}/src/modules}"
"${workspace_loc:/${ProjName}/src/modules/utils/simpleshell}"
"${workspace_loc:/${ProjName}/src/modules/utils/panel}"
"${workspace_loc:/${ProjName}/src/modules/utils/panel/screens/3dprinter}"
"${workspace_loc:/${ProjName}/src/modules/utils/panel/screens/cnc}"
"${workspace_loc:/${ProjName}/src/modules/utils/panel/screens}"
"${workspace_loc:/${ProjName}/src/modules/utils/player}"
"${workspace_loc:/${ProjName}/src/modules/utils/panel/panels}"
"${workspace_loc:/${ProjName}/src/modules/utils/configurator}"
"${workspace_loc:/${ProjName}/src/modules/utils/motordrivercontrol}"
"${workspace_loc:/${ProjName}/src/modules/tools/laser}"
"${workspace_loc:/${ProjName}/src/modules/tools/spindle/SoftSerial}"
"${workspace_loc:/${ProjName}/src/modules/tools/spindle/Modbus}"
"${workspace_loc:/${ProjName}/src/modules/tools/extruder}"
"${workspace_loc:/${ProjName}/src/modules/tools/switch}"
"${workspace_loc:/${ProjName}/src/modules/tools/endstops}"
"${workspace_loc:/${ProjName}/src/modules/tools/toolmanager}"
"${workspace_loc:/${ProjName}/src/modules/tools/temperaturecontrol}"
"${workspace_loc:/${ProjName}/src/modules/tools/rotarydeltacalibration}"
"${workspace_loc:/${ProjName}/src/modules/tools/filamentdetector}"
"${workspace_loc:/${ProjName}/src/modules/robot/arm_solutions}"
"${workspace_loc:/${ProjName}/src/modules/communication}"
"${workspace_loc:/${ProjName}/src/modules/communication/utils}"
"${workspace_loc:/${ProjName}/src/modules/robot}"
"${workspace_loc:/${ProjName}/mbed}"
"${workspace_loc:/${ProjName}/mbed/src/cpp}"
"${workspace_loc:/${ProjName}/mbed/src/capi}"
"${workspace_loc:/${ProjName}/mbed/src/vendor/NXP/capi/LPC1768}"
"${workspace_loc:/${ProjName}/mbed/src/vendor/NXP/cmsis/LPC1768}"
"${workspace_loc:/${ProjName}/mri}"
C编译器路径
bash
"${workspace_loc:/CMSIS_DSPLIB_CM3/inc}"
"${workspace_loc:/CMSIS_CORE_LPC17xx/inc}"
"${workspace_loc:/${ProjName}/src/libs/LPC17xx/LPC17xxLib/inc}"
"${workspace_loc:/${ProjName}/src/libs/Network}"
"${workspace_loc:/${ProjName}/src/libs/Network/Drivers}"
"${workspace_loc:/${ProjName}/src/libs/Network/uip}"
"${workspace_loc:/${ProjName}/src/libs/Network/uip/uip}"
"${workspace_loc:/${ProjName}/src/libs/Network/uip/dhcpc}"
"${workspace_loc:/${ProjName}/src/libs/Network/uip/telnetd}"
"${workspace_loc:/${ProjName}/src/libs/Network/uip/webserver}"
"${workspace_loc:/${ProjName}/src/libs/Network/uip/sftp}"
"${workspace_loc:/${ProjName}/src/libs/Network/uip/plan9}"
"${workspace_loc:/${ProjName}/src/modules/tools/rotarydeltacalibration}"
"${workspace_loc:/${ProjName}/src/modules/tools/filamentdetector}"
"${workspace_loc:/${ProjName}/src/modules/utils/motordrivercontrol}"
头文件路径的编辑支持拷贝粘贴
CTRL + A 全选
CTRL + C 拷贝
DEL 删除
CTRL + V 粘贴
这样头文件的增加就很方便了。
当然,第一次编译工程,确实头文件路径不知道,需要根据报错信息来一个一个添加。
等后续实验(e.g. 新建工程), 就可以用以前拷贝好的头文件路径。
工程前置框架
新建C++工程(因为Smoothieware是C++和C混合编程),添加CMSIS支持

新建工程后,尝试一下,编译调试,正常后,就可以将新建的C++工程删除,保留CMSIS参考工程。
然后将Smoothieware工程拖进来编译就行。
编译时,会报错,提示系统头文件找不到(e.g. stdint.h), 这时需要添加一下代码,将系统头包上。
下面的代码是从新建的C++空工程拷贝过来的
c
#ifdef __USE_CMSIS
#include "LPC17xx.h"
#endif
#include <cr_section_macros.h>
只要工作区内有CMSIS支持库参考,就可以继续新建C++空工程。
如果空工程带的头不确定,新建一个空的C++空工程确认一下。
MCU选LPC1769
语言标准
至少要选C++11才行,这个官方文档中有说明。
C也选11标准。
都用gnu标准。
生成的空工程实现如下:
c
/*
* Copyright 2022 NXP
* NXP confidential.
* This software is owned or controlled by NXP and may only be used strictly
* in accordance with the applicable license terms. By expressly accepting
* such terms or by downloading, installing, activating and/or otherwise using
* the software, you are agreeing that you have read, and that you agree to
* comply with and are bound by, such license terms. If you do not agree to
* be bound by the applicable license terms, then you may not retain, install,
* activate or otherwise use the software.
*/
#ifdef __USE_CMSIS
#include "LPC17xx.h"
#endif
#include <cr_section_macros.h>
// TODO: insert other include files here
// TODO: insert other definitions and declarations here
int main(void) {
// TODO: insert code here
// Force the counter to be placed into memory
volatile static int i = 0 ;
// Enter an infinite loop, just incrementing a counter
while(1) {
i++ ;
// "Dummy" NOP to allow source level single
// stepping of tight while() loop
__asm volatile ("nop");
}
return 0 ;
}
验证了编译和单步调试,都正常。
工程随便在哪个位置都行
工程新建时,可以不建立在工作区中。
如果是工作区已经正好了,有了CMSIS参考工程,可以将需要编译的工程直接拖入工作区进行编译。
编译宏
如果不加编译宏,即使编译过了,由于过大,也下载不到MCU中。
先用官方提供的命令行编译,看看具体要加一些什么宏。然后将这些宏加入MCUXpresso IDE v25.6.136中冰沙工程的配置中。
确定编译宏
先将下载好的gcc-arm-none-eabi-4_8-2014q1-20140314-win32.zip放到工程目录中。
编辑 win_install.cmd, 不去网上下载 gcc-arm-none-eabi-4_8-2014q1-20140314-win32.zip
bash
echo Downloading GNU Tools for ARM Embedded Processors...
echo %DATE% %TIME% Executing build\win32\curl -kL0 %GCC4ARM_URL%>>%LOGFILE%
rem build\win32\curl -kL0 %GCC4ARM_URL% >%GCC4ARM_TAR%
rem if errorlevel 1 goto ExitOnError
执行 win_install.cmd
bash
已经生成了elf
Extracting disassembly to ../LPC1768/main.disasm
text data bss dec hex filename
392624 400 9844 402868 625b4 ../LPC1768/main.elf
根据提示,可知log文件位置,如果要找操作信息,可以看日志。
bash
D:\3rd\openpnp_prj\Smoothieware\Smoothieware\win_install.log
先看一下日志
看到执行了以下几个makefile
bash
mbed-lpc1768.mk
mbed-lpc11u24.mk
这2个.mk都是工程根目录下的makefile调用的。
将win_install.log拷贝出来做参考
查看SourceTree, 除了改过的Win_install.cmd, 没有需要添加的新文件。
bash
# 删除未跟踪的文件及目录(递归删除)
git clean -fd
# 预览将被删除的文件(安全检查)
git clean -xdn
# 确认无误后执行删除(-x:包含忽略文件;-d:包含目录;-f:强制删除)
git clean -xdf
bash
$ git clean -xdn
Would remove BuildShell.cmd
Would remove LPC1768/
Would remove gcc-arm-none-eabi/
Would remove mbed/drop/
Would remove mbed/src/Debug/
Would remove mbed/src/Release/
Would remove win_install.log
$ git clean -xdf
Removing BuildShell.cmd
Removing LPC1768/
Removing gcc-arm-none-eabi/
Removing mbed/drop/
Removing mbed/src/Debug/
Removing mbed/src/Release/
Removing win_install.log
删除工程中所有的makefile, *.mk
用SourceTree看一下
根据编译情况,就可以查看该加什么编译宏了。
如果不加控制,直接都编译,MCU中放不下的。
从makefile + log, 可以看出,参与编译的目录为mbed, src.
需要找编译宏的地方,就是3个makefile(/makefile, mbed-lpc1768.mk, mbed-lpc11u24.mk), 看到还有一些makefile.
看到的宏不多,有个新板子(估计是1769), 按照120MHZ的晶振频率来编译。
编译前置
现在可以将清理过的目录Smoothieware, 拖入MCUXpresso IDE v25.6.136
拖入后,不管是选Copy或者Link,工程文件夹都不出现在IDE左边。
那么导入吧
现在工程出现在了IDE左边视图中。
现在将不需要的工程子文件夹排除在编译之外。

不参与编译,排除掉的文件和文件夹在IDE左边的树中,都看不到了。
不参与编译(被排除掉)的文件夹和文件
build
bootloader
ConfigSamples
FirmwareBin
被排除后的文件和文件夹,不是看不见了,就是文件图标前面有个排除标记
因为MCU-IDE本身就能SWD调试,不需要MRI调试方式,可以排除MRI
如果排除太麻烦,也可以直接按住DEL键,进行删除。
删掉没用的文件之后,可以看到,需要编译的文件夹和用win_install.cmd编译的log一致,只需要编译mbed和src
继续翻src, 将3drinter和cnc只留一个。将cnc去掉(因为openpnp是按照3D打印机的配置来的)。
不要的文件或者文件夹,排除和删除都可。如果不确定,就排除。如果确定,就删除。
尝试编译

bash
14:33:48 **** Incremental Build of configuration Debug for project Smoothieware ****
make -r -j16 all
make: *** No rule to make target 'all'. Stop.
"make -r -j16 all" terminated with exit code 2. Build might be incomplete.
14:33:48 Build Failed. 1 errors, 0 warnings. (took 111ms)
这个工程导入时,是按照makefile工程来导入的,没有makefile(被我删掉了).导致报错。

重新编译,不好使。
退出MUC-IDE, 将文件夹改名,除了整理后的mbed和src, 其他都删掉,备用。
新建一个工作区,或将当前工作区东西都 删掉。
新建一个MCU-IDE的c++工程,选LPC1769, 不要cmsis和LpcOpen, 不要crp, c和c++的语言标准都是2011标准, 新建一个工程。
主代码为
c
/*
* Copyright 2022 NXP
* NXP confidential.
* This software is owned or controlled by NXP and may only be used strictly
* in accordance with the applicable license terms. By expressly accepting
* such terms or by downloading, installing, activating and/or otherwise using
* the software, you are agreeing that you have read, and that you agree to
* comply with and are bound by, such license terms. If you do not agree to
* be bound by the applicable license terms, then you may not retain, install,
* activate or otherwise use the software.
*/
#ifdef __USE_CMSIS
#include "LPC17xx.h"
#endif
#include <cr_section_macros.h>
// TODO: insert other include files here
// TODO: insert other definitions and declarations here
int main(void) {
// TODO: insert code here
// Force the counter to be placed into memory
volatile static int i = 0 ;
// Enter an infinite loop, just incrementing a counter
while(1) {
i++ ;
// "Dummy" NOP to allow source level single
// stepping of tight while() loop
__asm volatile ("nop");
}
return 0 ;
}
只留主文件,删掉crp相关的3个文件,编译。
有警告,先不管。
bash
C:/nxp/MCUXpressoIDE_25.6.136/ide/plugins/com.nxp.mcuxpresso.tools.win32_25.6.0.202501151204/tools/bin/../lib/gcc/arm-none-eabi/14.2.1/../../../../arm-none-eabi/bin/ld.exe: warning: cannot find entry symbol ResetISR; defaulting to 00000000
有警告,但是编译过了,试试能否单步调试。
不行,单步调试报错。
那重复这个过程,新建一个工程,不删除crp相关的东西。
新建工程必须留的东西
MCU-IDE新建工程, 不选任何库(LpcOpen和CMSIS), 语言标准为11(gun++11, gun11), 不使用CRP.
新建的工程最小化。
c
/*
* Copyright 2022 NXP
* NXP confidential.
* This software is owned or controlled by NXP and may only be used strictly
* in accordance with the applicable license terms. By expressly accepting
* such terms or by downloading, installing, activating and/or otherwise using
* the software, you are agreeing that you have read, and that you agree to
* comply with and are bound by, such license terms. If you do not agree to
* be bound by the applicable license terms, then you may not retain, install,
* activate or otherwise use the software.
*/
// #ifdef __USE_CMSIS
// #include "LPC17xx.h"
// #endif
// #include <cr_section_macros.h>
// TODO: insert other include files here
// TODO: insert other definitions and declarations here
int main(void) {
// TODO: insert code here
// Force the counter to be placed into memory
volatile static int i = 0 ;
// Enter an infinite loop, just incrementing a counter
while(1) {
i++ ;
// "Dummy" NOP to allow source level single
// stepping of tight while() loop
__asm volatile ("nop");
}
return 0 ;
}
必须保留的文件为 cr_startup_lpc175x_6x.cpp,其他2个cr*.cpp排除掉。
编译0错误,0警告,可以单步调试。
将整理好的冰沙工程的mbed和src放进新建正常工程的src目录中。
然后排除test1.cpp, 尝试编译。
编译报错,缺少头文件,补齐头文件包含设置。
C++头设置
bash
"${workspace_loc:/${ProjName}/src}"
"${workspace_loc:/${ProjName}/src/src}"
"${workspace_loc:/${ProjName}/src/src/libs}"
"${workspace_loc:/${ProjName}/src/src/libs/Network}"
"${workspace_loc:/${ProjName}/src/src/libs/Network/Drivers}"
"${workspace_loc:/${ProjName}/src/src/libs/Network/uip}"
"${workspace_loc:/${ProjName}/src/src/libs/Network/uip/dhcpc}"
"${workspace_loc:/${ProjName}/src/src/libs/Network/uip/uip}"
"${workspace_loc:/${ProjName}/src/src/libs/Network/uip/telnetd}"
"${workspace_loc:/${ProjName}/src/src/libs/Network/uip/webserver}"
"${workspace_loc:/${ProjName}/src/src/libs/Network/uip/sftp}"
"${workspace_loc:/${ProjName}/src/src/libs/Network/uip/plan9}"
"${workspace_loc:/${ProjName}/src/src/libs/USBDevice}"
"${workspace_loc:/${ProjName}/src/src/libs/USBDevice/USBDevice}"
"${workspace_loc:/${ProjName}/src/src/libs/USBDevice/USBMSD}"
"${workspace_loc:/${ProjName}/src/src/libs/USBDevice/USBSerial}"
"${workspace_loc:/${ProjName}/src/src/libs/LPC17xx}"
"${workspace_loc:/${ProjName}/src/src/libs/LPC17xx/LPC17xxLib/inc}"
"${workspace_loc:/${ProjName}/src/src/libs/ConfigSources}"
"${workspace_loc:/${ProjName}/src/src/libs/ChaNFS}"
"${workspace_loc:/${ProjName}/src/src/libs/ChaNFS/CHAN_FS}"
"${workspace_loc:/${ProjName}/src/src/modules}"
"${workspace_loc:/${ProjName}/src/src/modules/utils/simpleshell}"
"${workspace_loc:/${ProjName}/src/src/modules/utils/panel}"
"${workspace_loc:/${ProjName}/src/src/modules/utils/panel/screens/3dprinter}"
"${workspace_loc:/${ProjName}/src/src/modules/utils/panel/screens/cnc}"
"${workspace_loc:/${ProjName}/src/src/modules/utils/panel/screens}"
"${workspace_loc:/${ProjName}/src/src/modules/utils/player}"
"${workspace_loc:/${ProjName}/src/src/modules/utils/panel/panels}"
"${workspace_loc:/${ProjName}/src/src/modules/utils/configurator}"
"${workspace_loc:/${ProjName}/src/src/modules/utils/motordrivercontrol}"
"${workspace_loc:/${ProjName}/src/src/modules/tools/laser}"
"${workspace_loc:/${ProjName}/src/src/modules/tools/spindle/SoftSerial}"
"${workspace_loc:/${ProjName}/src/src/modules/tools/spindle/Modbus}"
"${workspace_loc:/${ProjName}/src/src/modules/tools/extruder}"
"${workspace_loc:/${ProjName}/src/src/modules/tools/switch}"
"${workspace_loc:/${ProjName}/src/src/modules/tools/endstops}"
"${workspace_loc:/${ProjName}/src/src/modules/tools/toolmanager}"
"${workspace_loc:/${ProjName}/src/src/modules/tools/temperaturecontrol}"
"${workspace_loc:/${ProjName}/src/src/modules/tools/rotarydeltacalibration}"
"${workspace_loc:/${ProjName}/src/src/modules/tools/filamentdetector}"
"${workspace_loc:/${ProjName}/src/src/modules/robot/arm_solutions}"
"${workspace_loc:/${ProjName}/src/src/modules/communication}"
"${workspace_loc:/${ProjName}/src/src/modules/communication/utils}"
"${workspace_loc:/${ProjName}/src/src/modules/robot}"
"${workspace_loc:/${ProjName}/src/mbed}"
"${workspace_loc:/${ProjName}/src/mbed/src/cpp}"
"${workspace_loc:/${ProjName}/src/mbed/src/capi}"
"${workspace_loc:/${ProjName}/src/mbed/src/vendor/NXP/capi/LPC1768}"
"${workspace_loc:/${ProjName}/src/mbed/src/vendor/NXP/cmsis/LPC1768}"
C头文件路径设置
c
"${workspace_loc:/${ProjName}/src/src/libs/LPC17xx/LPC17xxLib/inc}"
"${workspace_loc:/${ProjName}/src/src/libs/Network}"
"${workspace_loc:/${ProjName}/src/src/libs/Network/Drivers}"
"${workspace_loc:/${ProjName}/src/src/libs/Network/uip}"
"${workspace_loc:/${ProjName}/src/src/libs/Network/uip/uip}"
"${workspace_loc:/${ProjName}/src/src/libs/Network/uip/dhcpc}"
"${workspace_loc:/${ProjName}/src/src/libs/Network/uip/telnetd}"
"${workspace_loc:/${ProjName}/src/src/libs/Network/uip/webserver}"
"${workspace_loc:/${ProjName}/src/src/libs/Network/uip/sftp}"
"${workspace_loc:/${ProjName}/src/src/libs/Network/uip/plan9}"
"${workspace_loc:/${ProjName}/src/src/modules/tools/rotarydeltacalibration}"
"${workspace_loc:/${ProjName}/src/src/modules/tools/filamentdetector}"
"${workspace_loc:/${ProjName}/src/src/modules/utils/motordrivercontrol}"
编译中,有些已经去掉没用的头文件包含就去掉。
bash
// #include <mri.h>
// #incldue "mri.h"
确定是无害警告的地方不用去理会。
bash
D:\my_tmp\nxp_dev\ws\test1\src\mbed\src\vendor\NXP\cmsis\LPC1768/core_cmFunc.h:412:21: warning: ISO C++17 does not allow 'register' storage class specifier [-Wregister]
412 | register uint32_t result;
添加 对stdint.h, string的包含
bash
#include <stdint.h>
#include <string>
如果怀疑工程中有多个同样的错误,可以搜索所有文件中是否包含同样的文本(e.g. "mri.h")
增加断言函数换掉 __debugbreak()
bash
void my__debugbreak()
{
#if defined(__GNUC__) // GCC编译器(MCUXpresso使用)
__asm__ volatile ("bkpt 0");
#else // other
__debugbreak();
#endif
}
改变条件编译让 CHECKSUM执行宏的实现,而不是函数的实现。
bash
#ifdef DEBUG_FLAG_USE_get_checksum
#include <utils.h>
#define CHECKSUM(X) get_checksum(X)
#else /* !DEBUG */
补充宏定义
bash
#define DEFAULT_SERIAL_BAUD_RATE 115200
如果 #include <cstddef>
报错,显势指定c++语言标准为gun++11
如果工作区有多个工程,可以不用"全部构建",而是在指定工程上右击,选择"构建项目"
只有arm C++14中才有cstddef, 语言标准c++用最新的为gun++23. c为gun17.
如果有的.h中包含了cstddef,编译报错。这是.c包含了这个.h, 才报错的。
不要在会被.c包含的头文件中,包含c++的头文件。
等用到这些头文件的.cpp编译报错时,才去添加头文件,这是合适的解决方法。
c
// #include <cstddef> // for size_t
// #include <cstdlib>
// #include <cstdio>
// #include <cstring>1
bash
../src/src/libs/Network/uip/webserver/httpd-fs.c
用到了c++的语法,需要将后缀改为.cpp
c++实现中,不能有c风格的函数。需要改为c++风格的函数,包括函数声明
c
extern "C" void *new_callback_stream(cb_t cb, void *u)
不用的配置实现要去掉
在MCU-IDE中添加预处理宏 TARGET_LPC1768,在c++和c编译器的预处理器中都加入这个预处理宏。
要写入的代码体积超过MCU的代码空间容量
需要将不需要的模块裁剪掉(e.g. webserver)
将network整个拿掉都不行...
裁剪多了也报错
bash
Memory region Used Size Region Size %age Used
MFlash512: 297500 B 512 KB 56.74%
RamLoc32: 5128 B 32 KB 15.65%
RamAHB32: 0 B 32 KB 0.00%
collect2.exe: error: ld returned 1 exit status
make[1]: *** [makefile:82: test1.axf] Error 1
make: *** [makefile:73: all] Error 2
不知道排除了多少模块,终于代码空间能装下了,但是因为缺了一些依赖的封装函数报错。
现在要根据报错信息,将需要的模块加回来。
还没等将缺失的代码加回来,程序空间就过了512K了.
那得好好研究一下命令行编译的冰沙版本,结合win_install.log, 看看makefile到底编译了哪些文件.
代码空间太紧张了。
有没有可能,debug版就不行,而是必须编译成release版呢?但是如果编译成release版才行,那咋能单步调试呢?
备注
这个笔记已经将如何在MCUXpresso IDE v25.6.136中编译冰沙工程是否能编译通过的问题解决了。
下一步,研究要编译的到底是哪些文件,是否可以编译成debug版?