VSCode 加Cortex-Debug嵌入式调试方法
简介
当使用ARM Cortex-M微控制器时,Cortex-Debug是一个Visual Studio Code的扩展,以简化调试过程。本文档介绍了如何编写启动配置(launch.json)。
settings.json配置
- 打开VSCode用户设置文件settings.json: 文件→偏好→设置
- 选择用户设置:
在搜索栏中输入" json "(带或不带双引号)。在设置中找到“编辑”链接。然后点击它。这将打开~/.config/Code/User/settings.json文件 - 将以下行添加到settings.json文件,在大括号{}之间:
{"cortex-debug.openocdPath": "/usr/bin/openocd","cortex-debug.armToolchainPath.linux": "/opt/toolchains/gcc-arm- none-eabi-10.3-2021.10/bin","cortex-debug.armToolchainPath.windows": "C:\\ProgramData\\chocolatey\\bin","cortex-debug.gdbPath.linux": "/opt/toolchains/gcc-arm-none-eabi-10.3-2021.10/bin//arm-none-eabi-gdb","cortex-debug.gdbPath.windows": "C:\\ProgramData\\chocolatey\\bin\\arm-none-eabi-gdb.exe"
}
请注意:您系统上的路径可能不同。确保该路径与文件的实际位置匹配。
- 保存文件settings.json
launch.json配置
要在VS Code中运行或调试一个简单的应用程序,我们可以在debug start视图中选择run and debug,或者我们可以按F5, VS Code将尝试运行当前活动的文件。
创建启动配置文件是有益的,因为它允许我们配置和保存调试设置的详细信息。VSCode会在启动时调试配置信息。位于工作空间(项目根文件夹)中的.vscode文件夹中的Json文件。
launch.json文件用于在Visual Studio Code中配置调试器。
参数
以下是launch.json中的参数列表。为特定的设备和环境配置它们。
cwd:项目路径
configFiles:要加载的OpenOCD配置文件
device:目标设备标识符
接口:用于连接的调试接口类型(默认为SWD) -用于J-Link和BMP探针。
name:配置名称;显示在启动配置下拉菜单中。
preLaunchTask:在调试会话开始之前运行的任务。指定在tasks.json中定义的任务。
request:配置请求类型。可以是“发射”或“附加”。
runToEntryPoint:如果启用,调试器将运行,直到主函数开始。
serialNumber: J-Link专用参数。J-Link序列号-仅当多个J-Link连接到计算机时需要
servertype: GDB服务器类型—支持jlink、openocd、pyocd、pe、stutil
svdFile:描述微控制器外设的SVD文件的路径;如果没有提供,那么可以根据输入的“设备”选择一个。这可能会根据“设备”自动加载。
swoConfig: SWO/ITM配置。
enabled:开启SWO解码。
cpuFrequency: CPU的目标频率,单位为Hz。
swoffrequency: SWO频率,单位为Hz。
source:SWO数据来源。可以是“探针”直接从调试探针获得,也可以是串行端口设备使用调试探针外部的串行端口。
decoders:SWO解码器配置
label:输出窗口的标签。
port: ITM端口号
- 打开VSCode启动配置文件launch. json: Run→Add Configuration…
- 复制以下代码
{"version": "0.2.0","configurations": [{"name": "Debug (OpenOCD)","cwd": "${workspaceRoot}","executable": "${workspaceRoot}/build/blinky.elf","request": "launch","type": "cortex-debug","servertype": "openocd","interface": "swd","device": "TM4C123GH6PM","runToEntryPoint": "main","svdFile": "${workspaceRoot}/svd/TM4C123GH6PM.svd","configFiles": ["board/ek-tm4c123gxl.cfg"],"preLaunchCommands": ["set mem inaccessible-by-default off","monitor reset"],"postLaunchCommands": ["monitor reset init","monitor sleep 200"]}]
}
- 修改“executable”、“svdFile”和“device”参数并保存
- svdFile: launch. json中的“svdFile”条目。在Json文件是可选的,但对嵌入式系统调试至关重要,因为它描述了设备的外设寄存器。
例1: Discovery Board / OpenOCD
这是开发板的配置。这基本上是cortex-m-quickstart的默认设置。
launch. json
{"version": "0.2.0","configurations": [{"type": "cortex-debug","request": "launch","name": "Debug (OpenOCD)","servertype": "openocd","cwd": "${workspaceRoot}","preLaunchTask": "cargo build","runToMain": true,"executable": "./target/thumbv7em-none-eabihf/debug/project-name","device": "STM32F303VCT6","configFiles": ["interface/stlink-v2-1.cfg","target/stm32f3x.cfg"],"svdFile": "${workspaceRoot}/.vscode/STM32F303.svd","swoConfig": {"enabled": true,"cpuFrequency": 8000000,"swoFrequency": 2000000,"source": "probe","decoders": [{ "type": "console", "label": "ITM", "port": 0 }]}}]
}
例2:Nucleo-F429ZI Board / J-Link
将Nucleo-F429的STLink固件升级为JLink。因此,对于我的核与J-Link固件,我更改设置“servertype”为“jlink”和“interface”为“swd”。
{"version": "0.2.0","configurations": [{"type": "cortex-debug","request": "launch","name": "Debug (J-Link)","cwd": "${workspaceRoot}","executable": "./target/thumbv7em-none-eabihf/debug/project-name","servertype": "jlink","device": "STM32F429ZI","interface": "swd","serialNumber": "","preLaunchTask": "cargo build","runToMain": true,"svdFile": "${workspaceRoot}/.vscode/STM32F429.svd","swoConfig": {"enabled": true,"cpuFrequency": 8000000,"swoFrequency": 2000000,"source": "probe","decoders": [{ "type": "console", "label": "ITM", "port": 0 }]}},]
}
结合Makefile设置调试方法
添加构建(编译、链接等)任务(tasks.json)
ctrl+shift+p打开命令行,输入Tasks: Run task==》 Create tasks.json file from template, 生成默认的tasks.json文件。
{// See https://go.microsoft.com/fwlink/?LinkId=733558// for the documentation about the tasks.json format"version": "2.0.0","tasks": [{"label": "echo","type": "shell","command": "echo Hello"}]
}
工程采用makefile编译则,改为
{"version": "2.0.0","tasks": [{"label": "make all","type": "shell","command": "make all","group": {"kind": "build","isDefault": true},"problemMatcher": "$gcc"}]
}
或者
{"version": "2.0.0","tasks": [{"type": "shell","label": "build","command": "cd C:/project/debug; make","args": [], }]
}
配置c_cpp_properties.json
{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**","${workspaceFolder}\\libs\\nnom\\inc","${workspaceFolder}\\libs\\nnom\\inc\\layers"],"defines": ["_DEBUG","UNICODE","_UNICODE"],"compilerPath": "D:\\soft\\Qt5.6.2\\Tools\\mingw492_32\\bin\\gcc.exe","cStandard": "c99","cppStandard": "c++14","intelliSenseMode": "windows-gcc-x86"}],"version": 4
}
相关文章:
VSCode 加Cortex-Debug嵌入式调试方法
简介 当使用ARM Cortex-M微控制器时,Cortex-Debug是一个Visual Studio Code的扩展,以简化调试过程。本文档介绍了如何编写启动配置(launch.json)。 settings.json配置 打开VSCode用户设置文件settings.json: 文件→偏好→设置选择用户设置: 在搜索栏中…...

etcd-workbench一款免费好用的ETCD客户端,支持SSHTunnel、版本对比等功能
介绍 今天推荐一款完全免费的ETCD客户端,可以私有化部署: etcd-workbench 开源地址:https://github.com/tzfun/etcd-workbench Gitee地址:https://gitee.com/tzfun/etcd-workbench 下载 本地运行 从 官方Release 下载最新版的 jar 包&am…...

华为ipv6配置之ospf案例
R1 ipv6 ospfv3 1 router-id 1.1.1.1 //必须要手动配置ospf id,它不会自动生成 interface GigabitEthernet0/0/0 ipv6 enable ipv6 address 2000::2/96 ospfv3 1 area 0.0.0.0 interface LoopBack0 ipv6 enable ipv6 address 2001::1/96 ospfv3 1 area 0.0.0.0 R2…...
Design patterns--装饰模式
设计模式之装饰模式 使用装饰模式来封装Nmea0183语句。 代码 #ifndef DATAPARSER_H #define DATAPARSER_H#include <string> #include <vector>class DataParser { public:DataParser();virtual std::string fieldAnalysis(std::vector<std::string> vecSt…...

卷积神经网络 反向传播
误差的计算 softmax 经过softmax处理后所有输出节点概率和为1 损失(激活函数) 多分类问题:输出只可能归于某一个类别,不可能同时归于多个类别。 误差的反向传播 求w的误差梯度 权值的更新...
java面试题20
Java中的类加载机制可继续通过自定义类加载器来实现热部署、插件化和动态加载等功能,使得应用程序能够在运行时加载未知的类和资源。 什么是Java中的多线程(Multithreading)?它有什么作用? 答案:多线程是一…...
【Java面试题】redis的过期策略有哪些
redis通过设置过期时间来控制键值对的存活时长,过期时间可以通过expire , pexpire expireat , pexpireat 等命令设置,String 类型数据可以通过setex命令设置过期时间。 以下介绍三种redis的过期策略: 1. 定时删除 在设置键值对的过期时…...
for参数 命令语句 变量
for 参数f skip命令语句 命令说明: 跳过文本内容(行):skip 例子: for /f "skip1" %%i in(2.txt) do echo %%i for 参数f eol命令语句 命令说明: 怱略指定字符的文本内容(文本首部…...
CentOS 8的新特性
CentOS 8在2019年发布,带来了比CentOS 7更多的新特性和改进。以下是一些主要的变化和优化: 软件包更新:CentOS 8提供了更新的软件包和程序,包括但不限于Python 3、MySQL 8、PHP 7.2、Ruby 2.5、PostgreSQL 10等。 应用流…...

vue2、vue3状态管理之vuex、pinia
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、状态管理之vuex1.1 State调用:1.2 Mutation在vuex中定义:在组件中使用: 1.3 Action在vuex中定义:将上面的减…...

axios进行图片上传组件封装
文章目录 前言图片上传接口(axios通信)图片上传使用upload上传头像效果展示总结 前言 node项目使用 axios 库进行简单文件上传的模块封装。 图片上传接口(axios通信) 新建upload.js文件,定义一个函数,该函数接受一个上传路径和一…...
2312llvm,用匹配器构建clang工具
原文 用LibTooling和LibASTMatchers构建工具 这里展示如何基于Clang的LibTooling构建有用的源到源翻译工具.基础 步骤0:取Clang 因为Clang是LLVM项目的一部分,因此你需要先下载LLVM的源码.Clang和LLVM都在同一个git仓库中,在不同的目录下.更多见入门指南. cd ~/clang-llvm…...

12.26ARM作业
三个按键中断,控制对应灯亮灭 main.c #include "key_it.h"void delay(int ms){int i,j;for(i0;i<ms;i){for(j0;j<2000;j);}}int main(){all_led_init();key1_it_config();key2_it_config();key3_it_config();while(1){printf("do main...\n&…...
Objectiv-C设计模式笔记
文章目录 通用知识点对象创建原型模式定义适用场景示例 工厂方法定义适用场景示例 抽象工厂定义适用场景示例 生成器模式定义适用场景示例 单例模式定义适用场景示例 接口适配适配器定义适用场景示例 桥接定义适用场景示例 外观模式定义适用场景示例 对象去耦中介者定义适用场景…...

AI安全综述
1、引言 AI安全这个话题,通常会引伸出来图像识别领域的对抗样本攻击。下面这张把“熊猫”变“猴子”的攻击样例应该都不陌生,包括很多照片/视频过人脸的演示也很多。 对抗样本的研究领域已经具备了一定的成熟性,有一系列的理论来论述对抗样本…...

计算机网络概述(下)——“计算机网络”
各位CSDN的uu们你们好呀,今天继续计算机网络概述的学习,下面,让我们一起进入计算机网络概述的世界吧!!! 计算机网络体系结构 数据传输流程 计算机网络性能指标 计算机网络体系结构 两个计算机系统必须高度…...
anaconda创建环境时安装默认的第三方库
感谢阅读 写作原因首先要有python解释器加入每次创建环境都需要的python库查看所有的默认安装库还原方法 写作原因 近期由于多个项目在多头并举,出现了每次安装环境都要重新打一遍指令的麻烦问题,出于节约时间从而提高工作效率的目的。我尝试了很多方法…...

STM32 cubeMX 光敏电阻AD转化实验
文章代码使用 HAL 库。 文章目录 前言一、光敏电阻介绍二、光敏电阻原理图解析三、ADC采样介绍1. 工作原理:2. ADC精度: 四、STM32 cubeMX配置ADC采样五、代码编写总结 前言 实验开发板:STM32F051K8。所需软件:keil5 ,…...
AutoSAR(基础入门篇)3.2-Autosar中RTE的Ports【S/R】与【C/S】
目录 一、RTE的Ports【S/R】 1、特征 1.1、扮演SWCs和BSW的交流途径 1.2、其他特征...

安装kafka
静态文件安装(单机) 解压到指定目录(解压到 /usr) tar -zxf kafka_2.11-2.2.0.tgz -C /usr/ 到指定的解压目录下 cd /usr/kafka_2.11-2.2.0/ 配置主机名 查看是否配置了HOSTNAME vim /etc/sysconfig/network 没有就新增 HOSTNA…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...

基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...