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

▲ 我的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.mzph.cn/news/211132.shtml

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

相关文章

Unity打包到Webgl平台以及遇到的问题

Unity打包到Webgl平台以及遇到的问题 参考网站 Unity打包WebGL的全过程及在打包和使用过程中会遇到的问题(本地测试)-CSDN博客 unity打包到Webgl 并配置能正常运行 这里我用的是Unity2022.3.3f1c1版本 有两种方法 1、配置本地web服务 2、安装vsCode>添加插件LiveServe…

AI仿写软件大全,当然热门的仿写软件

在创作过程中,往往需要大量的灵感和原创性,而AI仿写软件便提供了一种高效、智能的解决方案。本文旨在专心分享AI仿写软件有哪些,并为大家解析哪几款好用的AI仿写软件。 AI仿写的使用 随着互联网的快速发展,内容创作需求不断增长&…

Rellax.js,一款超酷的 JavaScript 滚动效果库

嗨,大家好,欢迎来到猿镇,我是镇长,lee。 又到了和大家见面的时间,今天和大家分享一款轻松实现视差滚动效果的 JavaScript 库——Rellax.js。无需大量的配置,即可为你的网站增色不少。 什么是Rellax.js&am…

奥威亚教学视频应用云平台 VideoCover任意文件上传漏洞复现

0x01 产品简介 广州市奥威亚电子科技有限公司教学视频应用云平台是一个专门为教育机构和个人教师设计的在线学习平台。该平台提供丰富的教学资源和功能,旨在提升教学效果和学习体验。 0x02 漏洞概述 奥威亚教学视频应用云平台 VideoCover.aspx接口处存在任意文件上传漏洞,未…

数字逻辑电路基础-组合逻辑电路之4位先行进位加法器

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 前面介绍4位行波进位全加器(串行加法器)的原理及verilog实现,但是它是一种串行加法器,当位数多时,比如32位的二进制数相加,由于进位逐位从低位向高位传递,这会造成相当大的延迟。对于需要快速加法运算的…

shell基本知识

Linux 系统中 shell 的基本知识 1 什么是 shell Shell 是一种命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序。用户可以用 shell 来启动、挂起、停止甚至是编写一些程序。 2 Linux 启动过程 Linux 系统的启动过程可以概括为…

tomcat篇---第四篇

系列文章目录 文章目录 系列文章目录前言一、为什么我们将tomcat称为Web容器或者Servlet容器 ?二、tomcat是如何处理Http请求流程的?三、tomcat结构目录有哪些?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这…

【深度挖掘Java性能调优】「底层技术原理体系」深入挖掘和分析如何提升服务的性能以及执行效率(性能三大定律)

深入挖掘和分析如何提升服务的性能以及执行效率 前提介绍知识要点 性能概述教你看懂程序的性能案例介绍性能指标性能的参考指标性能瓶颈(木桶原理) 性能分析三大定律Amdahl定律计算公式参数解释案例分析定律总结 Gustafson定律与Amdahl定律相对立Gustafs…

有理函数的积分

1.多项式相除法: 2.分子分母次数带来的解题思路差异: 1.总体目的:降次 2.分子次数高于分母,采用多项式相除 3.分子次数等于分母,分离常数 4.最终形式:分子次数低分母次数高 3.不同形式的计算方法 4.按类拆…

51单片机数码管的使用

IO的使用2–数码管 本文主要涉及51单片机的数码管的使用 文章目录 IO的使用2--数码管一、数码管的定义与类型1.1 数码管的原理图二、 举个栗子2.1 一个数码管的底层函数2.2 调用上面的底层函数显示具体数字 一、数码管的定义与类型 数码管是一种用于数字显示的电子元件&#x…

[强网拟态决赛 2023] Crypto

文章目录 Bad_rsaClasslcal Bad_rsa 题目描述: from Crypto.Util.number import *f open(flag.txt,rb) m bytes_to_long(f.readline().strip())p getPrime(512) q getPrime(512) e getPrime(8) n p*q phi (p-1)*(q-1) d inverse(e,phi) leak d & ((1…

php操作数据库,用wampserver工具

php操作数据库,用wampserver工具 打开wampserver数据库可视化,创建表格,插入数据 DROP TABLE IF EXISTS user; CREATE TABLE IF NOT EXISTS user (user_Id int NOT NULL AUTO_INCREMENT COMMENT 用户编号,user_Name varchar(20) CHARACTER S…

Pandas中的Series(第1讲)

Pandas中的Series(第1讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔…

深入学习锁--Synchronized各种使用方法

一、什么是synchronized 在Java当中synchronized通常是用来标记一个方法或者代码块。在Java当中被synchronized标记的代码或者方法在同一个时刻只能够有一个线程执行被synchronized修饰的方法或者代码块。因此被synchronized修饰的方法或者代码块不会出现数据竞争的情况&#x…

Hazel引擎学习(十二)

我自己维护引擎的github地址在这里,里面加了不少注释,有需要的可以看看 参考视频链接在这里 Scene类重构 参考:《InsideUE4》GamePlay架构(二)Level和World 目前我的Scene类基本只是给entt的封装,提供了…

工业4.0分类:数字化转型的多维度

引言 工业4.0代表着制造业的数字化革命,它将制造过程带入了数字时代。然而,工业4.0并不是一个单一的概念,而是一个多维度的范畴,包括不同的技术、应用领域、企业规模和实施方式。但在这一多维度的概念中,低代码技术正…

如何优雅地使用Mybatis逆向工程生成类

文/朱季谦 1.环境&#xff1a;SpringBoot 2.在pom.xml文件里引入相关依赖&#xff1a; 1 <plugin>2 <groupId>org.mybatis.generator</groupId>3 <artifactId>mybatis-generator-maven-plugin</artifactId>4 <version>1.3.6<…

《三十》模块化打包构建工具 Rollup

19的2小时06分钟 Rollup 是一个 JavaScript 的模块化打包工具&#xff0c;可以帮助编译微小的代码到庞大的复杂的代码中&#xff08;例如一个库或者一个应用程序&#xff09;。 Rollup 和 Webpack 的区别&#xff1a; Rollup 也是一个模块化的打包工具&#xff0c;但是它主要…

排序:非递归的快排

目录 非递归的快排&#xff1a; 代码分析&#xff1a; 代码演示&#xff1a; 非递归的快排&#xff1a; 众所周知&#xff0c;递归变成非递归&#xff0c;而如果还想具有递归的功能&#xff0c;那么递归的那部分则需要变成循环来实现。 而再我们的排序中&#xff0c;我们可…

Azure Machine Learning - 使用 Azure OpenAI 服务生成图像

在浏览器/Python中使用 Azure OpenAI 生成图像&#xff0c;图像生成 API 根据文本提示创建图像。 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#x…