【win10用vim开发stm32】二、vimspector的单片机调试

news2024/11/17 12:38:20

▲ 我的vim配置仓库: gitee,vim相关优先在gitee更新,博客vim专栏作为部分补充和使用说明
▲ 本文提供vimspector调试的一个示例,和keil的调试功能比当然还是有很大差距,不过简单的调试功能如单步、复位、运行这些都跑通了,编译,下载也可以,vim终于还是成为了IDE。。。
▲ linux上软件兼容性和配置要比windows好很多
▲ 其他废话(与本文无关,可以不看):想用neovim的,但windows下nvim-treesitter一旦安装c的语法高亮就会崩溃,连checkhealth都运行不了,还有些其他显示问题不清楚怎么解决,在不同电脑上尝试过很多次都是这样,无奈下又换回了gvim,还挺喜欢Astro Nvim这个配置的,有清楚为什么的小伙伴可以留言或私信。让子弹飞吧。。。。

文章目录

  • 一、环境和依赖项
  • 二、vimspector配置
  • 演示
  • 其他问题
    • vscode调试配置

一、环境和依赖项

  • gvim9.0+,一些依赖和安装可以参考我的仓库说明
  • vimspector,在vim内安装调试器
    :VimspectorInstall -enable-c
    
  • 字体,推荐我仓库里面的hack字体,测试所有图标终端下都显示正常,并不是所有nerd font字体都能正常显示大多图标集。。
  • openocd,在使用vim调试前需要在终端打开一个硬件调试器连接,这里使用stlink,当然其他的如jlink/dap等都是支持的,具体使用也有不少内容,可以参考openocd文档。这里贴上一条命令参考(直接把配置文件拷到工程目录下了):
    openocd -f stlink.cfg -c 'transport select hla_swd' -f stm32f1x.cfg
    
  • arm-none-eabi-gcc,编译调试工具集
  • makefile 工程,我使用stm32,makefile用cubeMX生成还是挺方便的。
  • 其他
    • openocd也是可以替换的,如stlink的st-util,和jlink的gdbserver,不过这样一些配置指令也要再适配

二、vimspector配置

  • 在根目录创建.vimspector.json文件,内容如下,根据自己需要调整:
{
    "configurations": {
        "Launch STM32": {
            "adapter": "vscode-cpptools",
            "configuration": {
				"type": "cppdbg",
                "request": "launch",
                "program": "${workspaceRoot}/build/f103.elf",
                "cwd": "${workspaceRoot}",
                "targetArchitecture":"arm",
                "MImode": "gdb",
				"stopOnEntry": true,
				"stopAtConnect":true,
                "MIDebuggerPath": "C:\\GreenSoft\\gcc-arm-none-eabi-10.3-2021.10\\bin\\arm-none-eabi-gdb.exe",
                "setupCommands":[
                    { 
						"description":"connect",
						"text": "target extended-remote :3333" 
					},
                    { 
						"description":"reset halt 0x08000000",
						"text": "monitor reset"
					},
                    { 
						"description":"init",
						"text": "monitor reset init"
					}
                ],
 				"launchCompleteCommand": "exec-run",
                "breakpointers": {
                    "exception": {
                        "cpp_throw": "Y",
                        "cpp_catch": "N"
                    }
                }
            }
        },
        "Launch STM32 with loading elf": {
            "adapter": "vscode-cpptools",
            "configuration": {
				"type": "cppdbg",
                "request": "launch",
                "program": "${workspaceRoot}/build/f103.elf",
                "cwd": "${workspaceRoot}",
                "targetArchitecture":"arm",
                "MImode": "gdb",
				"stopOnEntry": true,
				"stopAtConnect":true,
                "MIDebuggerPath": "C:\\GreenSoft\\gcc-arm-none-eabi-10.3-2021.10\\bin\\arm-none-eabi-gdb.exe",
                "setupCommands":[
                    { 
						"description":"connect",
						"text": "target extended-remote :3333" 
					},
                    { 
						"description":"reset halt 0x08000000",
						"text": "monitor reset"
					},
                    { 
						"description":"halt",
						"text": "monitor halt"
					},
                    { 
						"description":"load elf",
						"text": "monitor program ./build/f103.elf"
					},
                    { 
						"description":"reset",
						"text": "monitor reset init"
					}
                ],
 				"launchCompleteCommand": "exec-run",
                "breakpointers": {
                    "exception": {
                        "cpp_throw": "Y",
                        "cpp_catch": "N"
                    }
                }
            }
        }
    }
}

vimspector提供了两套快捷键,使用自己喜欢的即可

let g:vimspector_enable_mappings = 'VISUAL_STUDIO'
"let g:vimspector_enable_mappings = 'HUMAN'

enjoy~~

演示

  • 终端打开openocd调试端口,支持多终端的插件,这里使用powershell:
    在这里插入图片描述

  • 编译
    在这里插入图片描述

  • F5进入调试,选择配置,这里配置了1:直接调试,2:下载并调试。控制和下载命令参考openocd文档即可(setupCommands参数列表),出现异常可以尝试重开。。
    在这里插入图片描述

  • 首次进入的提示直接确认即可,是否都不影响,注意每次编译完需要重新上传elf文件
    在这里插入图片描述

  • 熟悉的调试界面,其实是支持鼠标操作的,下面也保留有命令行:
    在这里插入图片描述

  • 断点,并且停止时鼠标悬停会指示其值(断点时灵时不灵,暂不清楚原因。。):
    在这里插入图片描述

  • 代码提示补全
    在这里插入图片描述

  • 语法错误提示
    在这里插入图片描述

  • 符号导航
    在这里插入图片描述

其他问题

  • clangd警告消除:
    • 提示硬件架构不支持FPU,在CFLAGS中加入编译指令CFLAGS += -mfloat-abi=soft(没有强迫症可不理会), 示例:
      在这里插入图片描述
  • 优化等级调整,CFLAGS中配置,示例:
    在这里插入图片描述

vscode调试配置

  • 一个vscode调试配置,c/c++插件其实可以和vim共用compile_commands.json文件,必要配置只有这个,对比起来确实更简单。。。
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Cortex Debug",
            "cwd": "${workspaceFolder}",
            "executable": "./build/f103.elf",
            "request": "launch",
            "type": "cortex-debug",
            "runToEntryPoint": "main",
            "servertype": "openocd",
            "configFiles": [
                //"./stlink.cfg",
                "${env:openocdhome}/scripts/interface/stlink.cfg",
                "${env:openocdhome}/scripts/target/stm32f1x.cfg"
            ]
        }
    ]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1298982.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 分享小结

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、微信 分享 三、 QQ 、QQ空间(Qz…

vscode 编译运行c++ 记录

一、打开文件夹,新建或打开一个cpp文件 二、ctrl shift p 进入 c/c配置 进行 IntelliSense 配置。主要是选择编译器、 c标准, 设置头文件路径等,配置好后会生成 c_cpp_properties.json; 二、编译运行: 1、选中ma…

4.8 构建onnx结构模型-Less

前言 构建onnx方式通常有两种: 1、通过代码转换成onnx结构,比如pytorch —> onnx 2、通过onnx 自定义结点,图,生成onnx结构 本文主要是简单学习和使用两种不同onnx结构, 下面以 Less 结点进行分析 方式 方法一&a…

Android 相机库CameraView源码解析 (五) : 保存滤镜效果

1. 前言 这段时间,在使用 natario1/CameraView 来实现带滤镜的预览、拍照、录像功能。 由于CameraView封装的比较到位,在项目前期,的确为我们节省了不少时间。 但随着项目持续深入,对于CameraView的使用进入深水区,逐…

QT之常用按钮组件

QT之常用按钮组件 导入图标 布局 显示选中 实验结果 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }void Widget::on_push…

‘ChatGLMTokenizer‘ object has no attribute ‘tokenizer‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

六要素金属气象仪-科普小百科

随着科技的发展,气象监测设备也日新月异。今天,我们将为你介绍一款全新的六要素金属气象仪,它能够实时监测环境温度、相对湿度、风速、风向、大气压力、压电雨量等关键气象参数,为你的生活和工作保驾护航。 一、产品简介 WX-Y6S…

浪潮信息:数字化转型的策略与实践

在数字化浪潮的推动下,浪潮信息正致力于将计算创新推向新的高度。作为科技发展的排头兵,浪潮信息深知算力的重要性,因此不断探索前所未有的解决方案。在这个过程中,浪潮信息的研发人员和科技工作者如同探险家,勇敢地迎…

ky10 server x86 设置网卡开机自启

输入命令查看网卡名称 ip a 输入命令编辑网卡信息 vi /etc/sysconfig/network-scripts/*33改成yes 按ESC键,输入:wq,保存

m6A RNA甲基化MeRIP-seq测序分析实验全流程解析

甲基化RNA免疫共沉淀(MeRIP-seq/m6A-seq)实验怎么做,从技术原理、建库测序流程、信息分析流程和研究套路等四方面详细介绍。 一、甲基化RNA免疫共沉淀(MeRIP-seq/m6A-seq)测序技术原理 表观转录组指RNA序列不发生改变的情况下,由RNA上的化学修饰调节基因…

Autosar UDS-CAN诊断开发02-1(CAN诊断帧格式类型详解、CANFD诊断帧格式类型详解、15765-2(CANTP层)的意义)

目录 前言 CANTP层(15765-2协议)存在的意义 CANTP层(15765-2协议)帧类型详细解读(普通CAN格式) 四种诊断报文类型 单帧SingleFrame(SF) 首帧:FirstFrame(FF) 流控帧:FlowCont…

【LabVIEW学习】5.数据通信之TCP协议,控制电脑的一种方式

一。tcp连接以及写数据(登录) 数据通信--》协议--》TCP 1.tcp连接 创建while循环,中间加入事件结构,创建tcp连接,写入IP地址与端口号 2.写入tcp数据 登录服务器除了要知道IP地址以及端口以外,需要用户名与密…

【Deeplearning4j】小小的了解下深度学习

文章目录 1. 起因2. Deeplearning4j是什么3. 相关基本概念4. Maven依赖5. 跑起来了,小例子!6. 鸢尾花分类代码 7. 波士顿房价 回归预测代码 8. 参考资料 1. 起因 其实一直对这些什么深度学习,神经网络很感兴趣,之前也尝试过可能因…

栈和队列的互相实现

用队列实现栈 OJ链接 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。int pop() 移除并返…

Transformer 简介

Transformer 是 Google 在 2017 年底发表的论文 Attention Is All You Need 中所提出的 seq2seq 模型。Transformer 模型的核心是 Self-Attention 机制,能够处理输入序列中的每个元素,并能计算其与序列中其他元素的交互关系的方法,从而能够更…

【Linux】make/Makefile --- 自动化构建项目的工具

目录 一、make/Makefile的简单使用 二、Makefile 的语法规则 三、实现的原理 3.1 make/Makefile识别文件新旧 3.2 .PHONY修饰的伪目标总是被执行 3.3 make/Makefile是具有依赖性的推导能力的 四、语法技巧 五、注意事项 Linux中自动化构建项目最简单的方式:…

shiro Filter加载和执行 源码解析

一、背景 在使用若依框架(前后端不分离包含shiro安全框架)时,发现作者添加了验证码、登录帐号控制等自定义过滤器,于是对自定的过滤器加载和执行流程产生疑问。下面以验证码过滤器为例,对源码解析。注意类之间的继承关…

Kubernetes入门笔记 ——(3)理解pod对象

为什么需要pod 最为熟知的一句话:pod是k8s的最小调度单位。刚开始听到这句话时会想,已经有容器了,k8s为什么还要搞个pod出来?容器和pod是什么关系?容器的本质是进程,而k8s本质上类似操作系统。 熟悉Linux的…

导入PR的视频画面是黑屏的怎么办?

在现代视频编辑领域中,越来越多的人使用Adobe Premiere Pro来编辑和制作视频,但是在某些情况下,用户可能需要透明背景的视频进行创作,那么如何创作透明背景的视频呢? 要制作具有透明背景的视频,我们需要使…

科技改变旅游,道观漫游可视化:智能化管理助力道观游览

道观漫游可视化是一种通过技术手段实现道观游览的可视化展示方式,让游客能够更加直观地了解道观的历史、文化和建筑特色。 随着旅游业的不断发展,道观漫游可视化已经成为了旅游行业中的一个重要方向,吸引了越来越多的游客前来体验。 道观漫游…