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…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
