• <tbody id="wslfv"><pre id="wslfv"></pre></tbody>
    <span id="wslfv"></span>
    <tbody id="wslfv"><pre id="wslfv"></pre></tbody>
    <th id="wslfv"><track id="wslfv"><rt id="wslfv"></rt></track></th>

    <li id="wslfv"><acronym id="wslfv"></acronym></li>
    更多課程 選擇中心

    嵌入式培訓
    達內IT學院

    400-111-8989

    嵌入式:對“時間觸發編程模式”的改進

    • 發布:嵌入式培訓
    • 來源:嵌入式資訊
    • 時間:2020-09-01 14:35

    上一篇咱們談到了,FFT運算在這種編程模式下是必須進行有效的拆分,否則就必須提高CPU的檔次或使用可剝奪型的搶先式RTOS,但是這勢必會造成系統成本的增加。那么有沒有更好的解決辦法呢?

    辦法就是對“時間觸發編程模式”進行改進,使之在不提高硬件成本的情況下,使編程人員更直觀地定義任務,減少任務特性對系統程序結構的沖擊,使程序結構簡單明了并提高系統的實時響應速度。根據多年嵌入式系統編程的經驗,通常嵌入系統的任務可以劃分成3種類型:

    (1)及時型任務;

    (2)周期型任務;

    (3)背景型任務;

    及時型任務的特點:這類任務是事件觸發型的,一旦事件發生,系統必須在限定的時間內進行響應,對這類任務,最自然的方法就是使用中斷來完成,即定義成“前后臺方式”中的后臺任務。

    周期型任務的特點:這類任務是時間觸發式周期型的,系統必須保證在指定的周期內執行任務,“時間觸發編程模式”可以很好地滿足這類任務的需求。

    背景型任務的特點:這類任務是非實時型的,實時性不是非常重要,系統在運行過程中可隨時中斷這類任務以便執行前兩類任務,系統只要能充分利用資源盡最大可能快速完成這類任務即可,這類任務最適合定義成“前后臺方式”中的前臺任務。

    根據以上任務分類,對“時間觸發編程模式”的改進可概括成以下需求:

    (1)任務分3類,1類任務優先級最高,3類任務優先級最低;

    (2)高優先級的任務可中斷低優先級任務的執行,同級的任務之間不可相互剝奪。

    (3)實際設計中為提高系統的可預測性,應盡量減少1類任務的數量及1類任務的執行時間。

    (4)為降低系統資源的占用,系統不給任務劃分單獨的堆棧空間。

    以上改進的本質是設計一個3優先級的簡單的任務調度機制,高優先級的任務可中斷低優先級的任務,同優先級的任務之間不能相互剝奪,該調度機制不為每個單獨的任務保存任務上下文和單獨的堆棧,這樣可以減少該編程模式對系統資源的需求。

    可剝奪式RTOS中的一個高優先級任務中斷一個低優先級的任務時,會保存好低優先級任務的上下文并把該低優先級任務的局部變量保存在本任務單獨的堆棧中,如果系統不給任務分配單獨的堆棧,如何保證高優先級任務退出后低優先級任務執行環境的恢復呢?

    對這個問題,可以借鑒中斷的處理機制用以下辦法予以解決:

    (1)在系統中設計一個定時中斷函數,該函數的功能就是執行周期性任務的調度,該定時中斷在所有中斷中優先級最低;

    (2)在系統中設計另一個定時中斷函數,該函數的功能是刷新周期型任務的任務管理隊列,為任務調度提供支持,本定時中斷函數的優先級在系統中次低;

    (3)周期型任務就是一個函數,該函數入口的第一個操作是開中斷(問:這個中斷指的是觸發及時性任務的中斷,那么在周期性任務外,是開還是關?如果是開,),允許任務執行期間被中斷以便響應及時型任務。

    (4)背景型任務就是在主函數超級循環中執行的代碼,該代碼可隨時被及時型和周期型任務中斷,當系統沒有及時型任務和周期型任務時才循環執行背景型任務的代碼。

    通過以上措施,“改進型時間觸發編程模式”的程序結構如下:

    /*--------------------主函數-----------------------*/

    Void main(void)

    {

    SCH_Init();//設置調度器

    SCH_Add_Task(任務函數名,任務調度延遲,任務調度周期);//將任務加入調度器的任務隊列

    SCH_Start();//刷新任務隊列

    while(1)

    {

    背景型任務1;

    ………

    背景型任務n;

    }

    }

    /*-------------------次低優先級定時中斷函數---------------------*/

    Void SCH_Update(void) interrupt

    {

    //刷新任務隊列

    }

    /*-------------------最低優先級的定時中斷函數---------------------*/

    Void SCH_Dispatch_Tasks(void) interrupt

    {

    //調度周期型任務

    }

    /*-------------------周期型任務典型結構---------------------*/

    Void SCH_Cycle_Task1(void)

    {

    //開中斷 /*此函數中可以靠中斷觸發來執行及時性任務*/

    //執行任務

    return;//任務返回

    }

    結語

    使用“改進型時間觸發編程模式”進行小型嵌入式系統編程,就像使用RTOS進行編程一樣,設計者規劃好任務后,就可以專心于每個任務的設計,任務對處理器時間的占用可以由系統統一管理,減少任務之間的耦合,使產品的程序設計和改動都變得簡潔清楚。使用該編程模式很好地解決了壁裝式智能配電儀表所面臨的復雜的設計問題,證明該方法簡單有效。

    目前該設計模式僅僅設計了任務調度器,任務間的變量傳遞還需要使用全局變量,如果能加入信號量和消息機制,那么該模式將更加完善,會使低成本的小型嵌入式系統的編程更加方便和清晰。

    最后,還內嵌入式培訓機構還是要提醒每一個it愛好者:如果你想要在短時間內快速入門,順利掌握一門技術,建議還是認真學習視頻。多練習,多動手。

    版權聲明:轉載文章來自公開網絡,版權歸作者本人所有,推送文章除非無法確認,我們都會注明作者和來源。如果出處有誤或侵犯到原作者權益,請與我們聯系刪除或授權事宜。

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:嵌入式:傳統編程結構的局限性
    下一篇:學嵌入式這么久還沒搞懂Linux內核?

    單片機:寫1清零,寫0清零,有什么區別?

    嵌入式工程師一定不要亂用全局變量

    嵌入式培訓靠譜嗎?就業怎么樣?

    新手如何學習單片機?

    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    欧美一级高清片,一级欧美免费大片视频,欧美三级在线电影免费 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>