1. gzyueqian
      13352868059

      嵌入式開發(fā):RTOS調(diào)試—當(dāng)CPU有太多事情要做的時(shí)候

      更新時(shí)間: 2022-11-19 15:25:39來源: 粵嵌教育瀏覽量:6626

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

        在具有固定優(yōu)先級(jí)的場(chǎng)景中,開發(fā)人員需要在創(chuàng)建任務(wù)時(shí)為每個(gè)任務(wù)分配一個(gè)運(yùn)行時(shí)優(yōu)先級(jí)。顯然,高優(yōu)先級(jí)任務(wù)應(yīng)該總是在低優(yōu)先級(jí)任務(wù)之前執(zhí)行,但是當(dāng)?shù)蛢?yōu)先級(jí)任務(wù)收到的CPU時(shí)間太少而無法完成任務(wù)時(shí),你可能會(huì)遇到資源匱乏問題。這可以在許多方面表現(xiàn)出來,例如,設(shè)備可能在大多數(shù)時(shí)間都工作正常,但有時(shí)會(huì)變得沒有反應(yīng)。

        一個(gè)簡單的解決方法是提高受影響任務(wù)的優(yōu)先級(jí),但是這種想法最終會(huì)使優(yōu)先級(jí)變得無用,因?yàn)槊總€(gè)任務(wù)都會(huì)變成“最高優(yōu)先級(jí)”。相反,要非常小心哪些任務(wù)具有高調(diào)度優(yōu)先級(jí):將其保留給可預(yù)測(cè)的任務(wù),以類似“每x毫秒”的循環(huán)模式執(zhí)行,并且理想情況下,與循環(huán)間隔相比,執(zhí)行時(shí)間也要短。

        

        保持關(guān)鍵部分較小

        因此,在嵌入式開發(fā)中,外部事件(如用戶按下按鈕或網(wǎng)絡(luò)流量)的處理程序應(yīng)該以相對(duì)較低的優(yōu)先級(jí)執(zhí)行,因?yàn)楦鶕?jù)定義,這些事件幾乎都是不規(guī)則事件,并且可以在任何時(shí)候調(diào)用處理程序。毫無疑問,執(zhí)行時(shí)間長的任務(wù)也應(yīng)該以低優(yōu)先級(jí)執(zhí)行。

        “但是,等等,”你現(xiàn)在可能會(huì)想,“我有時(shí)間關(guān)鍵的中斷服務(wù)例程,需要大量的CPU時(shí)間來移動(dòng)所有的數(shù)據(jù)。”在這種情況下,最好的解決方案是使用DMA等硬件功能來卸載處理器內(nèi)核,但在其他情況下,將這種處理分成幾個(gè)任務(wù)并在不同階段使用不同的優(yōu)先級(jí)通常是一個(gè)好主意。將真正時(shí)間關(guān)鍵的東西隔離在一個(gè)小的、高優(yōu)先級(jí)的任務(wù)中,并讓該任務(wù)提醒一個(gè)中等優(yōu)先級(jí)的任務(wù)來完成大部分處理。你可能還有第三個(gè)階段,在低優(yōu)先級(jí)的任務(wù)中實(shí)現(xiàn)。

        當(dāng)任務(wù)沒有更多的工作要做時(shí),讓它們進(jìn)入睡眠狀態(tài)是非常重要的。你應(yīng)該避免輪詢和其他形式的繁忙等待;畢竟,這無異于浪費(fèi)處理器時(shí)間。完成后,你的任務(wù)應(yīng)該延遲自己或等待RTOS事件(例如,信號(hào)量信號(hào)),因?yàn)檫@將允許RTOS在任務(wù)等待時(shí)以較低的優(yōu)先級(jí)調(diào)度任務(wù)。睡眠任務(wù)在適當(dāng)?shù)臅r(shí)候被RTOS喚醒。

        單調(diào)速率調(diào)度

        如果你有一個(gè)非常關(guān)鍵的系統(tǒng),你可能想研究一下叫做單調(diào)速率調(diào)度(有效值)。這是一種正式的技術(shù),用于計(jì)算一組任務(wù)的響應(yīng)時(shí)間,給定它們各自的執(zhí)行時(shí)間。在分析過程中,根據(jù)任務(wù)的執(zhí)行時(shí)間為任務(wù)分配優(yōu)先級(jí),以便最快的任務(wù)以最高的優(yōu)先級(jí)運(yùn)行。

        在嵌入式開發(fā)中RMS可以向你正式保證任務(wù)饑餓不會(huì)發(fā)生,或者從另一個(gè)角度來看,告訴你系統(tǒng)需要多少處理能力來避免饑餓。另一方面,你需要有關(guān)于你的任務(wù)的非常好的信息——執(zhí)行時(shí)間、周期等等——來進(jìn)行分析。

      免費(fèi)預(yù)約試聽課

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

      
      

      1. 亚洲乱码中文字幕在线2021 | 又大又黄又爽在线观看免费视频 | 日本中文一二区高清精品在线 | 亚洲色成中文字幕在线 | 一本到国产在线不卡免费观看 | 日韩亚洲中文字幕永久在线 |