多线程 RTOS 调试
在使用 RTOS 调试的情况下,CLion 提供了 FreeRTOS、 Azure RTOS 和 Zephyr 任务(线程)的视图。 对于 FreeRTOS,您还可以探索 对象 和 堆。
启用 RTOS 线程视图
转到 。
选中 启用 RTOS 集成 复选框并从选项列表中选择:

RTOS 集成旨在适用于任何相关的 运行/调试配置 ,例如 嵌入式 GDB 服务器 或 OpenOCD 下载与运行。
例如,以下是如何使用 QEMU 模拟器设置嵌入式 GDB 服务器配置:

FreeRTOS / Azure RTOS / Zephyr 任务视图
在调试如上所述的配置时,您将在 线程与变量 面板的 调试工具窗口 中看到 FreeRTOS / Azure RTOS / Zephyr 任务的列表。

对于每个任务,变量会显示在 变量 面板中。
RTOS 任务视图也适用于 对称多处理 (SMP)。 处理器核心必须相同并共享相同的内存。
FreeRTOS 对象视图
要探索 FreeRTOS 对象,请切换到 FreeRTOS 对象 选项卡。 任务 表显示了带有状态信息的任务列表; 队列 表显示了当前活动的队列、信号量和互斥量; 定时器 表列出了软件定时器:

要使此选项卡正常工作,请在 FreeRTOSConfig.h 中配置以下定义:
将
configUSE_TRACE_FACILITY设置为 1,以显示任务编号和队列类型。将
configMAX_TASK_NAME_LEN设置为大于零的值,以正确显示任务名称。将
configRECORD_STACK_HIGH_ADDRESS设置为 1,以显示任务堆栈信息。将
configUSE_TRACE_FACILITY和configGENERATE_RUN_TIME_STATS设置为 1,以收集运行时信息(任务表的运行时列)。使用大于零的
configQUEUE_REGISTRY_SIZE和vQueueAddToRegistry()为队列、信号量或互斥量分配名称。 这很有用,因为队列默认没有名称,而任务在创建时会获得名称。
如果缺少某些定义,CLion 将显示警告:

FreeRTOS 堆视图
FreeRTOS 堆 选项卡显示了所有默认 FreeRTOS 内存管理方案的当前堆使用情况和内存块分配。
