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

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

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

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

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进行嵌入式系统开发(visual studio 嵌入式)

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

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

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

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

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

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

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

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

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

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

使用Visual Studio 进行嵌入式开发

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

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

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

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

至此,我们就已经在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进行嵌入式系统开发(visual studio 嵌入式)

构建,部署和调试

下面我们演示如何在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进行嵌入式系统开发(visual studio 嵌入式)

外围寄存器

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

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

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

下图是步进调试:

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

RTOS 对象视图

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

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

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

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

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

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

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

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

硬件断点限制

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

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

总结

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

最后

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

最近我写了个东西

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

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

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

(0)
上一篇 2022年7月6日 上午8:47
下一篇 2022年7月6日 上午8:49

相关推荐

  • 系统项目管理图表分析

    系统项目管理图表分析 系统项目管理是项目管理的一种形式,它涉及到对项目的各个方面进行计划、监控和控制。系统项目管理图表分析是一种常用的工具,可以帮助项目经理更好地了解项目的进展情况…

    科研百科 2024年12月18日
    1
  • 源汇区农信联社:“三个强化”推进党建与业务融合发展(农行党建和业务发展四个融合)

    河南经济报 记者 杨磊 通讯员 张丽 马文昊 今年以来,源汇区农信联社持续加强各级党组织建设,将党建引领作用嵌入全年业务营销,推动党建业务深度融合、同频共振。 强化党委引领示范作用…

    科研百科 2023年2月10日
    403
  • 项目管理系统工程理解

    项目管理系统工程 项目管理系统工程是一种系统性的方法,用于管理复杂的项目。这种方法基于系统工程的理论,将项目分为多个阶段,并使用系统工程的方法来分析和解决项目中的问题。本文将介绍项…

    科研百科 2025年1月9日
    0
  • 在头条写小说赚钱吗?收入结构大起底:分头条+番茄两条渠道(头条写小说挣钱吗)

    一张图,告诉你新人作者在头条的收入结构: 在头条写小说,你的收入来源主要有两个: 头条网站 读者会在哪里看到我们的文章呢?一个是首页推荐的feed流,一个是头条的小说栏目,下面讨论…

    科研百科 2023年5月9日
    1.9K
  • 合同管理 下载

    合同管理下载 合同管理是一个重要的工具,可以帮助企业和个人更好地管理和执行合同。下载合同管理工具可以大大提高合同管理的效率和准确性,使合同执行更加顺畅。 合同管理下载可以帮助企业提…

    科研百科 2024年8月25日
    31
  • 课题图文设计费

    课题图文设计费 随着现代数字化时代的到来,图文设计行业也迎来了快速发展的阶段。在这个行业中,设计师们需要为各种企业、机构、个人提供各种形式的图文设计服务。然而,对于许多人来说,选择…

    科研百科 2024年10月20日
    0
  • 电力工程项目进度管理

    电力工程项目进度管理 在电力工程项目中,进度管理是非常重要的一环。合理的进度管理不仅可以确保项目按时完成,还可以降低项目的风险,提高项目的效率。本文将探讨电力工程项目进度管理的方法…

    科研百科 2024年5月28日
    95
  • 系统集成项目管理高级

    系统集成项目管理高级 系统集成项目管理高级是指在复杂项目中,如何通过有效的项目管理流程和技术工具,来确保项目的成功交付和实现预期目标。随着信息技术的不断发展和普及,系统集成项目管理…

    科研百科 2024年7月24日
    69
  • 南通项目管理系统哪家好

    南通项目管理系统哪家好 在南通,项目管理系统已经成为现代项目管理中不可或缺的一部分。一个好的项目管理系统可以提高项目的效率,减少错误,提高团队协作,使项目能够按时完成并达到高质量标…

    科研百科 2025年1月6日
    0
  • 科研 在本项目组分工

    科研在本项目组分工 科研是现代科技发展的重要推动力量,而本项目组的任务就是开展各项科研工作,为公司的业务发展提供技术支持。在本项目组中,每个成员都有其独特的职责和任务,以确保项目的…

    科研百科 2024年10月8日
    19