本篇文章主要介绍了如何创建、构建和调试一个使用Visual Studio和VisualGDB实现在STM32设备上运行的Azure RTOS (ThreadX) 基本项目。
在开始之前,请安装VisualGDB 5.6R3或更高版本。
1. 启动Visual Studio,点击“File->New Project”并找到VisualGDB Embedded Project Wizard:
2. 输入新创建项目的名称和位置,然后单击“Create”继续VisualGDB向导:
3. 在“Project Type”页面上选择默认设置。我们建议使用Advanced CMake项目子系统以获得最佳结果:
4. 在下一页选择ARM工具链并选择您要使用的元件型号:
5. 在示例选择页面上,选择“LEDBlink (AzureRTOS)”示例。它使用与基于FreeRTOS的示例相同的结构,创建2个独立线程,每个线程控制一个LED。您可以配置LED端口/引脚以匹配您的电路板引脚排列,或者直接使用默认值:
6. 在向导的最后一页,选择适用于您的电路板的调试设置,然后单击“Finish”以创建项目:
7. 创建项目后,找到main源文件。请注意它如何为每个线程(LED_Thread1和LED_Thread2)包含一个函数。您可以使用Code Explorer方便地查看特定源文件的大纲,或者查看整个项目中的符号:
8. 按F5构建项目并开始调试。如果您在向导中配置了正确的LED端口/引脚,您将看到LED闪烁。如果没有,您可以通过在Live Watch中找到g_TickCount变量来确认程序正在运行:
9. 暂停Live Watch中的图表视图并检查g_TickCount增加的速率。它应该接近每秒1000个滴答声:
10. 如果观察到的定时器频率不同,请调整tx_initialize_low_level.S文件中的SYSTEM_CLOCK变量以匹配您的电路板的时钟频率:
11. 使用Debug->Break All命令强制程序停止(或者,只需在其中一个线程函数中设置断点)。 VisualGDB将使用我们的开源ThreadX插件(需要自定义版本或更高版本)自动识别和显示ThreadX线程:
12. 您可以在“线程”窗口中选择任何线程,并使用“Call Stack”窗口查看在执行切换到另一个线程之前它到底在做什么。在这个例子中,两个线程都在通过调用tx_thread_sleep()等待:
13. 您可以使用VisualGDB代码资源管理器中的Globals视图快速探索代码(和AzureRTOS)不同部分之间的关系,并找到相关的函数、变量或类型。例如。尝试在代码资源管理器主窗口中搜索TX_THREAD,然后展开详细信息以显示参考。VisualGDB将显示所有具有此类型参数(或字段)的函数和结构:
代码资源管理器还可以快速浏览调用树、继承树或查找分配/删除特定类型的函数。 |