NXP - 在MCUXpresso IDE中编译调试Smoothieware固件工程 - 思路

文章目录

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版?

END

相关推荐
weifengdq17 天前
SJA1124 SPI转4路LIN STM32 测试笔记
stm32·spi·nxp·lin·sja1124·spi4lin
皮皮哎哟23 天前
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
LostSpeed7 个月前
NXP - 用MDK建立基于arm-none-eabi工具链的工程框架
nxp·mdk·arm-none-eabi
深圳市尚想信息技术有限公司7 个月前
NXP恩智浦 TEA6856AHN/V205K 车载射频接收芯片 赋能多元车载信息娱乐系统
nxp·导航·车载·恩智浦·电子元器件·射频接收器·接收芯片
LostSpeed7 个月前
NXP - 用MCUXpresso IDE v25.6.136的工具链编译Smoothieware固件工程
nxp
LostSpeed7 个月前
NXP - 在MCUXpresso IDE中查看编译日志文件的方法
nxp