阿里巴巴|使用Visual Studio进行嵌入式系统开发( 二 )



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

至此 , 我们就已经在Visual Studio中打开了例子项目 , 就和其他CMake项目一样 。 Visual Studio可以通过预定义好的CMakePresets文件来运行CMake编译过程 。
和往常一样 , 可以使用Visual Studio来编写嵌入式代码 。 在这个Azure RTOS项目中 , 我们会展示代码导航 , IntelliSense , 构建 , 部署和调试等功能 。 我们还会演示新的寄存器诊断支持和RTOS对象视图 。
代码导航和IntelliSense【阿里巴巴|使用Visual Studio进行嵌入式系统开发】通过Ctrl+T可以打开”Go to All and type”按钮 , 然后选择对应的按钮进行代码导航 。 请注意 , 我们可以将光标悬浮在这个函数上 , 然后它会展开TIM3->CCR1这个寄存器的值 , 如下图所示:

构建 , 部署和调试下面我们演示如何在RGB_LED_SET_R()这个函数上设置断点 。
要查看如何控制启动 , 请选择查看解决方案资源管理器中的所有文件并打开 .vs\\launch.vs.json 。你可以看到 miDebuggerPath 设置为使用 arm-none-eabi-gdb , 而 debugServerPath 设置为使用 debugServerArgs 中的配置脚本调用 openocd 。用于描述外设寄存器的信息由 MCU 制造商在我们用 svdPath 指向的 SVD 文件中提供 。该项目被配置在入口处中断 , 具有属性 stopAtConnect 。
现在 , 将你的开发板插入 PC(并安装 ST-LINK 驱动程序) , 将调试目标设置为 Launch , F5 将使用 vcpkg 获取的 openocd 进行工作 , 以刷新和调试连接的电路板 。执行在入口函数处停止 , 所以在这里我们看到了它的汇编代码 。我们还可以通过转到菜单 Debug > Windows > Disassembly 来查看反汇编 , 如下图所示:

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

下图是步进调试:

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

有关这个的解释请看下面的描述:
“实时操作系统是为应用程序提供服务和管理处理器资源的系统软件 。这些资源包括处理器周期、内存、外设和中断 。实时操作系统的主要目的是在嵌入式软件必须执行的各种任务之间分配处理时间 。这通常涉及将软件分成多个部分 , 通常称为“任务”或“线程” , 并创建一个运行环境 , 为每个线程提供自己的虚拟微处理器(“多线程”) 。基本上 , 虚拟微处理器由一组虚拟的微处理器资源组成 , 例如寄存器组、程序计数器、堆栈存储区和堆栈指针 。线程仅在执行时才使用物理微处理器资源 , 但每个线程都保留这些资源内容的副本 , 就好像它们是自己的私有资源(线程的“上下文”) 。 ”
因此 , 理想情况下 , 对于嵌入式开发 , 你将拥有可以向您显示有关这些 RTOS 对象的信息的视图 。要查看新的可用 RTOS 对象视图 , 请转到菜单 Debug > Windows > RTOS Objects 。在这里你将看到 ThreadX 提供的对象的选项 , 在这里我们将选择线程 。

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