当前位置: 首页 > news >正文

NXP - MDK460的调试设置

文章目录

    • NXP - MDK460的调试设置
    • 概述
    • 概述
    • 实验环境
    • 写测试程序
    • 编译参数设置
      • 调试参数设置
    • 单步调试验证
    • 如果单步调试不好使,如何验证?
    • 备注
    • 备注
    • END

NXP - MDK460的调试设置

概述

在实验使用mbed库的固件,进行单步调试的预研任务。
看了官方文档, 可以知道,调试方式有2种。

  1. 将程序.bin丢到mbed的U盘中,让板载的bootloader程序自动更新程序。reset之后,用串口控制台的调试信息来猜测判断程序的bug. 这种方式对于稍微复杂点的程序调试,不实用。只是理论上可行,且效率低下。
  2. 用MDK来单步调试。官方建议的版本为MDK460.
    这种就是正常调试的方法了,喜欢这种正规的单步调试。

但是,默认安装完的MDK460, 并不能正常单步调试。还需要设置一下才行。

概述

实验环境

硬件为 OM11043(mbed-NXP-LPC1768)
在这里插入图片描述
软件为MDK460和MCUXpresso IDE v25.6.136

写测试程序

就想看看能不能单步调试,啥库都不用带。就写个循环,能编译过就行。
建立工程时,MCU选LPC1768. 选择拷贝启动文件(startup_LPC17xx.s)到工程。
然后添加自己的main.cpp到工程。

// @file main.cpp// uv4_case1.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_lpc17xx.o).extern "C" void SystemInit()
{
}int main()
{volatile int i = 0;do {i++;if (i > 3){i = 1;}
} while (i < 10);return 0; // never happen
}

uv4会自动为工程生成和工程同名的x.sct(分散加载描述文件, Scatter Loading Description File), 并在工程配置中指定此x.sct.
直接编译就能编译过。
在这里插入图片描述
但是如果此时要单步,因为调试参数没设置,还不能正常调试。

编译参数设置

在这里插入图片描述
LPC1768是在建立工程是选的,只是确认一下。
如果后续在LPC1769的板子上实验,也可以在这里改。

在这里插入图片描述
Target不用改,只是看一下。
在这里插入图片描述
output选项卡,勾上调试信息。我将浏览信息也勾上了。
在这里插入图片描述
Listing选项卡我全勾上了,对于程序编译完,查看编译细节有帮助。
Listing选项卡对调试没用,只是看一下。
在这里插入图片描述
User选项卡没动,只是看一下。
在这里插入图片描述
C/C++选项卡没动,确认优化级别为O0. 如果编译后,MCU装不下程序,可以选为O1.
在这里插入图片描述
汇编语言的选项卡完全没动。
在这里插入图片描述
Link选项卡,没有勾选使用默认布局。
对于有点复杂的固件程序,可以修改.sct文件,使变量在内存中的位置可以指定。

调试参数设置

Debug选项卡和Utilities选项卡都和单步调试相关。
在这里插入图片描述
Debug选项卡设置实际硬件板子使用的调试器。
对于OM11043(mbed-NXP-LPC1768), 调试器为板载的LPC-LINK, 调试器固件为CMSIS-DAP.
勾选在开始时载入应用,运行到main()
点开"Settings"继续设置Debug参数。
在这里插入图片描述
在这里插入图片描述
“Flash Download"选项卡,勾选的选项如图。我多勾选了一个"Reset and Run”
Flash定义信息是选好MCU后,uv4写的,不用改。
在这里插入图片描述
工具选项卡,也要选中对应的调试器,否则单步调试失败。
确认勾选,调试前更新固件。
在这里插入图片描述
工具选项卡中,自带的"Flash Download"选项卡和前面的应该是一个,只是确认一下。

单步调试验证

将程序编译通过,0错误,0警告。
在这里插入图片描述
先下好断点,然后开始调试。

在这里插入图片描述
在这里插入图片描述
只要调试开始后,能落在自己下的断点处。再按F10能步过,就说明是能单步调试的。
在这里插入图片描述
MDK4和MDK5的单步调试快捷建不相同。

如果单步调试不好使,如何验证?

开始debug参数没设置好,导致开始调试后,能看到CMSIS-DAP错误的信息一闪而过,然后调试过程就中止了。
板子硬件一样,用MCUXpresso IDE v25.6.136也建立一个同样简单的工程,可以单步调试。
这就说明手头的OM11043(mbed-NXP-LPC1768)的板载调试器是好的,那么只可能是uv4中调试器的参数没设置好引起不能正常调试,这问题范围就缩小了。如果是参数没设置好之类的问题,那么排查起来就简单了。

备注

MDK460的好处: 软件包都是自带的,不用去联网下载软件包。对于比较旧的MCU(e.g. LPC1768, LPC1769)写固件程序很方便。
去uv4安装目录下看了一眼,好像也没啥软件包。
只是uv4新建工程时,能提供正确的启动文件(.s)和正确的.sct.剩下缺的库,可能都要从MCU厂家提供的库中添加过来。
uv4这种套路,很干净。

备注

比较老旧的硬件和编程环境(e.g. mbed2), 在线mbed编辑器已经被ARM官方在2022年就关闭了。
现在还好, ARM官方对于OM11043(mbed-NXP-LPC1768)的文档和例程还在.

现在只能尝试用Mbed Studio和mbed-cli来编译老旧的开源工程(e.g. Smoothieware),来尝试是否有简单的单步调试方法可用。
如果再过20年想研究这个工程,有可能啥也没了。只能用arm-gcc工具链 + 串口通讯(固件中的MRI库独占了一个单独的调试串口)的gdb控制台来调试了。主要是现在有好用的图形化调试,当然不想去用复古的gdb调试。gdb调试只能是说还能用,如果不是刚需(就剩下gdb方式能调试),谁会去用gdb呢?

工程师有时也挺悲催的,吃(研究)shi(老旧的工程)也赶不上热乎的。
如果说能赶上热乎的,可以用mbed在线编辑器将老旧工程导出为uv4的,那就很方便了。

有时老旧的工程,知识点(电机控制)反而看的更清晰,实验条件更完备(手头有实际的openpnp硬件设备, 上位机的控制软件openpnp是开源的,固件工程是开源的,联调一下,能收获很多新东西和细节)。

END

http://www.dtcms.com/a/469525.html

相关文章:

  • 15.UE-游戏逆向-DumpUE struct
  • 百度统计api兰州企业网站排名优化
  • 网站右下角悬浮窗口js代码 兼容各浏览器页面置换算法课程设计
  • NeurIPS 2025 | 华中科大小米等提出语义提示扩散Transformer,实现精准深度估计新范式!
  • Ansible-playbook剧本
  • Mata Summon - Transform text prompts or photos into dynamic.
  • Arbess从入门到实战(11) - 使用Arbess+GitLab实现C++项目自动化部署
  • 做视频网站版权怎么解决企业建站费用情况
  • AICC2025 智算中心与算力服务论坛顺利举办
  • 卷积神经网络CNN(五): 标准CNN神经网络
  • Python 实现 Excel 文件加密与保护
  • 如何查找网站死链网站建设服务费属于
  • 容器编排大王Kubernetes——介绍与部署(1)
  • Python3 中级练习:简易库存管理系统
  • Centos 7/8 安装 Redis
  • 高通平台蓝牙学习--揭秘 WCN Split A2DP(终章)
  • 工业设计网站哪家好包头建设工程安全监督站网站
  • 云原生-k8s
  • 大型手游可以在云手机中流畅运行吗
  • 移动端云手机的优势都有哪些?
  • clk_divide时钟分频模块
  • 手机群控软件如何优化游戏运营的运营策略
  • 目前流行的网站开发设计品牌网站建设意义
  • 使用Mybatis-Plus,以及sqlite的使用
  • 一元一次方程的解
  • 自然语言处理中字节级与令牌级 Transformer 模型的对比分析
  • Android 编译速度优化:JVM堆内存扩充
  • 网站如何减少404跳转网站建设外包工作室
  • vue的hello小案例
  • SDL+WebGpu跨平台加速学习笔记