• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 一個搶先式“裸奔“系統的設計

    一個搶先式“裸奔“系統的設計

    作者: 時間:2012-12-16 來源:網絡 收藏

    摘要:在一些資源比較緊張的中,使用RTOS有時未必能夠較好地滿足系統較高的實時性要求。在軟件設計時,可以借鑒搶先式RTOS實時調度內核的方法,實現更為高效的任務調度算法,從而實現系統更高的實時性要求。
    關鍵詞:

    引言
    這是2007年筆者在基于的工控系統里采用的軟件技術。系統中有兩個以主從方式通過I2C總線進行數據通信的節點,作為I2C總線的從機節點,因MCU性能限制了數據傳輸速率,因而每次通過總線傳輸30個字節的數據需要持續占用幾十ms的時間。由于在進行I2C總線通信的這段時間里,系統將不能響應輸入和改變輸出(類似系統停頓),這么長的時間延遲對于有較高實時要求的工控系統顯得難于容忍。
    為此,最初考慮解決問題的辦法有3個:
    ①打斷和拆分數據包,采用多次傳輸的辦法。這樣做不但需要修改從機的軟件,多個數據包的連接又讓軟件變得復雜起來,所以這不是個很好的辦法。
    ②由于I2C總線在進行數據傳輸中,波特率較低,存在大量短時delay(),可以采用定時中斷,在定時中斷中只變換一次電平后就返回,從而在后臺完成數據發送。但這樣就導致中斷服務中必須執行一個很龐大的狀態機判斷,中斷服務中大量的判斷也非常耗時耗力,且調試也不方便。
    ③采用RTOS技術,但在80C51系統上使用RTOS,再精練的實時調度,每個tick的時間都很難低于1 ms。經測試,I2C總線傳輸中途遇到1 ms以上的傳輸中斷,會產生總線超時錯誤,因而在本系統中即使采用RTOS也未必能很好地解決問題。
    通過一段時間對RTOS的分析和研究,最后在80C51的裸奔系統中嵌入特別定制的精練的來完成主要任務和I2C總線任務的并行執行,最終獲得了很好的效果。
    下面就來詳細地講述這個定制的的編程技巧。

    1 I2C總線通信子程序
    對I2C總線的時序在此就不作介紹了,下面是部分基于Keil C51模擬主I2C總線的通信子程序代碼如下:
    a.JPG
    b.JPG
    上面是基于80C51模擬I2C總線的通信程序,其中的HIGH、LOW是1、0的宏定義,idelay()提供時序要求的一段時間的延時。
    不難看出,這和通常的模擬I2C總線的通信子程序完全一樣。事實上,我也是直接使用了以前的子程序。


    上一頁 1 2 3 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 萍乡市| 隆化县| 新田县| 襄樊市| 涿州市| 镇雄县| 昆山市| 澄江县| 沁源县| 巴塘县| 凌海市| 林州市| 德兴市| 谢通门县| 长春市| 白河县| 慈利县| 广丰县| 兴仁县| 潮州市| 吴忠市| 枣强县| 平罗县| 凌云县| 应用必备| 广丰县| 光泽县| 来安县| 上蔡县| 辽阳市| 余姚市| 清河县| 双柏县| 西城区| 斗六市| 青田县| 抚州市| 金川县| 剑阁县| 华宁县| 界首市|