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

相关推荐
LostSpeed2 天前
NXP - 安装后的MCUXpresso IDE里面有所有的支持包,不用另外去下载
nxp
飞凌嵌入式3 个月前
基于RK3588,飞凌教育品牌推出嵌入式人工智能实验箱EDU-AIoT ELF 2
linux·人工智能·嵌入式硬件·arm·nxp
深圳米客方德半导体有限公司3 个月前
NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
嵌入式硬件·汽车·nxp·sd nand·t-box
toradexsh4 个月前
HDMI 显示器热插拔对应显示应用启停测试
arm·nxp·hdmi·imx8qm·hotplug
toradexsh4 个月前
NXP iMX8MP ARM 平台多屏幕克隆显示测试
linux·arm·nxp·toradex·imx8mp
toradexsh7 个月前
ARM 处理器平台 eMMC Flash 存储磨损测试示例
linux·arm·nxp·toradex·emmc
张一西8 个月前
ARM学习(42)CortexM3/M4 MPU配置
stm32·arm·mpu·nxp·arm架构·cortexm3·cortexm4
码思途远9 个月前
NXP i.MX8系列平台开发讲解 - 5.3 调试篇(二) - 掌握Dynamic debug调试
linux·nxp·i.mx8·i.mx8m
夏沫の浅雨10 个月前
imx-6ULL uboot 移植
linux·uboot·nxp·6ull