vscode+gcc+jlink调试mcu程序(用于替代IDE)

这篇具有很好参考价值的文章主要介绍了vscode+gcc+jlink调试mcu程序(用于替代IDE)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

几年前写过一篇类似的文章,那时是用于调试rtthread系统:使用 VSCode、arm-none-eabi-gdb、J-Link GDB Server 调试RTThread。

当时有关vscode和gcc调试MCU的文章很少,所以只是写了个大概。
最近又遇到了类似的问题,网上搜了一些资料,发现此方面的内容已经比较成熟了,借鉴了一些资料来完善自己这方面的知识。

参考资料:
1、GD32F307VC+WIN10+VSCODE+GCC+JLINK环境build。
2、stm32的调试工具:vscode下jlink或stlink下载及调试+设置快捷键

二、Makefile配置

基础Makefile模板使用STM32CubeMX工具生成,为了节约篇幅,只介绍新增的部分。

  • 2.1、使用jlink下载到sram并运行:
    在Makefile中添加以下规则:
$(BUILD_DIR)/jlink_flash_file: $(BUILD_DIR)/$(TARGET).bin
	@-rm -fR $@
	@touch $@
	@echo usb >> $@
	@echo si 0 >> $@
	@echo speed 50000 >> $@
	@echo device $(DEVICE) >> $@
	@echo JTAGConf -1,-1 >> $@
	@echo h >> $@
	@echo rx 1 >> $@
	@echo loadbin $< $(LOADADDR) >> $@
	@echo setpc `od -N4 -t x4 -j4 $(BUILD_DIR)/$(TARGET).bin | head -1 | sed -e 's/0000004//g' -e 's/ //g'| tr -d '\n'` >> $@
	@echo g >> $@
	@echo qc >> $@

jlink: $(BUILD_DIR)/jlink_flash_file
# on gitbash
	"D:\Program Files (x86)\SEGGER\JLink\JLink.exe" -commanderscript $<
# on WSL
#	/mnt/d/'Program Files (x86)'/SEGGER/JLink/JLink.exe -commanderscript $<

其中:

  • jlink_flash_file规则:用于生成JLink.exe使用的配置脚本;

  • DEVICE = CORTEX-M7,MCU使用的是ARM Cortex-M7内核;

  • LOADADDR=0x20000000,程序下载到sram的0x20000000处;

  • setpc ,是jlink的内置命令,用于设置PC指针的值,后边的

    od -N4 -t x4 -j4 $(BUILD_DIR)/$(TARGET).bin | head -1 | sed -e 's/0000004//g' -e 's/ //g'| tr -d '\n'
    

    是通过od命令从bin文件中读取第4-7字节处的程序入口地址。

  • 2.2、使用gdb调试:
    在Makefile中添加以下规则:

JLinkGDBServer:
	"D:\Program Files (x86)\SEGGER\JLink\JLinkGDBServer.exe" -select USB -device CORTEX-M7 -endian little \
	-if JTAG -speed 50000 -noir -LocalhostOnly -nologtofile -port 2331 -SWOPort 2332 -TelnetPort 2333 &

$(BUILD_DIR)/debug.gdb: $(BUILD_DIR)/$(TARGET).bin
	@-rm -fR $@
	@touch $@
	@echo target remote localhost:2331 >> $@
	@echo monitor reset >> $@
	@echo monitor halt >> $@
	@echo load >> $@
	@echo b main >> $@
	@echo c >> $@

debug: $(BUILD_DIR)/debug.gdb JLinkGDBServer
	$(PREFIX)gdb $(BUILD_DIR)/$(TARGET).elf --command=$(BUILD_DIR)/debug.gdb

其中:

  • JLinkGDBServer规则:用于启动JLinkGDBServer.exe;

  • debug.gdb规则:用于生成gdb的配置脚本;

  • 2.3、生成反汇编:
    在Makefile中添加以下规则:

$(BUILD_DIR)/%.dis:$(BUILD_DIR)/%.elf
	@-rm -fR $@
	$(DUMP) --all-headers --demangle --disassemble $< > $@

其中,DUMP=arm-none-eabi-objdump

三、使用方法

前提条件:需要一个jlink仿真器,并安装好jlink工具软件,本人使用的是这个JLink-Windows工具。

  • 3.1、程序下载到sram并运行
    • 1、将jlink插到电脑上
    • 2、使用vscode打开代码,打开终端,使用git_bash,执行:
    make jlink
    
  • 3.2、使用命令行gdb调试程序
    • 1、将jlink插到电脑上
    • 2、使用vscode打开代码,打开终端,使用git_bash,执行:
    make debug
    

四、vscode配置文件launch.json

参考自:使用VSCode编译调试IAR的stm32工程。

对于习惯了使用keil、iar等IDE调试程序的人,可能不习惯上述的命令行gdb调试。此时可以借助于vscode来实现类似于IDE调试的界面,只需配置vscode的launch.json即可。本人实际调试的配置如下:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "stm32f4", //程序名
            "type": "cppdbg",
            "request": "launch",
            "targetArchitecture" : "arm", //arm架构
            "program": "${workspaceFolder}/stm32f4_project/build/stm32f4.elf", //编译生成的elf文件
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\Program Files\\gcc-arm-none-eabi-10.3-2021.10\\bin\\arm-none-eabi-gdb.exe", //gdb的安装路径
            //"miDebuggerServerAddress": "localhost:2331",
            "setupCommands" : [
                {
                    "text" : "target remote localhost:2331" //连接目标设备
                },
                {
                    "text" : "monitor reset" //复位目标设备
                },
                {
                    "text" : "monitor halt" //停止目标设备
                },
                {
                    "text" : "file E:/code/stm32f4_project/build/stm32f4.elf" //编译生成的elf文件
                },
                {
                    "text" : "load" //加载elf文件
                },
                {
                    "text" : "b main" //在main函数打断点
                }
            ],
        }
    ]
}

按上述配置后:文章来源地址https://www.toymoban.com/news/detail-545771.html

  • 1、先在git bash执行下面的命令,打开JLinkGDBServer:
    make JLinkGDBServer
    
  • 2、点击vscode的Run->Start Debugging,即可像IDE一样在vscode中调试代码了。

到了这里,关于vscode+gcc+jlink调试mcu程序(用于替代IDE)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 0505-stm32的调试工具:vscode下jlink或stlink下载及调试+设置快捷键

    目录 1.1-综述 2-vscode实现一键下载stm32 2.1-jlink的下载与擦除的makefile修改 2.2-stlink的下载与擦除的makefile修改  2.3-提升一点效率:使用tasks.json配置用户任务(下拉菜单) 1-tasks.json干啥用的 2-如何创建tasks.json?  3-tasks.json的文件编辑 4-tasks的使用方法  2.4-再提升一点效率:使用

    2024年02月13日
    浏览(52)
  • 在VSCode平台上使用Embedded IDE搭建单片机开发环境

    本文介绍了如何在VSCode平台上通过Embedded IDE插件搭建单片机开发环境,包括软件安装、插件配置、编译器安装和项目构建等步骤。

    2023年04月08日
    浏览(63)
  • 【Jlink烧录自动化】一台电脑连接 多个Jlink 用 J-flash批处理程序烧写多个单片机(生产批量烧录)

    最近一些设备需要进行预生产(小批量生产),虽然是小批量但是数量也是很多,单靠人力烧录设备比较耗费时间 因此需要做一个烧录治具批量烧录。 软件 由于设备的MCU是arm cortex M4内核,使用的是Jlink烧录因此要安装 Segger Jlink 安装之后开J-flash 物料准备 由于要一次烧录多

    2024年01月17日
    浏览(57)
  • VSCode配置C/C++环境,编辑(VSCode)+ 编译(MinGW->GCC)+ 调试(MinGW->GBD)

      直接去官网下载并安装即可:https://code.visualstudio.com/。注意:VSCode只是编辑器,可以看代码,编辑代码,但不能编译代码。   如果说VSCode可以实现代码编辑,MinGW则可以实现代码编译和调试,其中编译功能是通过MinGW中的GCC实现的(生成一个.exe文件),调试功能则是通

    2024年02月07日
    浏览(48)
  • 【单片机学习笔记】Windows+Vscode+STM32F4+freeRTOS+FatFs gcc环境搭建

    为摒弃在接受keil邮件,研究了下gun编译,以STM32F407为例,简单记录 Git 选择对应版本直接安装即可https://git-scm.com/download/win make gcc ​ 1)将上述软件包放置于C盘根目录 2)添加环境变量 3)cmd命令行测试环境 分别输入 启动文件及LD文件 目录路径表示问题 字节对齐及指定位置存

    2024年02月07日
    浏览(57)
  • Vscode搭建开发调试STM32/RISC-V环境IDE(最全面)

    单片机开发IDE环境如KeilMDK,虽然操作简单 ,方便调试。但就是代码编辑风格很老套,中文符号乱码还是常有的事。而如今流行的vscode编辑器很不错,免费且相当轻量级,用来代码开发体验很不错,看着都舒服。Clion IDE体验更好,但就是它不免费且体积较大。Stm32cubeIDE生成工

    2024年02月16日
    浏览(69)
  • 【Linux】使用gcc调试程序

    🥇🥇【Liunx学习记录篇】-持续更新中~🥇🥇 篇一:【Linux】VMware安装unbuntu18.04虚拟机-超详细步骤(附镜像文件) 篇二:【Linux】ubuntu18.04系统基础配置及操作 篇三:【Linux】用户与组的操作详细介绍 篇四:【Linux】管理Linux文件权限属性介绍 篇五:【Linux】使用数字表示法和

    2024年02月05日
    浏览(23)
  • 使用gcc 工具链开发单片机程序,怎么查看内存映像

    一、概述 1.1 功能 1.2 命令格式 1.3 支持的目标文件 二、基本应用示例 2.1 查看单个对象文件 2.2 查看整个工程的内存映像 三、命令选项描述 3.1 以不同的进制格式显示内存映像 示例:以十六进制格式显示 3.2 不同的输出方式 3.2.1 可选的表示方式与对应的选项 3.2.2 -A (–format=

    2024年01月19日
    浏览(52)
  • STM32CubeMX+Eclipse+gcc+Jlink 实现STM32开发环境搭建

    本节记录通过STM32CubeMX+Eclipse+gcc+Jlink 进行STM32环境搭建的过程; 参考: https://blog.csdn.net/qq_35787848/article/details/124395509 https://blog.csdn.net/cyf1294311560/article/details/127115730 1、我这边已经装好了STM32CubeMX、Eclipse、ARM gcc环境、JLINK等;如果你没有安装,请进行安装; 2、我这边已经安装

    2024年02月16日
    浏览(42)
  • 第1章_瑞萨MCU零基础入门系列教程之单片机程序的设计模式

    本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id=728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总 : https://blog.csdn.net/qq_35181236/article/details/132779862 本章目标 理解裸机程序设

    2024年02月09日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包