使用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月1日 下午5:01
下一篇 2024年5月1日 下午5:12

相关推荐

  • 湘西州市场监督管理局与州非公综合党委开展“党建强企兴村行动 共同促进乡村振兴”活动

    新湖南客户端6月1日讯(通讯员 张帆 彭小苹)5月31日,湘西土家族苗族自治州市场监督管理局联合州非公综合党委,到该局乡村振兴联系点凤凰县禾库镇龙角村,开展“党建强企兴村行动 共同…

    科研百科 2023年9月15日
    84
  • 坚持党建引领 履行社会责任(坚持党建引领 履行社会责任的意义)

    应急救援出动。 □梅书元 驻马店市保安服务有限公司从2002年成立之初的100多人发展到10000余名员工,由单一人防服务发展为集人防、技防、武装押运、劳务派遣、物业管理、机动车驾…

    科研百科 2023年6月3日
    188
  • 社团会议管理系统(社团会议管理)

    社团会议管理 社团会议管理是组织和管理社团活动的重要组成部分。合理的社团会议管理可以帮助社团成员更好地参与和管理活动,同时也可以帮助社团更好地发展和维护良好的人际关系。 在社团会议…

    科研百科 2024年8月31日
    19
  • 工程项目管理单位

    工程项目管理单位 工程项目管理单位是项目管理的重要组成部分,负责项目的规划、组织、实施和监督。工程项目管理单位需要具备专业的知识和技能,以确保项目的顺利进行和达到预期的目标。 工程…

    科研百科 2024年9月22日
    18
  • 国外找计算机科研项目难吗国外找计算机科研项目难吗

    在国外寻找计算机科研项目可能会面临一些挑战,具体来说,这些挑战可能包括: 1. 语言障碍: 外国人可能需要翻译或帮助才能理解项目要求和文档。这可能需要花费额外的时间和精力。 2. …

    科研百科 2024年7月9日
    41
  • 手机项目管理

    手机项目管理:如何有效地管理手机应用程序 随着智能手机的普及,手机项目管理已经成为了一个越来越重要的话题。手机项目管理可以帮助人们更好地管理他们的手机应用程序,提高工作效率和生活质…

    科研百科 2024年5月23日
    48
  • 精工oa协同办公

    精工oa协同办公:让工作更加高效 随着现代办公方式的不断演变,协同办公已经成为了现代企业必不可少的一部分。而精工oa协同办公系统则是协同办公领域中的佼佼者,其高效的协同办公能力能够…

    科研百科 2024年9月25日
    21
  • 注意!抽检已开始!你却还没用上养老管理软件?

    根据五部委做好《关于2020年养老院服务质量建设专项行动工作的通知》,上海已经开始制定本市2020年养老机构服务质量建设专项行动实施方案,据悉武汉市2020年养老机构服务质量建设专…

    2022年6月27日
    105
  • 党建播报|如何管理党员组织关系(党员组织关系的管理)

    本节目由中宣部《党建》杂志社党建网、喜马拉雅联合出品。 如何管理党员组织关系 问:什么是党员组织关系? 答:党员组织关系是指党员对党的基层组织的隶属关系。按照党章规定,每个党员无论…

    科研百科 2024年5月30日
    64
  • 开源低代码建站软件

    开源低代码建站软件是一种能够帮助用户快速搭建网站的工具。随着互联网的快速发展,越来越多的人意识到拥有一个个性化的网站对于个人和企业来说是多么重要。然而,传统的网站建设过程通常需要专…

    科研百科 2024年3月4日
    57