Communitygithub.com

RTOS 除錯

用於除錯 RTOS 問題的技能,可區分排程器狀態、任務堆疊健康度、同步、中斷優先權、時序和資源所有權。從可觀察的 RTOS 狀態開始,再變更優先權或加入延遲。

RTOS 除錯 是什麼?

此技能「RTOS 除錯」專門用於診斷與修復嵌入式系統中即時作業系統(RTOS)相關的複雜問題,例如死結、優先權反轉、看門狗重置或任務未執行等。它提供一套結構化工作流程,從確認排程器啟動開始,依序檢查任務狀態、堆疊與堆積健康度、同步原語(如互斥鎖、佇列)以及中斷優先權規則。此技能支援 FreeRTOS、RT-Thread、Zephyr、ThreadX、CMSIS-RTOS 等多種嵌入式排程器。關鍵優勢在於強制使用可觀測性工具(如追蹤鉤子、高水位標記)代替猜測性延遲,並引導代理人釐清資源所有權與 ISR 安全 API 使用,從而避免常見的除錯陷阱。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add easyzoom/aix-skills

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

RTOS 除錯 是做什麼的?

概述

使用此技能除錯 RTOS 問題,方法是分離排程器狀態、任務堆疊健康度、同步、中斷優先權、時序和資源所有權。從可觀察的 RTOS 狀態開始,再變更優先權或加入延遲。

使用時機

請在以下情況使用此技能:

  • 韌體使用 FreeRTOS、RT-Thread、Zephyr、ThreadX、CMSIS-RTOS 或其他嵌入式排程器。
  • 使用者回報死結、任務餓死、錯過事件、佇列逾時、堆疊溢位、看門狗重置、優先權反轉或任務未執行。
  • 問題涉及 ISR 到任務的信號傳遞、計時器、信號量、互斥鎖、訊息佇列或任務通知。

在確認目標已知可啟動並執行至少部分韌體之前,請勿使用此技能。若已識別出特定的 RTOS,建議優先使用 freertos-kernel-debug、zephyr-integration 或 rt-thread-integration 進行深入的 RTOS 專項除錯。

首要問題

詢問:

  • RTOS 名稱/版本 與 MCU/SoC。
  • 症狀及發生的時機。
  • 任務清單,包含優先權、堆疊大小及主要職責。
  • 是否啟用堆疊溢位檢查、執行時期統計、追蹤或執行緒感知功能。
  • 涉及的中斷來源及其中斷優先權。
  • 記錄檔、斷言、看門狗原因或除錯器任務檢視。

工作流程

  1. 確認排程器已啟動。 驗證系統已到達排程器啟動點,且至少有一個已知任務正在執行。

  2. 擷取任務狀態。 收集任務名稱、狀態、優先權、堆疊高水位標記、CPU/執行時期統計資料及封鎖的物件。

  3. 首先檢查堆疊與堆積。 堆疊溢位與堆積耗盡經常偽裝成隨機的 RTOS 故障。

  4. 檢查同步機制。 找出哪個任務擁有每個互斥鎖、哪個佇列已滿/已空,以及是否從中斷中使用了 ISR 安全 API。

  5. 檢查中斷優先權規則。 確保 ISR 優先權對於 RTOS API 呼叫是合法的,且不會餓死排程器時脈中斷。

  6. 用探針取代猜測。 使用追蹤鉤子、斷言、水位標記、計數器或事件記錄,而不是加入任意的延遲。

檢查事項

  • 每個任務的堆疊高水位標記。
  • 堆積剩餘量/歷來最小剩餘量。
  • 時脈中斷以預期頻率執行。
  • 看門狗餵食任務未被餓死。
  • 互斥鎖所有權及遞迴/非遞迴不匹配。
  • 佇列長度、項目大小、發送/接收逾時。
  • ISR 在必要處使用正確的 FromISR API。
  • 臨界區段短且有界限。
  • 在使用共享資源處存在優先權反轉保護。

驗證

在聲稱 RTOS 有進展之前:

  • 說明 RTOS 狀態、排程器狀態、任務狀態及堆疊/堆積證據。
  • 找出被封鎖或餓死的任務及其等待的物件。
  • 說明中斷優先權對 RTOS API 使用是否合法。
  • 回報任何斷言、看門狗或堆疊溢位鉤子的證據。

常見失敗

  • 在不知道任務為何被封鎖的情況下提高其優先權。
  • 加入延遲來隱藏競爭條件。
  • 從中斷中呼叫非 ISR 安全的 API。
  • 忽略堆疊高水位標記。
  • 在確認佇列項目大小與所有權之前,就除錯佇列負載。

範例

使用者:

FreeRTOS 有個任務偶爾不跑,最後看門狗復位。

代理:

  1. 要求提供任務清單、優先權、堆疊大小、看門狗擁有者及任務狀態。
  2. 檢查高水位標記、堆積、時脈及被封鎖的物件。
  3. 在建議變更優先權之前,驗證 ISR 優先權及佇列/互斥鎖的所有權。

相關技能