- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章使用VSCode和VS2017编译调试STM32程序的实现由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
近两年,微软越来越拥抱开源支持跨平台,win10搭载Linux子系统,开源VSCode作为跨平台编辑器,VS2017官方支持了Linux和嵌入式开发功能.
ST也是,近两年开发的软件工具基本都是跨平台(基于Java)的,比如STM32CubeMX,MCUFinder,STM32CubeProgrammer等。17年年底收购了truestudio的开发公司-Atollic。这个公司的IDE就是基于Eclipse使用GNU套装的.
官方都支持了,那我们有必要了解一下。要是好用,说不定就可以淘汰老旧的Keil了.
必要软件 。
VSCode或者VS2017.
GNU ARM Embedded Toolchain。JLink或者STLink.
STM32CubeMX。这个一般开发STM32的都会装.
使用思路 。
编译就不说了,有makefile,有gcc就可以了.
调试的话,整体的流程图如下:
VS2017 。
这里使用VSCode举例,但是VS2017实际上也是支持的,可以参考官方博客。这里本人做了一下尝试,发现官方还未完善。文档有多处错误,所以暂不考虑.
VSCode基本配置 。
这个现代化的编辑器,好处就不多说了,对比keil谁用谁知道,网上也能搜到一堆的关于它的介绍.
必要插件 。
C/C++为必要插件,否则无法调试.
建议安装插件 。
JLink安装 。
安装完成后,目录下应该有下列文件 。
GNU ARM Embedded Toolchain安装 。
下载后,安装或者解压即可。目录下有一个bin的文件夹,可以看到有下列文件:
安装完成后,将bin文件夹路径添加到环境变量。不过这不是必要的,只是方便在命令行中使用,在vscode中使用是不需要的.
使用cube生成代码以及makefile 。
这里需要注意,cube的版本至少要是4.23.0。否则没有生成makefile的选项,这里使用4.24.0。在配置完成后,设置选项需要选择Makefile,如下图:
点击生成后文件目录如下:
在main.c中添加两行闪灯的代码:
while (1) { HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin); HAL_Delay(500); Counter++; /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ }
至此,整个工程就搭建好了.
编译 。
官方生成了makefile,那么只要执行make就可以了。makefile的语法,网上可以找到很多的教程,这里不细说.
就目前的工程,想要make成功,改一句话即可使用,即指定gcc的路径。我的路径如下:
BINPATH = D:/GNU_ARM_TOOLS/2016q3_Version_5_6/bin 。
修改后,打开命令行,输入make即可。如果,提示make不是内部或者外部命令,那你还需要安装GNU make,这个可自行搜索下载.
如果配置成功,应该能看到下面的画面:
这样,在build目录下面可以找到blink.hex,blink.elf,blink.bin这几个文件。至此,编译成功。 其实,即使不使用cube生成Makefile,我们也可以自己写一个,或者使用CMake。但是,使用官方的文件,会统一大家的程序结构,以后移植或者开源也更容易.
而且,官方的Makefile结构比较清晰,熟悉Keil工程配置的人,其实很容易接受.
下载 。
可以使用JFlash直接烧录 。
如果没什么问题的话,复位之后,目标板的led应该已经开始闪烁了.
调试 。
这里是重点.
1.运行GDB server 。
我这里是在windows平台下,JLink提供的GDB server有一个图形客户端。Linux平台下使用命令行版本,也是一样的.
打开JLinkGDBServer.exe,配置连接好后,应该看到下面的界面 。
这个server一直开着就行,注意上面的端口号2331,后面要用到.
2.测试GDB 。
由于VSCode的配置文件中使用了较多的GDB指令,这里使用命令行先演示一下,方便理解,也刚好测试GDB是否正确安装.
在命令行输入arm-none-eabi-gdb,应该看到如下画面,否则你的GNU套装没安装好,或者没添加到环境变量 。
继续输入下面的指令:
此时,应该也看到led灯在闪烁了.
简单解释这几个指令,详细的可以自行搜索gdb的教程,或者查看GNU套件安装目录下的文档.
target remote :2331
:连接到GDB server。file
: 载入目标文件到gdb。load
: 下载文件到目标板。c
: 运行到下一个断点,如果没有断点,会一直运行monitor reset
: 传递命令reset给JLink GDB server。monitor 后面的参数不是gdb的指令,而是gdb server的(这里就是JLink Server的),这里参考JLink的文档(在安装目录下有),可以接受如下指令 。
常用的也就是reset了.
3.配置VSCode调试 。
在vscode的窗口按下F5,弹出来的窗口选择gdb 。
官方给了默认配置,需要修改成我们自己的。这里改动比较多,具体的配置参数需要参考两个地方,一个是vscode的官网 。
,一个是cpp插件的github 文档最终我们的配置如下:
{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "blink Launch", "type": "cppdbg", "request": "launch", "targetArchitecture": "arm",//虽然官方说弃用了,但实际上必须指明 "program": "blink", // 采用了自定义的设置,这里没啥用了 "args": [""], "stopAtEntry": true, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": true, "MIMode": "gdb", "miDebuggerPath": "D:/GNU_ARM_TOOLS/2016q3_Version_5_6/bin/arm-none-eabi-gdb.exe", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "launchCompleteCommand": "None", "miDebuggerServerAddress": "localhost:2331", "customLaunchSetupCommands": [ { "text": "target remote :2331", "description": "connect to server", "ignoreFailures": false }, { "text": "file F:/STM32/led/blink/build/blink.elf", "description": "load file to gdb", "ignoreFailures": false }, { "text": "load", "description": "download file to MCU", "ignoreFailures": false }, { "text": "monitor reset", "description": "reset MCU", "ignoreFailures": false }, { "text": "b main", "description": "set breakpoints at main", "ignoreFailures": false }, ] } ]}
再次按下F5后,效果如图:
这个配置中,最重要的就是customLaunchSetupCommands中的设置,有了上面gdb再命令行的演示,就很容易理解了.
总结 。
这里只是搭建了一个最简单的功能,使用上确实比Keil繁琐很多,而且有些实用功能没有实现,比如说live watch,比如说查看寄存器内容。如果有人专门针对VScode或者VS2017开发一个插件,那么最终的调试功能就和Keil一样强大了。 加上VScode强大的编辑能力,那么Keil除了ARMCC还可以让人留恋一下,其他部分就都可以抛弃了.
提升 。
想要在实际工程中使用vscode + GNU的组合,还需要提升几部分:
在github上已经有了一个插件的开源项目,实现了类似keil的部分功能,名字叫做cortex-debug,不过功能还不够完善,先关注着.
到此这篇关于使用VSCode和VS2017编译调试STM32程序的实现的文章就介绍到这了,更多相关VSCode和VS2017编译调试STM32内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。
原文链接:https://www.cnblogs.com/WeyneChen/p/8379214.html 。
最后此篇关于使用VSCode和VS2017编译调试STM32程序的实现的文章就讲到这里了,如果你想了解更多关于使用VSCode和VS2017编译调试STM32程序的实现的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
昨晚我因为这个问题脑子崩溃了。在确保没有来 self 的 eclipse 错误检查的明显错误之后,我开始调试我的程序。顺便说一下,我正在使用 Jre7。无论如何,每次我进入我的类调用(我们称之为“a”
(前言:我对 C/C++ 还很陌生,我真的不知道 native 代码中的调试实际上是如何工作的。) 一些消息来源说 gdb 和 lldb 可以调试 any program compiled to ma
我正在尝试从 Visual Studio 2012 外部调试 T4Scaffolding.Core Nuget 包。我使用的是安装了 Powershell 3.0 的 Powershell ISE,并
如何调试汇编代码?我在 Linux 上使用 gdb。我知道我可以看寄存器。有哪些调试汇编代码的方法? 最佳答案 您当然可以使用 breakpoints就像 C 或任何其他编译语言一样。 This ar
如何在每次通话时打印列表或 haskell 中的内容,例如: funct a list = funct (a + 1) (a : list) print list her
让我用我对 Makefiles 或 make 知之甚少的评论作为这个问题的前缀。 有一个非常大的项目,每晚自动构建。它以 Debug 和 Release 模式构建,Debug 用于 Valgrind
我正在创建一个计算每周工资的程序,那么任何加类工资都是该周正常工资的 1.5 倍。我的代码如下: #include int main() { double payrate; double h
我使用的是 Visual Studio 2010 Express Developer 版本。开发网站。我在我的 .aspx 页面中使用 JavaScript。 如何在 Javascript 中放置断点
我最近开始修补 Project Euler 问题,并尝试用 Javascript 解决它们。这样做我往往会产生许多无限循环,现在我想知道是否有比终止 Firefox 或 Chrome 中的选项卡更好的
有没有办法在程序执行期间生成一个交互式 python 控制台(最好是 iPython)而不暂停主程序并且能够检查和修改程序变量?类似于浏览器为 JavaScript 提供的功能。 我知道 pdb.se
我正在使用 FFmpeg @ Android 并希望能够进入 FFmpeg 代码(Eclipse + Seqouya),同时编译 FFmpeg 我使用 --disable-stripping --en
我从使用互操作调用 win32 api 函数的 .net 进程中得到一个异常。 我有一个调试器,我想查看 LastError 的值。 是否可以从 Visual Studio 调试器中查看 LastEr
我正在尝试通过 VBA 创建一个宏,以在 IE 的多个选项卡中打开一组指定的链接。目前我正在使用下面的代码,如果我试图打开 3 个或更少的选项卡,它大部分时间都可以工作。任何超过 3 的代码都会在“N
好的,这似乎是一个愚蠢的问题,因为 MonoDevelop 越来越成熟,所以我确定我只是想念它,但我环顾四周,所有关于这个主题的问题似乎都是关于远程调试或 Mac 上的调试。 我使用的是 Ubuntu
如何调试 Rscripts是从命令行运行的? 我目前正在使用 getopt传递命令行选项的包,当有错误时,我很难: 看看到底出了什么问题; 在 R 中交互式调试(因为脚本需要命令行选项。) 有没有人有
支持 PDF 和网络上的信息很少。我碰巧在博客中看到一篇文章,提到 $.write() 或 $.writeln() 将向 javascript 控制台写入一个字符串。相当有用。有谁知道这个 $ 对象是
PyCharm 1.5 中是否可以使用 Firefox 和 Chrome 支持的 JavaScript 调试? 如果是这样,它能否与 Python/Django 调试器一起有效运行? 如果没有,有没有
我确定这以前发生在人们身上,某些东西在 Debug模式下工作,你在发布时编译,但有些东西坏了。 这发生在我在嵌入式 XP 环境中工作时,我发现最好的方法确实是编写一个日志文件来确定它会出错的地方。 您
我目前正在为即将到来的项目评估 Flow3。 AOP 模式和依赖注入(inject)将非常适合我们的目的。 现在我想不通的是如何在 Controller Action 中调试一些结果。 public
最初,我有一个包含测试服务器的 Django 应用程序。要调试此设置,我只需添加 import pdb; pdb.set_trace()代码中的任何位置,并且有一个断点将我扔到终端中的交互式调试器中(
我是一名优秀的程序员,十分优秀!