HPM6750系列--第四篇 搭建Visual Studio Code开发调试环境

news2024/11/15 5:55:50

一、目的

        在之前的博客《HPM6750系列--第二篇 搭建Ubuntu开发环境》、《HPM6750系列--第三篇 搭建MACOS编译和调试环境》我们介绍了基于命令行的编译调试过程,整个过程稍微有些繁琐可能有些小伙伴不太习惯,那么本篇就介绍一下在Visual Studio Code下的开发调试过程。

        注意:针对自己使用的操作系统先自己阅读一下之前的命令行搭建方式,本篇所有的操作都是在之前的基础之上完成的。

         

 

 

二、准备

        1、安装Visual Studio Code

        Visual Studio Code - Code Editing. RedefinedVisual Studio Code is a code editor redefined and optimized for building and debugging modern web and cloud applications.  Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows.https://code.visualstudio.com

        2、安装cmake-tool、Cortex-Debug插件 

        

三、实战

        1、设置环境变量并保存到~/.bash_profile

export GNURISCV_TOOLCHAIN_PATH="/Users/coder/workspace/third/hpm/toolchain/riscv32-unknown-elf-newlib-multilib"
export HPM_SDK_TOOLCHAIN_VARIANT=
export HPM_SDK_BASE="/Users/coder/workspace/third/hpm/hpm_Sdk"
export OPENOCD_SCRIPTS="/Users/coder/workspace/third/hpm/hpm_Sdk/boards/openocd"
export HPM_OPENOCD_PATH="/Users/coder/workspace/third/hpm/riscv-openocd"

        其中HPM_OPENOCD_PATH是我们自己编译的OPENOCD程序的路径;OPENOCD_SCRIPTS是使用OPENOCD时要使用的配置文件路径。

        2、创建工程

        打开一个terminal输入

mkdir -p ~/workspace/work/hpm
cp -r ~/workspace/third/hpm/hpm_Sdk/samples/hello_world  ~/workspace/work/hpm/
cd ~/workspace/work/hpm/hello_world/

        3、配置vscode

mkdir .vscode

        在目录下放置一下两个文件

        settings.json

{
    "cmake.buildBeforeRun": true,
    "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools",
    "cortex-debug.openocdPath": "${env:HPM_OPENOCD_PATH}/src/openocd",
    "cortex-debug.variableUseNaturalFormat": false,
    "cmake.configureSettings": {
        "BOARD":"hpm6750evkmini"
    },
    "cmake.defaultVariants": {
        "buildType": {
            "choices": {
                "flash_xip": {
                    "short": "flash_xip",
                    "long": "hpm flash xip",
                    "buildType": "flash_xip"
                }
            }
        }
    }
}

        其中"cortex-debug.openocdPath"是设置为我们openocd的路径;"cmake.defaultVariants"设置新增构建类型为flash_xip

        launch.json(hpm6750evkmini板载ft2232调试器

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "HPM Debug",
            "cwd": "${workspaceRoot}",
            "executable": "${command:cmake.launchTargetPath}",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "openocd",
            "gdbPath" : "${env:GNURISCV_TOOLCHAIN_PATH}/bin/riscv32-unknown-elf-gdb",
            "searchDir": ["${env:OPENOCD_SCRIPTS}"],
            "device": "HPM6750",
            "configFiles": [
                "probes/ft2232.cfg",
                "soc/hpm6750-single-core.cfg",
                "boards/hpm6750evkmini.cfg"
            ],
            "interface": "jtag",
            "runToEntryPoint": "main",
            // Work around for stopping at main on restart
            "postRestartCommands": [
                "break main",
                "continue"
            ]
        }
    ]
}

                其中"gdbPath"设置我们工具链中的gdb路径;"searchDir"设置openocd配置文件的路径;"configFiles"设置配置文件("probes/ft2232.cfg":使用ft2232调试器、"soc/hpm6750-single-core.cfg":单核调试、"boards/hpm6750evkmini.cfg":板级配置) 

        4、打开工程并编译

cd ~/workspace/work/hpm/hello_world/
code .

         

         其中①选择编译类型

        可以看到其中有我们刚刚设置的flash_xip。

        很多小伙伴可能还不知道flash_xip的含义:

        我们的程序有加载视图和执行视图的区别,程序中的代码(Code)和数据(Data)是保存在flash中的,在运行的时候这些内容可以直接从flash的地址执行,这种叫做flash_xip;如果代码和数据都拷贝到RAM中运行,比如拷贝到SDRAM中,我们可以叫做sdram_xip(但是程序还是必须先烧写到flash中,程序执行的时候由启动代码拷贝到sdram中)。如果大家对这个想进一步了解的话,可以阅读一下博文

GNU LD脚本命令语言(一)_coder.mark的博客-CSDN博客链接器脚本控制着每一次链接过程,链接脚本是用链接器命令语言编写的(linker command language)。链接脚本的主要目的是描述输入文件中的段(section)应该如何映射到输出文件中的段(section),并且控制输出文件的内存布局(地址分配)。有些时候链接器脚本还可以使用链接器命令指示链接器执行许多其他操作。......................................................_gnu ldhttps://blog.csdn.net/tianizimark/article/details/125865933

        ②选择工具链,此处我们不需要执行(因为我们工具链已经通过环境变量的方式设置)

        ③编译

         

        5、调试 

        打开调试窗口(点击④)

 

        观察terminal窗口会有openocd执行过程

         

        观察DEBUG CONSOLE窗口有GDB的执行过程 

         

         同时整个调试窗口会有一个调试工具栏出现

        以上就是Visual Code的开发调试环境。

        最后针对HPM-SDK的一些配置,我们还设置了"flash_sdram_xip"构建类型。

 

         

         

 

 

         

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

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

相关文章

【Linux系统编程】shell的感性理解

文章目录 1. shell是什么?它有什么作用?2. 通过一个故事感性理解shell的运行机制开端发展波澜渐起(正常命令的处理)故事角色与处理过程中各部分的映射走向高潮(非法请求的处理)shell 存在的意义结尾 1. she…

Leetcode-每日一题【142.环形链表Ⅱ】

题目 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部…

每天一点Python——day45

#第四十五天 #字典元素的特点: #例:字典中的所有元素都是一个key-value对【键值对】,key不允许重复,value可以重复 a{name:张三,name:李四} print(a) #只会输出李四,因为键不允许重复,否则会出现值覆盖的情…

QMenu代码生成器

共4种选项: 文本:输入父对象名,文本即可 文本图标:输入父对象名,文本,图标 文本图标菜单:输入父对象名,子对象名,文本,图标 文本菜单:输入父对象名…

14 | count(*)这么慢,我该怎么办?

一下内容出自《MySQL 实战 45 讲》 14 | count(*)这么慢,我该怎么办? count(*) 的实现方式 不同的 MySQL 引擎中,count(*) 有不同的实现方式。 MyISAM 引擎把一个表的总行数存在了磁盘上,执行 count(*) 的时候会直接返回这个数…

斯坦福大学吴佳俊:通过自然监督编码理解视觉世界

导读 在智源大会的生成模型论坛上,斯坦福大学助理教授吴佳俊带来了精彩的演讲 “通过自然监督编码理解视觉世界”(Understanding the Visual World Through Naturally Supervised Code)。此次演讲从二维图像拓展到三维世界,从人类…

linux高并发网络编程开发(xml json)16_xml和Json相关api及文件解析制作

pdf详细版 01 学习目标 xml xml基础语法和规范C程序中如何使用xml开源库借助开源库,在C程序中生成xml文件已知一个xml文件,如何借助开源库解析xml文件数据 Json json的基础语法和规范C程序中如何使用json开源库 - cjson使用cjson生成json文件已知一个json文件,使用cjson库解析…

列存储、行存储

一、定义 1.1定义 Sybase在2004年左右就推出了列存储的Sybase IQ数据库系统,主要用于在线分析、数据挖掘等查询密集型应用。列存储,缩写为DSM,相对于NSM(N-ary storage model),其主要区别在于: DSM将所有记录中相同字段的数据聚…

【AUTOSAR】BMS开发实际项目讲解(二十三)----电池管理系统高压互锁保护

高压互锁保护 关联的系统需求 TSR-BMS-6101、TSR-BMS-6102、TSR-BMS-6103、TSR-BMS-6104、TSR-BMS-6105、TSR-BMS-6106、TSR-BMS-6107、TSR-BMS-6108、TSR-BMS-6109、TSR-BMS-6110、TSR-BMS-6111; TSR-BMS-6201; TSR-BMS-6301; TSR-BMS-S101、TSR-BMS-S102、TSR-BMS-S103、TS…

AutoSAR系列讲解(入门篇)4.3-BSW的Communication功能

一、架构与术语解释 BSW中以后每一节我都会放上一张模块图,所以就先上图: 由于汽车上一般都使用CAN总线,图中的bus大家可以就当成CAN来看待,如果使用的是LIN或者其他的,也相应的换成其总线看待就行。后续在实践篇中将会…

你需要了解的 50 个 ChatGPT 统计数据和事实

Rest assured that with the ChatGPT statistics you’re about to read, you’ll confirm that the popular chatbot from OpenAI is just the beginning of something bigger. Since its launch in November 2022, ChatGPT has broken unexpected records. For example, it r…

数据结构之串

1.串的基本概念 • 一个串是由n(n≥0)个字符组成的有限序列,记为s“s0s1 ⋯ sn-1”,其 中,s是串名,双引号括起来的字符序列s0s1 ⋯ sn-1是串值。 • 一个字符在串中的位置称为该字符在串中的序号&#xff…

微搭低代码实现表单打印功能

目录 1 引入第三方库2 搭建页面3 实现打印4 实现效果总结 在我们的日常开发场景中,表单打印是一个比较常见的场景,微搭本身不带打印功能,我们需要借助一个第三方的库来实现打印。 1 引入第三方库 在微搭中如果需要引入第三方库的&#xff0…

阿里云免费云服务器领取教程

阿里云推出了免费试用中心,提供超百款免费试用云产品,个人用户与企业用户均可免费试用,云服务器最长免费体验3个月! 一、活动地址 阿里云免费试用中心 二、活动对象 满足以下全部条件的阿里云用户: 1、阿里云注册会…

JS模块化规范及进化史

模块化规范及进化史 按照功能和需求分成各个模块,最后再把所有模块合并在一起。当然现在基于webpack vue/react,模块化开发很重要。某个功能板块单独写成一个模块,然后把模块合在一起,最后把整个页面的功能实现。方便团队管理 小插…

stunnel-加密通道-squid-IP缓存服务器-openssl自签名证书

文章目录 1.安装squid2.管理squid服务3.安装Stunnel服务器端4.安装Stunnel客户端5.在目标使用位置开启代理 1.安装squid yum install squid 2.管理squid服务 systemctl start squid systemctl stop squid systemctl status squid 查看端口 netstat -lntpo | grep 8**** 修改配…

集成增益采样电路误差计算--适用INA214

一、 一般集成电路结构如下: 二、 典型的计算步骤如下: 主要误差来源:采样电阻R-shunt,集成增益运放,ADC误差。 采样电阻误差 误差项包括常温下电阻的精度X1%,电阻的温漂值X2% 误差百分比为:…

《C++ Primer》--学习11

关联容器中的元素是按关键字来保存和访问的 两个主要的关联容器类型是 map 和 set。map 中的一个关键字-值(key - value)对:关键字起到索引作用,值则表示与索引相关联的数据。set 中每个元素只包含一个关键字; 以下八…

Java-数据结构(一)

这里写目录标题 前言一、为什么需要数据结构?1、低效的操作2、占用过多的内存空间3、困难的数据操作 二、枚举(Enumeration)1、定义2、关键字3、适用场景 三、 位集合(BitSet)1、定义2、方法3、适用场景 四、向量&…

文件操作 -- C语言

在之前学习的时候,我们可以发现当程序运行完,我们之前保存的数据就会消失,再次运行时还得重新输入,为了使我们保存的数据在下次运行时还能使用,我们这篇文章来学习一下怎么使用文件操作,将我们的数据保存在…