1. gzyueqian
      13352868059

      嵌入式開發:RTOS調試—當CPU有太多事情要做的時候

      更新時間: 2022-11-19 15:25:39來源: 粵嵌教育瀏覽量:6743

        在嵌入式開發中,在使用多任務處理的嵌入式系統中,你可能會遇到某些任務運行緩慢或根本不運行的情況。這叫做任務饑餓(受影響的任務缺乏CPU時間),發生這種情況的原因有很多;今天我們來看看一個特殊的原因——一個固定的優先級計劃,其中任務優先級碰巧是錯誤的,或者至少是不合適的。

        在具有固定優先級的場景中,開發人員需要在創建任務時為每個任務分配一個運行時優先級。顯然,高優先級任務應該總是在低優先級任務之前執行,但是當低優先級任務收到的CPU時間太少而無法完成任務時,你可能會遇到資源匱乏問題。這可以在許多方面表現出來,例如,設備可能在大多數時間都工作正常,但有時會變得沒有反應。

        一個簡單的解決方法是提高受影響任務的優先級,但是這種想法最終會使優先級變得無用,因為每個任務都會變成“最高優先級”。相反,要非常小心哪些任務具有高調度優先級:將其保留給可預測的任務,以類似“每x毫秒”的循環模式執行,并且理想情況下,與循環間隔相比,執行時間也要短。

        

        保持關鍵部分較小

        因此,在嵌入式開發中,外部事件(如用戶按下按鈕或網絡流量)的處理程序應該以相對較低的優先級執行,因為根據定義,這些事件幾乎都是不規則事件,并且可以在任何時候調用處理程序。毫無疑問,執行時間長的任務也應該以低優先級執行。

        “但是,等等,”你現在可能會想,“我有時間關鍵的中斷服務例程,需要大量的CPU時間來移動所有的數據?!痹谶@種情況下,最好的解決方案是使用DMA等硬件功能來卸載處理器內核,但在其他情況下,將這種處理分成幾個任務并在不同階段使用不同的優先級通常是一個好主意。將真正時間關鍵的東西隔離在一個小的、高優先級的任務中,并讓該任務提醒一個中等優先級的任務來完成大部分處理。你可能還有第三個階段,在低優先級的任務中實現。

        當任務沒有更多的工作要做時,讓它們進入睡眠狀態是非常重要的。你應該避免輪詢和其他形式的繁忙等待;畢竟,這無異于浪費處理器時間。完成后,你的任務應該延遲自己或等待RTOS事件(例如,信號量信號),因為這將允許RTOS在任務等待時以較低的優先級調度任務。睡眠任務在適當的時候被RTOS喚醒。

        單調速率調度

        如果你有一個非常關鍵的系統,你可能想研究一下叫做單調速率調度(有效值)。這是一種正式的技術,用于計算一組任務的響應時間,給定它們各自的執行時間。在分析過程中,根據任務的執行時間為任務分配優先級,以便最快的任務以最高的優先級運行。

        在嵌入式開發中RMS可以向你正式保證任務饑餓不會發生,或者從另一個角度來看,告訴你系統需要多少處理能力來避免饑餓。另一方面,你需要有關于你的任務的非常好的信息——執行時間、周期等等——來進行分析。

      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 三上悠亚在线亚洲网站 | 亚洲另类在线观看 | 亚洲中日韩一区 | 亚洲午夜福利视频网 | 亚洲色大成网站在线观看 | 午夜在线观看的那种网站 |