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

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

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

使用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进行嵌入式系统开发

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

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

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

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

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

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

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

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

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

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

使用Visual Studio 进行嵌入式开发

目前vcpkg还没有整合到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进行嵌入式系统开发

构建,部署和调试

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

外围寄存器

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

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

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

下图是步进调试:

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

RTOS 对象视图

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

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

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

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

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

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

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

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

硬件断点限制

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

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

总结

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

最后

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

最近我写了个东西

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

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

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

(0)
上一篇 2023年4月28日 上午9:12
下一篇 2023年4月28日 上午9:28

相关推荐

  • 东华理工大学中子加速器

    东华理工大学中子加速器 中子加速器是一种用于中子加速和探测的高科技设备,广泛应用于核科学、材料科学、化学等领域。东华理工大学是中国著名的综合性大学之一,其材料学院一直致力于材料科学…

    科研百科 2024年11月19日
    7
  • 博士后科研工作站的重要意义

    博士后科研工作站的重要意义 博士后科研工作站是高等教育的重要组成部分,是高校教师进行学术研究和人才培养的重要平台。博士后科研工作站的意义不仅仅在于为教师提供研究机会和发展空间,更在…

    科研百科 2024年10月29日
    1
  • 安得猛士兮守四方——国产EDA公司盘点(国产eda公司有哪些)

    《大风歌》 汉.刘邦 大风起兮云飞扬 威加海内兮归故乡 安得猛士兮守四方 前言 随着中美竞争的急速加剧,半导体/集成电路领域成为了双方竞争的主战场。而在这主战场中,“战火”逐步在向…

    科研百科 2024年5月7日
    59
  • 科研项目数据有时间限制吗(科研项目数据有时间限制吗)

    科研项目数据有时间限制吗? 科研项目中,通常会收集大量的数据来进行分析和研究。然而,这些数据通常有时间限制,例如在一定的时间内收集,存储和共享。这些数据的限制可能会影响研究人员的工…

    科研百科 2024年8月4日
    42
  • 科研项目全周期

    科研项目全周期 科研项目是一项长期而复杂的工作,需要在整个项目生命周期中保持高度的关注和协调。从开始项目计划到最终完成,每个阶段都至关重要,需要密切合作以确保项目的成功。在本文中,…

    科研百科 2024年12月3日
    0
  • 军工科研项目有红方蓝方军工科研项目有红方蓝方

    军工科研项目有红方蓝方 随着时代的发展,军工科研项目越来越受到人们的重视。在军工领域,科研项目的真实性和质量至关重要。然而,随着项目的不断增多,有些科研项目的真实性和可靠性却受到了…

    科研百科 2024年7月9日
    65
  • 协同管理项目系统

    协同管理项目系统: 促进团队协作的关键工具 随着数字化时代的到来,项目管理变得更加复杂和多元化。传统的个人项目管理方法已经无法满足现代项目中的需求,因此,协同管理项目系统成为了现代…

    科研百科 2024年12月11日
    0
  • 科研项目延期结题的原因

    科研项目延期结题的原因 科研项目的延期结题是一个常见的问题,许多科研项目都经历过延期的情况。其中,一些常见的原因包括: 1. 无法完成预期的目标:有些科研项目的目标可能是高不可攀的…

    科研百科 2024年10月12日
    13
  • 保修系统集成项目管理

    保修系统集成项目管理 保修系统集成项目管理是一个非常重要的项目,它涉及到多个部门之间的协作和协调,包括制造商、维修中心、客户等。在这个项目中,需要制定合理的计划,确保项目能够按时完…

    科研百科 2024年12月30日
    0
  • 研究所研发工单

    研究所研发工单 尊敬的领导: 我是XX研究所的一名研发工程师,我最近收到了一份研发工单,需要协助完成一项任务。以下是详细的工单内容: 任务名称:XXX项目 任务描述:该项目是一项针…

    科研百科 2024年12月7日
    3