使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

我们很高兴地宣布,在Visual Studio 2022预览版中,我们添加了新的对嵌入式系统的开发支持。通过协同使用vcpkg包管理器,你可以快速地搭建好一个嵌入式开发环境并迅速展开工作。

在这篇文章中,我们将会介绍嵌入式工作负载的安装,如何通过vcpkg获取相关的依赖包,然后我们会展示在Visual Studio中借助外围寄存器和RTOS对象视图来进行代码编辑,构建,部署和调试一个嵌入式项目。我们将会通过一个Azure RTOS ThreadX项目来展示所有这些新特性。

使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

Azure RTOS ThreadX 是一个在MCU上广泛使用的RTOS系统。我们还在Visual Studio的帮助文档中附带了对Azure IoT DevKit, NXP 1060和STMicro STM32L4 L4 等开发板的使用说明。如果你使用的是其他厂家的开发板,则应该可以通过修改相应的配置来快速适配。

安装过程

首先,你需要下载安装最新版本的Visual Studio 2022,然后选择”Linux and embedded development with C workload”。在默认情况下,你所需要的组件都会被选中,如下图所示:

使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

对于嵌入式开发来说,其中一个难点就是配置好需要的工具和组件。通常不同项目有着不同的编译工具链和调试工具。这就是vcpkg包管理器可以派上用场的地方。下面我们会演示下如何通过vcpkg来搭建我们的嵌入式开发环境,后面我们将会把它们整合到Visual Studio中,从而提供一个更加流畅的用户体验。

首先打开PowerShell命令行,然后克隆AZzure RTOS项目代码。它将会作为我们演示的一个例子项目。

使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

然后导航至开发板对应的子目录,我使用的是Azure IoT DevKit,如下图所示:

使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

如果你还没有安装vcpkg,则可以参考下图进行安装:

使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

在项目目录下,有一个vcpkg_configuration.json文件。这个清单文件是由vcpkg创建,主要用来记录编译和调试项目所需要用到的工具。可以参考vcpkg文档来创建你自己的清单文件。执行vcpkg activate命令将会使用这个文件来按需安装这些工具。

使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

通过上面的三条命令,我们就可以完成嵌入式项目的克隆,vcpkg包管理器的安装和依赖工具的安装和激活了。下面开始做正事儿。

使用Visual Studio 进行嵌入式开发

目前vcpkg还没有整合到Visual Studio中,所以当前我们需要在上面已经激活的命令行窗口中启动Visual Studio,这样就可以确保需要使用到的工具对于Visual Studio是可见的。

使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

请注意,如果你的电脑上安装了多个不同版本的Visual Studio,则你可能需要指定需要预览版的全路径,例如:

使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

至此,我们就已经在Visual Studio中打开了例子项目,就和其他CMake项目一样。Visual Studio可以通过预定义好的CMakePresets文件来运行CMake编译过程。
和往常一样,可以使用Visual Studio来编写嵌入式代码。在这个Azure RTOS项目中,我们会展示代码导航,IntelliSense,构建,部署和调试等功能。我们还会演示新的寄存器诊断支持和RTOS对象视图。

代码导航和IntelliSense

通过Ctrl T可以打开”Go to All and type”按钮,然后选择对应的按钮进行代码导航。请注意,我们可以将光标悬浮在这个函数上,然后它会展开TIM3->CCR1这个寄存器的值,如下图所示:

使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

构建,部署和调试

下面我们演示如何在RGB_LED_SET_R()这个函数上设置断点。
要查看如何控制启动,请选择查看解决方案资源管理器中的所有文件并打开 .VSlaunch.vs.json。 你可以看到 miDebuggerPath 设置为使用 arm-none-eabi-gdb,而 debugServerPath 设置为使用 debugServerArgs 中的配置脚本调用 openocd。 用于描述外设寄存器的信息由 MCU 制造商在我们用 svdPath 指向的 SVD 文件中提供。 该项目被配置在入口处中断,具有属性 stopAtConnect。

现在,将你的开发板插入 PC(并安装 ST-LINK 驱动程序),将调试目标设置为 Launch,F5 将使用 vcpkg 获取的 openocd 进行工作,以刷新和调试连接的电路板。 执行在入口函数处停止,所以在这里我们看到了它的汇编代码。 我们还可以通过转到菜单 Debug > Windows > Disassembly 来查看反汇编,如下图所示:

使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

外围寄存器

现在按下开发包板上的 A 按钮。 这触发了我们的断点。 我们现在可以转到菜单 Debug > Windows > Embedded Registers。 这将使用启动配置中指定的 SVD 文件中的信息打开外设寄存器视图。 我们现在可以滚动这个列表来找到我们感兴趣的寄存器,这里是 TIM3->CCR1,当我们跳过 RGB_LED_SET_R 函数时它会更新。

下图是断点触发时的界面:

使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

下图是步进调试:

使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

RTOS 对象视图

我们的例子项目中的应用程序有多个线程,但你不会在现有线程窗口中看到它们。

使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

有关这个的解释请看下面的描述:
实时操作系统是为应用程序提供服务和管理处理器资源的系统软件。 这些资源包括处理器周期、内存、外设和中断。 实时操作系统的主要目的是在嵌入式软件必须执行的各种任务之间分配处理时间。 这通常涉及将软件分成多个部分,通常称为“任务”或“线程”,并创建一个运行环境,为每个线程提供自己的虚拟微处理器(“多线程”)。 基本上,虚拟微处理器由一组虚拟的微处理器资源组成,例如寄存器组、程序计数器、堆栈存储区和堆栈指针。 线程仅在执行时才使用物理微处理器资源,但每个线程都保留这些资源内容的副本,就好像它们是自己的私有资源(线程的“上下文”)。”

因此,理想情况下,对于嵌入式开发,你将拥有可以向您显示有关这些 RTOS 对象的信息的视图。 要查看新的可用 RTOS 对象视图,请转到菜单 Debug > Windows > RTOS Objects。 在这里你将看到 ThreadX 提供的对象的选项,在这里我们将选择线程。

使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

线程视图一目了然地显示了你在嵌入式开发过程中通常需要的许多信息、线程 ID 和名称、它们运行的次数、堆栈的开始、结束位置、堆栈大小以及最大堆栈使用量。

使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

还有其他 ThreadX 对象的其他视图,如块和字节池、事件、互斥锁、队列和计时器。 我们也有 FreeRTOS 的 RTOS 对象视图,尽管那里的可用对象因其支持的内容而异。

硬件断点限制

最后一个需要调用的调试功能是嵌入式硬件目标通常只有一组有限的可用硬件断点。 设置过多会破坏调试器状态。 因此,我们在 launch.vs.json 中添加了 hardwareBreakpoints。 对于这个设置为它支持的值是 6 的开发板。如果我们设置的更多,我们将看到断点没有设置,我们会收到一个警告,它不会被触发。 这可以防止破坏与电路板的连接,并使我们有机会取消设置其他一些断点并继续不间断地调试。

使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

总结

说了这么多,总的来说,就是:终于可以在VS中搞嵌入式开发了。
遥想当年,在VI里瞅着屏幕鼓捣C代码的热血年代。

最后

Microsoft Visual C 团队的博客是我非常喜欢的博客之一,里面有很多关于Visual C 的知识和最新开发进展。大浪淘沙,如果你对Visual C 这门古老的技术还是那么感兴趣,则可以经常去他们那(或者我这)逛逛。
本文来自:《Embedded Software Development in Visual Studio》

最近我写了个东西

正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

使用Visual Studio进行嵌入式系统开发(vscode 嵌入式开发)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年5月19日 下午8:50
下一篇 2024年5月19日 下午9:02

相关推荐

  • 党建领航定向 凝聚发展力量——郑州商品交易所党建工作综述

    河南日报客户端记者 王昺南 通讯员 王甲辰 一路奋进一路歌。31年来,无论是在积极履行社会责任的前沿,还是在期货服务实体经济的主战场,总有一面旗帜指引着方向、鼓舞着士气、凝聚着力量…

    科研百科 2023年2月8日
    316
  • 项目安全管理系统图

    项目安全管理系统图 随着现代项目管理的日益复杂和多样化,项目安全管理系统变得越来越重要。一个好的项目安全管理系统可以帮助团队更好地管理安全风险,确保项目的成功交付。本文将介绍一个项…

    科研百科 2024年12月20日
    0
  • 制造考勤管理系统项目

    制造考勤管理系统项目 随着制造业的不断发展,工厂的考勤管理也变得越来越重要。为了有效地管理工厂的考勤情况,我们提出了一项制造考勤管理系统项目。 该系统旨在通过使用先进的计算机技术和…

    科研百科 2025年6月5日
    1
  • 老年护理的科研项目

    老年护理的科研项目 随着人口老龄化趋势的加剧,老年护理成为了一个越来越重要的话题。老年人在生理,心理和社会等方面都存在着各种挑战,需要专业的护理和照顾。因此,开展老年护理的科研项目…

    科研百科 2025年3月7日
    1
  • 微软高管谈微软远程办公思考与实践,值得每个企业看看(微软 远程办公)

    作者 | Aholiab 新型冠状病毒肺炎在庚子鼠年伊始就牵动着无数国人的心,为阻肺炎传播,各地政府建议市民尽量减少外出,避免感染。各大公司也纷纷响应,号召员工在家远程办公。 一方…

    2022年8月18日
    393
  • 科研项目动员部署会讲话

    科研项目动员部署会讲话 尊敬的各位科学家们,各位工程师们,各位合作伙伴们: 大家好!今天,我们欢聚一堂,共同庆祝我们的科研项目动员部署会。 首先,我要向每一位参与科研项目的科学家们…

    科研百科 2025年2月2日
    1
  • 南京商业项目管理系统

    南京商业项目管理系统 南京商业项目管理系统是一款功能强大的商业项目管理软件,能够帮助商业企业更好地管理项目进度、预算、资源等信息,提高商业运营效率。 南京商业项目管理系统的特点在于…

    科研百科 2025年6月18日
    0
  • 因为系统项目管理师

    因为系统项目管理师 系统项目管理师是一个非常重要的职业。他们负责规划和实施系统项目,确保项目按时、按质、按预算完成。一个好的系统项目管理师能够帮助公司实现商业目标,提高生产效率,降…

    科研百科 2025年6月28日
    0
  • 科研项目费用预算差异原因怎么写

    科研项目费用预算差异原因 在科研项目中,预算差异是一种常见的现象。原因有很多,其中一些可能包括: 1. 项目规模不同 不同的项目规模可能会导致费用预算的差异。例如,一个较小的项目可…

    科研百科 2024年11月19日
    4
  • 《哈尔滨市社区工作者管理办法》解读(《哈尔滨市社区工作者管理办法》解读全文)

    一、起草背景 习近平总书记指出:“社区是基层基础,只有基础坚固,国家大厦才能稳固”。社区是党和政府联系、服务居民群众的“最后一公里”。该管理办法旨在通过进一步规范社区工作者管理模式…

    科研百科 2023年9月21日
    273