簡體   English   中英

你如何測試你的中斷處理模塊?

[英]How do you test your interrupt handling module?

我有一個中斷處理模塊,它控制嵌入式處理器上的中斷控制器硬件。 現在我想為它添加更多測試。 目前,測試僅測試中斷嵌套是否有效,方法是在ISR中進行兩次軟件中斷,一次是低優先級,另一次是高優先級。 如何進一步測試該模塊?

我建議你嘗試創造其他刺激。

通常,硬件中斷也可以通過軟件(自動測試)或調試器通過設置標志來觸發。 或者通過I / O作為中斷。 或者是定時器中斷。 或者,您可以在單步執行時通過調試器在中斷控制器中設置中斷位。

您可以對不應發生的事情添加一些運行時檢查。 有時候我會選擇設置輸出引腳進行外部監控(如果你有示波器或邏輯分析儀那就很好......)

low_prio_isr(void)
{
    LOW_PRIO_ISR=1;
    if (1 == HIGH_PRIO_ISR)
    { this may never happen. dummy statement to allow breakpoint in debugger }

}

high_prio_isr(void)
{
    HIGH_PRIO_ISR=1
} 

軟件中斷的缺點是時刻是固定的; 總是一樣的指令。 我相信你希望看到它始終有效的證據; 無死鎖。

對於中斷服務程序,我發現代碼評論非常有價值。 最后,您只能測試您想象的情況,並且在某些時候測試的努力將非常高。 眾所周知,ISR難以調試。

我認為提供以下測試很有用: - 低優先級中斷不會中斷isr - 同一優先級中斷不會中斷isr - 高優先級中斷會中斷isr - 堆棧限制內的最大嵌套計數。

您的一些測試可能會作為工具保留在代碼中(因此您可以監視最大嵌套級別。

哦,還有一件事:我一般都設法讓ISR保持如此短暫以至於我可以避免嵌套......如果可以,這將為您帶來額外的簡單性和更高的性能。

[編輯]當然,ISR也需要在系統硬件上進行測試。 除了逐位,逐步的方法,您可能需要證明: - 系統在最大中斷負載下的穩定性(最好是預測的最大負載的幾倍;如果您的115kbps串行驅動器也可以處理2MBps,那么您將會沒問題!) - 啟用/禁用isr的正確時刻,特別是如果系統也進入睡眠模式 - 中斷數。 如果添加機械開關,機械旋轉(在達到穩定狀態之前有數百個斷裂/接觸時刻),可能會令人驚訝

我推薦真正的硬件測試。 中斷處理本質上是隨機的和不可預測的。

使用信號發生器並將方波饋入相應的中斷引腳。 使用多個生成器(或具有多個輸出的生成器)來測試多個IRQ線並驗證優先級處理。

嘗試在信號發生器上上下撥打頻率(改變它們之間的速率),看看會發生什么。 有許多診斷代碼來驗證各種狀態下的中斷控制器的狀態。

替代方案:如果您的平台具有可觸發中斷的計時器,則可以使用它們而不是外部硬件。

我不是嵌入式開發人員,所以我不知道這是否可行,但是如何將處理中斷的代碼與回調注冊機制分離? 這將允許您編寫模擬器代碼激發中斷事件,如你所願...

對於像這樣的東西,我強烈推薦像SPIN模型檢查器 你最終測試算法,而不是代碼,但測試是詳盡的 回到那一天, 我發現了使用這種技術的gdb一個錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM