1. gzyueqian
      13352868059
      首頁 > 新聞中心 > > 正文

      嵌入式操作系統uC/OS-II在電能計量電表中的應用研究

      更新時間: 2008-04-11 14:18:27來源: 粵嵌教育瀏覽量:778

        [摘要]:目前嵌入式系統正在不斷地向智能化、網絡化的方向發展,在實時控制系統中采用嵌入式操作系統已成為當前嵌入式應用系統中的一個發展方向。本文以開發電能計量電表中應用C/OS-II為實例,介紹了將實時嵌入式操作系統C/OS-II移植到目標系統中的方法,分析和研究了在單片機系統中使用嵌入式操作系統的有關問題?!?
      [關鍵詞]:嵌入式操作系統; mC/OS-II; 內核; 實時性; 電能計量電表
      1 引言
        隨著后PC時代和網絡以及通信技術時代的到來,嵌入式操作系統在通信、電子、自動化等領域受已經到了越來越多的關注。因為一個好的嵌入式實時操作系統能夠提高產品的研制效率,縮短產品的開發周期,所以許多生產廠家正在紛紛考慮采用嵌入式操作系統技術來開發自己的產品。
        實時嵌入式操作系統的種類繁多,大體可分為兩種——商用型及免費型。商用型的實時操作系統功能穩定、可靠、有完善技術支持及售后服務,但其昂貴價格限制了它在為數眾多的低端低成本的場合的應用。并且對這些場合來講,一個包含網絡協議核、文件管理,內存管理的操作系統實在顯得過于龐大了。它們需要的僅僅是一個穩定的包含任務管理及進程調度的實時內核,對一個 8位或16位單片機的應用場合,一個代碼長度不超過10KB,占用系統資源不超過10%象mC/OS-II這樣的實時內核是非常適合的。
      2 mC/OS-II 系統簡介
       ?。?61549;mC/OS-II 是由Labrose先生編寫的開放式內核,具有源碼公開,可移植、可固化、可裁剪,穩定性及可靠性高的特點。其內核提供任務調度與管理、時間管理任務同步與通信、內存管理及中斷服務等功能,支持64用戶服務。90%的代碼函數用標準的ANSI C語言書寫,程序可讀性強、移植性好。適合于小型控制系統,具有執行效率高,占用空間小,實時性能優良,可擴展性強的特點,加之它穩定、可靠,現已被廣泛應用在航空、醫療器械、工業控制等領域,被證明是一個成熟穩定的實時內核。
      3 在AT89C51上運行mC/OS-II

        要使用mC/OS-II,首先就必須把這個內核成功地移植到使用的CPU上去。下面就給出在電能計量電表所用的AT89C51上移植mC/OS-II過程。mC/OS-II移植的軟件部分要完成以下工作。

      3.1 與編譯器有關的代碼
        在不同的處理器中有不同的字長,所以必須定義一系列數據類型以確保移植的正確性。在C/OS-II中,不使用C的char、int和long等數據類型,這些都是和編譯器相關的,在AT89C51處理器中,各種數據類型定義如下:
      typedef unsigned char BOOLEAN;
      typedef unsigned char INT8U;
      typedef signed char INT8S;
      typedef unsigned int INT16U;
      typedf signed int INT16S;
      typedef unsigned long INT32U;
      typedef signed long INT32S;
      typedef float FP32;
      typedef double FP64;
      typedef unsigned char OS_STK;
       ?。?61549; mC/OS-II需要先禁止中斷訪問代碼的臨界區,并且在訪問完畢后重新允許中斷。mC/OS-II定義了兩個宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()來禁止和允許中斷。實現方法如下:
      #define OS_ENTER_CRITICAL() EA = 0
      #define OS_EXIT_CRITICAL() EA = 1
      #define OS_STK_GROWTH 0
      #define OS_TASK_SWO 0SCtxSW()
      3.2 4個匯編語言函數
        這部分需要對處理器的寄存器進行操作,所以必須用匯編語言來編寫。 mC/OS-II的移植要求用戶編寫4個簡單的匯編語言函數:OSStarHighRdy(),OSCtxSw(),OSIntCtxSw(),OSTickISR()。
        OSStarHighRdy()在多任務系統啟動函數OSStar()中調用。主要功能是將就緒表中優先級任務的棧指針加載到SP中,并強制中斷返回。這樣就緒的優先級任務就如同從中斷處理返回到運行態一樣,使得整個系統得以運轉。
        OSCtxSw()在任務級任務切換函數中調用。任務級的切換問題是通過發軟中斷命令或依靠處理器執行陷阱指令來完成的。由于AT89C51沒有軟中斷命令或依靠處理器執行陷阱指令,所以用OS_TASK_SW()直接調用OSCtxSw()來完成。
        OSIntCtxSw()通過調用OSIntCtxSw()來從ISR中執行切換功能。具體完成任務是調整堆棧指針,保存當前任務的SP,載入就緒優先級任務的SP,恢復就緒優先級任務的環境變量,中斷返回,從而完成中斷級任務切換。
        OSTickISR()是系統時鐘節拍中斷服務函數。這是一個周期性中斷,為內核提供時鐘節拍,頻率越高系統負荷越重。此外還要編寫6個與操作系統有關的函數,有關這些函數具體功能更詳細的闡述,請參考文獻[1][2]。做完以上工作后,mC/OS-II就可以運行了。
      4 在電能計量電度表中應用mC/OS-II


      免費預約試聽課

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

      
      

      1. 日韩在线不卡免费视频一区 | 亚洲不卡在线精品视频 | 亚洲中文精品久久久久久 | 亚洲一级电影第一页 | 欧美、日本v视频在线播放 亚洲国产一区二区三区啪 一区二图三区国产精品 | 五月天激情视频A级在线版 中文字幕国产在线观看 |