0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于VS Code开发嵌入式

嵌入式大杂烩 来源:嵌入式大杂烩 作者:嵌入式大杂烩 2023-04-23 17:24 次阅读

很多朋友在开发嵌入式的时候,一般常用Keil MDK、IAR等IDE工具,不过这些都是收费的,而且非常笨重,跨平台开发不方便,依次笔者将推荐使用VS Code开发嵌入式

如果想要使用VS Code开发嵌入式,则需要以下工具:

(1) GNU Arm Embedded Toolchain:ARM用的GNU工具链,包括编译器(gcc),调试器(gdb),链接器(ld)和其它工具,支持Windows、Linux、Mac。GCC(GNU Compiler Collection)。

(2) Git/make:代码管理工具,但是我们这里要使用的是下载git附带的git bash。这个bash是基于mingw的,非常轻量,甚至于make都没有,但是可以安装相应的插件来支持make,wget等工具。当然啦,如果是在Linux平台直接使用make工具就行。

(3) OpenOCD:一个开源的片上调试器(Open On-Chip Debugger)。OpenOCD负责把GDB的高级别命令转换成JTAG命令,并通过特定下载器的要求进行打包,准备调用OS提供的USB驱动由USB发送出去。GDB和OpenOCD之间使用TCP协议进行连接,说的简单点,OpenOCD就是一个协议转换工具。

本文将分为两个部分:工具安装,固件开发。

1 软件安装

1.1 GCC编译工具

编译代码需要编译器,Linux系统的编译器是GCC,而Windows的C/C++编译器是Microsoft Visual C++,那么要想在Windows也能GCC等一系列编译工具,就需要安装MinGW。

MinGW 是用于进行 Windows 应用开发的 GNU 工具链(开发环境),它的编译产物一般是原生 Windows 应用,虽然它本身不一定非要运行在 Windows 系统下(是的 MinGW 工具链也存在于 Linux、BSD 甚至 Cygwin 下)。说的通俗点,MinGW就是你在Windows下使用GNU工具链的一个编译工具。

MinGW编译的程序只能在X86上运行,不能运行在嵌入式的硬件平台,因为嵌入式平台大都是ARM体系结构,因此这就需要一个在Windows环境下能使用GNU编译ARM体系结构的编译工具,这也就是交叉编译工具。

所谓交叉编译工具就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行。

做过嵌入式开发的朋友都知道,在嵌入式开发过程中有宿主机和目标机的角色之分:宿主机是执行编译、链接嵌入式软件的计算机;目标机是运行嵌入式软件硬件平台。

C:\\Users\\BruceOu\\Desktop\\20210829-stm32-t34.png

嵌入式开发流程大致就是在宿主机完成目标的开发工具,使用功能交叉编译工具生成固件,将固件烧写到目标机,在开发初期,还需要在线调试等工作,这就需要诸如J-link等调试工具。

gcc-arm-none-eabi就是一个基于ARM的交叉编译工具链,而且还是开源的,适用于Arm Cortex-M和Coretex-A系列处理器,包括GNU编译器(GCC),以及GDB,不仅适用于Windows,还适用于Linux,MacOS上的交叉编译。

好了,直接看下载地址吧。

下载地址:https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads

1682241458624lfwio0fupu

【注】这里要选择GUN-RM下的工具,GUN-A是Cortex-A系列的交叉编译工具。

下载后解压,并把安装目录下的bin文件夹添加到环境变量:

1682241459000pupphge3nn

然后在命令窗口中输入下面的命令验证安装是否成功:

#arm-none-eabi-gcc -v

如果有信息输出,那就是装好了。

1682241459606pojy7uegek

值得注意的是,如果不是ARM体系,就需要更换交叉编译工具,比如RISC-V,就需要安装RISC-V的交叉编译工具链。

1.2 make工具安装

如果使用gcc来编译工程,一般需要使用功能Makefile来管理工程,那么就需要一个工具来识别Makefile文件,也就是make工具,在Linux中已经自带make了,在Windows就需要安装make工具。

在安装make工具之前,先来看看什么是makefile?Makefile 可以简单的认为是一个工程文件的编译规则,描述了整个工程的编译和链接等规则。其中包含了那些文件需要编译,那些文件不需要编译,那些文件需要先编译,那些文件需要后编译,那些文件需要重建等等。编译整个工程需要涉及到的,在 Makefile 中都可以进行描述。换句话说,Makefile 可以使得我们的项目工程的编译变得自动化,不需要每次都手动输入一堆源文件和参数

本文的make工具是依赖Git工具的,我相信很多朋友都用过Git,但是很少使用Git的make等功能。

Git的bash实际上也就是一个mingw,是可以支持部分Linux指令的,但是只有少部分。在编译代码的时候经常会使用make命令反而在bash下默认是不支持的。

Make工具下载地址:https://sourceforge.net/projects/ezwinports/files/

1682241460118zvsimg1yjz

下载make-4.1-2-without-guile-w32-bin.zip 文件。

把该文件进行解压,把解压出来的文件全部拷贝的git的安装目录下:

C:\\Program Files\\Git\\mingw64

把文件夹进行合并,如果跳出来需要替换的文件要选择不替换。

1682241460410bj2px3c716

这样在git bash窗口下就可以执行make了。

1682241460755czvig3hmf9

没有安装Git先安装Git工具。

Git下载地址:https://git-scm.com/download/win

1.3 OpenOCD安装

OpenOCD是用于对MCU进行下载仿真的工具,是一个开源软件包。

下载地址:https://gnutoolchains.com/arm-eabi/openocd/

下载后解压即可。

C:\\Users\\BruceOu\\Desktop\\1.png

打开share/openocd/scripts,里面有很多提前写好的配置文件:

1682241461364wzhtsmdtv1

其中interface目录下都是接口相关配置文件,例如jlink.cfg,stlink.cfg;target目录下都是芯片相关的配置文件,例如stm32f1x.cfg。

然后配置下环境变量:

1682241461726rma7rowatl

然后在命令窗口中输入下面的命令验证安装是否成功:

1682241462149z414efva6l

表示安装成功。

值得注意的是,想要在线下载调试就需要调试工具的驱动安装。笔者首推J-link,几乎所有的MCU都是可以用,当然如果是ST的MCU,也可以使用ST-Link。

2 固件开发

在开始之前,需要准备一个基于GCC的工程,笔者这里准备的是STM32的工程。

2.1 Visual Studio Code导入工程

选择打开文件夹,选择STM32CubeMX新建的工程.

1682241462460yhgfabv8r2

最后创建的工程如下:

168224146287137ebzmlilv

2.2 Visual Studio Code工程配置

接下来就是配置工程。

1. settings.json

点击“在settings.json中编辑",修改为自己安装git bash的路径:

{
"terminal.integrated.profiles.windows": {
"my-bash": {
"source": "Git Bash",
"args": []
}
},
"terminal.integrated.defaultProfile.windows": "my-bash"
}

打开终端,就可以使用Bash了。当然了,这不是非必须的。

2. c_cpp_properties.json

VS Code只是一个编辑器,它检查代码的时候并不会去读makefile,因此有些宏定义需要自行配置。c_cpp_properties.json的作用就是配置工程的头文件、工具链、宏定义等参数。

打开c_cpp_properties.json配置文件,输入以下内容:

{
"configurations": [
{
"name": "Win32",
"includePath": [
"D:/gcc/gcc-arm-none-eabi-10.3-2021.07/arm-none-eabi/include",
"${workspaceFolder}/Core/Inc",
"${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc",
"${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc/Legacy",
"${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include",
"${workspaceFolder}/Drivers/CMSIS/Include"
],
"defines": [
"USE_HAL_DRIVER",
"STM32F103xE"
],
"compilerPath": "D:/gcc/gcc-arm-none-eabi-10.3-2021.07/bin/arm-none-eabi-gcc.exe",
"intelliSenseMode": "gcc-x64",
"browse": {
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": "",
"path": [
"${workspaceFolder}"
]
}
}
],
"version": 4
}

name :这是用于标记使用的平台的标签。除了win32还可以选Linux或Mac。也就是说,这个json里“configuration“下可以写三组配置,只要每组配置前面写上不同的平台,即可在不同的操作系统上使用就会自动适配不同的配置。

includePath :头文件路径。第一个目录是C语言标准库的目录, 剩下的几个目录直接从Makefile里复制然后稍微修改下即可。"${workspaceFolder}"表示项目文件夹;

defines :全局宏定义。

compilerPath :编译器的路径。

intelliSenseMode :因为我用的是gcc所以选gcc-x64。

browse :源文件搜索路径。用来做代码补全和查找定义的。这个路径和includePath不同,browse.path是自动递归所有子目录的。而include.path默认只看本目录。

c_cpp_properties配置说明:

https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference

3.tasks.json

tasks.json的作用就是配置工程的编译、下载等工作。如果没有则需要创建tasks.json文件,内容如下:

{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "shell",
"command": "make",
"args": [
"-j4"
]
},
{
"label": "download",
"type": "shell",
"command": "openocd",
"args": [
"-f",
"./interface/jlink.cfg",
"-f",
"./target/stm32f1x.cfg",
"-c",
"program build/STM32F103ZE.elf verify exit"
]
},
{
"label": "clean",
"type": "shell",
"command": "make",
"args": [
"clean"
]
}
]
}

这个文件创建了三个任务,分别叫做build、download和clean,build任务就是在bash里执行了make -j4,也就是使用多线程编译,download也就是用于在线下载固件,clean任务就是在bash里执行了make clean。
值得注意的是,这里需要拷贝OpenOCD中的interface和target中的相关配置,笔者是整个文件夹都拷贝过来了。

16822414631898xmqify9yn

2.3 编译

点击‘终端->运行任务’,然后虚着呢‘build’。

1682241463558cwo41j7chw

等待编译完成即可。

1682241463914dfpotf0t35

这里还可以直接使用终端编译。

1682241464471hckhl7k53c

最后我们使用make编译下前文新建的工程,编译通过显示如下:

1682241464991sgfk89dndc

2.4 固件下载

笔者这里使用功能OpenOCD下载。选择“终端->运行任务…”

1682241465531zlts6jwcx2

选择task中配置的命令download。

1682241465842snalvgjvrb

复位设备,即可下载成功。

16822414662167holo5z2di

当然也可使用命令下载。

openocd -f ./interface/stlink.cfg -f ./target/stm32f1x.cfg -c 'program build/STM32F103ZE.elf verify exit‘

效果和使用界面是一样的。

当然换成J-Link下载也是一样的操作,只是需要修改命令。

openocd -f ./interface/jlink.cfg -f ./target/stm32f1x.cfg -c 'program build/STM32F103ZE.elf verify exit‘

另外,还需要注意的是如果J-Link的接口是swd,则需要在interface/jlink.cfg中添加如下语句。

transport select swd

当然还可以连接到OpenOCD守护程序烧写。

$ openocd

1682241466626hz4xpth6qp

值得注意的是,如果不加参数,需要事先配置openocd.cfg,

1682241467172bg1fy76q55

如果不想配置,也可使用以下命令:

#openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg

16822414675420nrcdokamb

效果都是一样的。

打开另一个终端,输入以下命令连接到OpenOCD守护程序。后面的所有命令都是在这个终端运行的。

telnet localhost 4444

成功通过ST-Link连接到STM32上之后,OpenOCD会监听本机的4444端口。通过telnet登录上去,之后就可以控制OpenOCD干些什么了。

16822414680622h4y0cz6w5

接下来就可以烧写固件了。

program build/STM32F103ZE.elf verify reset exit

1682241468401u46yithznj

当然也可使用功能J-Link的J-Flash下载固件。

如果是ST的,还可使用ST-Link下载固件。

【注】OpenOCD使用J-link使用须知

在使用J-link之前,需要将J-link的驱动改为libusb,否则openocd无法连接到J-link。这里使用的工具是UsbDriverTool。

UsbDriverTool下载地址:https://visualgdb.com/UsbDriverTool/

使用功能方法如下:

https://visualgdb.com/UsbDriverTool/UsbDriverTool.png

如果使用J-link调试,则不修改修改。

2.5 ARM-GDB调试

直接使用GDB调试,

首先在终端输入一下命令:

#openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg

1682241469181hi4z8ucqix

【注】也可将命令配置成task任务。

【注】如果不带参数启动,openocd就会自动查找当前目录下有没有名为openocd.cfg的文件,并把它作为配置文件来启动。

【注】openocd默认TCP/IP的3333端口作为gdb端口,4444作为telnet端口。在连接gdb之前,我们可以先用telnet连上试用一下。

如果你的电脑没有开启telnet功能,需要打开“启用或关闭Windows功能”,然后在里面找到“telnet客户端”,启动即可。

1682241469730h02kbspxv7

openocd运行时,这个终端就被占用了因此还需要再开一个终端。

GDB也属于GNU项目的一部分,跟在Linux上调试是一样的,只是这里使用的是交叉编译工具中的GDB。

arm-none-eabi-gdb build/STM32F103ZE.elf

1682241470053ow3bbo8xgx

GDB常用命令如表所示。

命令 描述
list(l) 查看代码(默认一次显示10行)
break(b) 设置断点
clear(c) 清除断点
ignore 忽略对应断点num次
info b 查看当前所设断点
r(run) 运行程序
n(next) 单步调试,不进入函数调用
s(step) 单步调试,进入函数调用
p(print) 查看变量
display 每次自动显示该变量值
c(continue) 继续运行,直到结束或遇到新断点
finish 运行程序,直到当前函数完成返回
q(quit) 退出
shell command 执行shell命令

关于GDB的使用请看笔者文章:

https://bruceou.blog.csdn.net/article/details/88634967

接下来需要连接openocd服务,openocd给GDB的TCP/IP端口是3333。

target remote localhost:3333

16822414706347s0gjpzc1f

接下来和在Linux中调试一样。

在 gdb 中键入"l"(list)就可以查看所载入的文件,如下所示。

1682241471151n5qe1ke51y

自行参考笔者关于GDB的博文去调试吧。

如果觉得使用命令不方便,也可安装VS Code的插件,但是这是基于Cortex-M系列的MCU,如果是其他系列的,还是使用GDB吧。

2.6 VS Code插件Cortex-Debug调试

如果没有安装Cortex-Debug调试插件,需要先安装。

2.6.1 Cortex-Debug调试配置

1.GDB server路径设置

设置J-Link和OpenOCD的路径。

16822414715680s3yofwt7x

1682241471965531qc0jr52

根据实际情况设置。

1682241472352dl28lss4gx

2.launch.json文件

在vscode文件夹中新建一个launch.json,该文件是调试的入口文件。内容如下:

{
"version": "0.2.0",
"configurations": [
{
"cwd": "${workspaceRoot}",
"type": "cortex-debug",
"request": "launch",
"name": "OpenOCD",
"interface": "swd",
"servertype": "openocd",
"executable": "./build/STM32F103ZE.elf",
//"runToMain": true,
"device": "STM32F103ZE",
"svdFile": "./STM32F103xx.svd",
"configFiles": [
"${workspaceRoot}/openocd.cfg"
],
//"preLaunchTask": "build",
"armToolchainPath": "D:/gcc/gcc-arm-none-eabi-10.3-2021.07/bin/"
},
{
"cwd": "${workspaceRoot}",
"type": "cortex-debug",
"request": "launch",
"name": "J-Link",
"interface": "swd",
"servertype": "jlink",
"executable": "./build/STM32F103ZE.elf",
//"runToMain": true,
"device": "STM32F103ZE",
"svdFile": "./STM32F103xx.svd",
//"preLaunchTask": "build",
"armToolchainPath": "D:/gcc/gcc-arm-none-eabi-10.3-2021.07/bin/"
},
{
"cwd": "${workspaceRoot}",
"type": "cortex-debug",
"request": "launch",
"name": "ST-Link",
"interface": "swd",
"servertype": "stlink",
"executable": "./build/STM32F103ZE.elf",
//"runToMain": true,
"device": "STM32F103ZE",
"svdFile": "./STM32F103xx.svd",
//"preLaunchTask": "build",
"armToolchainPath": "D:/gcc/gcc-arm-none-eabi-10.3-2021.07/bin/"
}
]
}

executable :编译出的二进制文件,也就是最终烧录到单片机中的,这里是elf文件。根据芯片的不同,可能产生不同的名称和后缀(例如TI的TM4C123芯片编译出来的名称是"main.axf")

request :可以选launch或attach。launch是指启动调试时同时开始执行程序;attcah是指程序已经在运行了,然后开始调试。我没测试过attach。

type :调试的类型,选cortex-debug,这是我们装的插件。其实也可以填cppdbg之类的,但是那样我们就得自己配置gdb了,配置起来将会非常麻烦。

device :目标芯片。如果你使用J-LINK GDB Server时必须要设置这个选项。

svdFile :svd文件的路径,每个MCU的各不相同。

servertype :要选择的gdb server。我这里用openocd。

configFiles :gdb的配置文件路径。openocd会自动读当前目录下的openocd.cfg文件,这个选项不填也行。但是如果你想把openocd.cfg放在别处,就可以用这个选项指定配置文件的路径。

preLaunchTask :在启动调试前,预先执行的任务。

armToolchainPath :工具链的路径。

launch.json参考:https://code.visualstudio.com/docs/cpp/launch-json-reference

关于launch.json的更多配置请参看Cortex-Debug官网。

https://discuss.em-ide.com/blog/67-cortex-debug

3.openocd.cfg文件

在项目文件夹下新建一个openocd.cfg文件,用于配置调具体的调试器。内容如下:

选择调试器为jlink

#source [find interface/jlink.cfg]

source [find interface/stlink-v2.cfg]

选择接口为SWD

transport select swd

选择目标芯片

source [find target/stm32f1x.cfg]

我这里选择使用ST-Link,SWD接口,目标芯片为stm32f1x。

【注】使用J-link调试也是一样的,只需将openocd.cfg文件配置成J-link调试即可。

4.svd文件

用于寻找STM32F1的svd文件。CMSIS-SVD是CMSIS的一个组件,它包含完整微控制器系统(包括外设)的程序员视图的系统视图描述 XML 文件。VS Code可以通过它来知道外设寄存器的地址分布,从而把寄存器内容展示到窗口中。

svd文件地址:https://github.com/posborne/cmsis-svd

1682241472707eim8m773bm

将下载好的STM32F103xx.svd文件放在项目文件夹根目录即可。

2.6.2 Cortex-Debug调试

直接按F5,openocd启动时,会自动在当前目录下寻找名为openocd.cfg的文件作为配置文件。调试界面如下:

1682241473215r8e1r1i4a4

界面左边可以看到变量窗口、调用堆栈等。窗口中间就是单步调试的各个按钮。这个就没啥好说的了,赶紧去玩起来吧。

这里可以在launch.json文件添加多个选项,就可使用多种调试手段了。

168224147380720i0orbb8d

Cortex-Debug的本质还是使用的OpenOCD。

本文介绍的开发方式不仅适用于ARM,还适用于RISC-V等系列的处理器。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4982

    文章

    18286

    浏览量

    288479
  • 调试器
    +关注

    关注

    1

    文章

    288

    浏览量

    23409
  • RISC-V
    +关注

    关注

    41

    文章

    1904

    浏览量

    45047
  • 32MCU
    +关注

    关注

    0

    文章

    108

    浏览量

    4625
  • vscode
    +关注

    关注

    1

    文章

    146

    浏览量

    7371
收藏 人收藏

    评论

    相关推荐

    如何设置VS代码配置来调试嵌入式处理器

    如果您开始使用Visual Studio CodeVS Code开发嵌入式软件,马上需要回答的一个问题是:“如何调试我的代码?”在微控制
    的头像 发表于 12-05 11:08 546次阅读
    如何设置<b class='flag-5'>VS</b>代码配置来调试<b class='flag-5'>嵌入式</b>处理器

    vs code的安装和使用

    ,那个时候嵌入式linux驱动开发人员多使用vim进行编码;对于没有图像界面的linux服务器,开发人员更是只能选择vim这一编辑工具。但是,接触过IDE的人会意识到vim的不方便:需要记一些指令,而且
    发表于 11-04 06:52

    如何基 Visual Studio Code来搭建嵌入式开发环境

    本文将介绍如何基于 Visual Studio Code 来搭建嵌入式开发环境 ,以实现快速开发调试嵌入式应用。
    发表于 11-05 07:48

    讲述构建VS Code集成开发环境的方法

    本系列教程将向大家讲述,在自己的计算机上构建完善的嵌入式系统开发环境的方法。本文将向大家讲述构建VS Code集成开发环境的方法。
    发表于 11-08 06:51

    嵌入式开发为什么选择C语言?

    1、嵌入式开发为什么选择C语言?(面试题!!!)嵌入式开发中操作系统是核心,需要移植,并在上层和底层做开发,而操作系统的核心是内核,所有内核的开发都采用C语言,所以
    发表于 12-15 07:45

    如何调试嵌入式代码?

    、CMSIS-DAP 等硬件调试器在嵌入式开发调试过程中扮演了怎样的角色呢?目标芯片内部是如何处理Debug and Trace 信号的?我们如何借助VS Code Cortex-Debug 或IDE 实现可视化
    发表于 12-17 06:32

    VS Code + gdbserver嵌入式arm远程调试的过程是怎样的

    VS Code + gdbserver嵌入式arm远程调试的过程是怎样的
    发表于 12-24 07:43

    VS Code GD调试嵌入式Linux程序无法断点调试的原因?怎么解决?

    VS Code GD调试嵌入式Linux程序无法断点调试的原因?怎么解决?
    发表于 12-24 07:49

    构建VS Code集成开发环境教程

    本系列教程将向大家讲述,在自己的计算机上构建完善的嵌入式系统开发环境的方法。本篇文章作为导引,因为随着时间的推移,各种不同的新技术会应运而生,所以本篇文章将对专栏里的内容进行实时更新,加入新的知识
    发表于 12-24 06:19

    使用IDE(vs code)进行嵌入式linux驱动开发

    目录背景系统版本vs code的安装和使用安装新建工程搭建交叉开发环境并编译内核设置vs code工程的头文件查找路径编辑驱动文件和Make
    发表于 11-01 16:33 11次下载
    使用IDE(<b class='flag-5'>vs</b> <b class='flag-5'>code</b>)进行<b class='flag-5'>嵌入式</b>linux驱动<b class='flag-5'>开发</b>

    嵌入式系统开发环境的构建03:构建VS Code集成开发环境

    本系列教程将向大家讲述,在自己的计算机上构建完善的嵌入式系统开发环境的方法。本文将向大家讲述构建VS Code集成开发环境的方法。
    发表于 11-03 14:21 13次下载
    <b class='flag-5'>嵌入式</b>系统<b class='flag-5'>开发</b>环境的构建03:构建<b class='flag-5'>VS</b> <b class='flag-5'>Code</b>集成<b class='flag-5'>开发</b>环境

    STM32开发VS Code + GDB下载调试

    STM32开发VS Code + GDB下载调试
    发表于 11-30 19:06 7次下载
    STM32<b class='flag-5'>开发</b>之 <b class='flag-5'>VS</b> <b class='flag-5'>Code</b> + GDB下载调试

    使用VS Code开发Arduino

    之下用VS Code(Visual Studio Code)作为编辑器来说就好用多了。现在我们可以在VS Code中安装Arduino插件来
    发表于 12-14 18:49 3次下载
    使用<b class='flag-5'>VS</b> <b class='flag-5'>Code</b><b class='flag-5'>开发</b>Arduino

    IAR Systems更新Visual Studio Code扩展 简化嵌入式开发工作流程

    版进一步简化了嵌入式开发工作流程 瑞典乌普萨拉 - 2022 年 12 月 7 日 - 嵌入式开发软件和服务的全球领导者 IAR Systems 为使用 Visual Studio Code
    发表于 12-09 18:16 731次阅读

    嵌入式中如何利用VS Code进行远程开发呢?

    VS Code几乎是所有的程序员必备的工具之一,据说全球一般的开发者都使用过VS Code这款工具。
    的头像 发表于 11-07 09:27 379次阅读
    在<b class='flag-5'>嵌入式</b>中如何利用<b class='flag-5'>VS</b> <b class='flag-5'>Code</b>进行远程<b class='flag-5'>开发</b>呢?