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

      uC/OS-Ⅱ在C167CR單片機上的移植

      更新時間: 2006-02-15 19:17:55來源: 粵嵌教育瀏覽量:3285

        隨著嵌入式系統應用的日益廣泛,RTOS越來越受到嵌入式系統開發人員的青睞,特別是進入20世紀90年代后,RTOS更是逐步確立了在嵌入式系統設計中的主導地位。使用RTOS所帶來的好處是可提高嵌入式系統的可靠性,同時也提高了軟件的開發效率,縮短了開發周期。由于商業化RTOS軟件較高的價格和使用成本(版權費、維護費等)的限制,RTOS在國內的應用并不普遍。

        μC/OS-II是一個的源碼免費的嵌入式RTOS,具有源碼公開、可移植、可固化、可裁減、穩定性和可靠性高的特點。μC/OS-II是基于優先級的占先式(Preemptive)實時多任務內核,多可支持64個任務(其中系統保留8個自用)。由于μC/OS-II是為嵌入式應用編寫的通用軟件,故在具體應用時需根據不同單片機的特點進行移植。μC/OS-II的大部分代碼是用ANSI C編寫的,只有與處理器相關的一部分代碼用匯編語言編寫,所以具有很強的可移植性,可以在大多數8位、16位、32位單片機及數字信號處理器上運行。本文介紹μC/OS-II在Infineon C167CR單片機上的移植技術。

        1 Infineon C167CR單片機簡介

        C167CR單片機是Infineon公司80C166系列單片機中的一款高性能16位微處理器,其時鐘頻率可達25 MHz,片內ROM多達128K,尋址能力16M。C167CR單片機集成度高,具有豐富的片內資源:111個I/O引腳、16級56個中斷、32個捕捉/比較通道、16個A/D轉換通道、4個PMW通道、兩組通用定時器單元、8通道外圍事件控制器、同步/異步串行接口和高速同步串行接口、CAN模塊等。C167CR單片機的內部資源及其C編譯器滿足μC/OS-II的移植條件。

        2 μC/OS-II在C167CR單片機上的移植

        在μC/OS-II的移植中需要修改五個文件:主頭文件INCLUDES.H、系統配置文件OS_CFG.H以及與CPU相關的三個文件(OS_CPU.H、OS_CPU_A.ASM以及OS_CPU_C.C)。移植中使用的編譯器是Keil公司的Keil C166編譯器。五個文件具體內容請見本刊網絡補充版(http://www.dpj.com.cn)。

        3 移植示例

        示例中,共創建了二個任務,其中發送任務SenderTask()以發送消息的形式連續地向發送郵箱中傳送0~9這10個數,當收到接收郵箱的消息之后,就開始發送下一個數字;接收任務ReceiverTask()從發送郵箱中取出數字,從P2口輸出,再延時5 s,而后向接收信箱回送消息。程序清單如下:

      #include "includes.h""
      #define TASK_STK_SIZE 512 /*任務堆棧為1KB*/
      #define N_TASKS 2 /*任務數*/
      OS_STK TaskStk[N_TASKS][TASK_STK_SIZE];
      /*任務堆棧*/
      OS_EVENT pReceiverMailBox; /*接收郵箱*/
      OS_EVENT pSenderMailBox; /*發送郵箱*/
      void ReceiverTask(void *data);
      void SenderTask(void *data);
      /*主程序*/
      void main (void){
      DP2 = 0xffff; /*設置P2口為輸出*/
      OSInit(); /*系統初始化*/
      pReceiverMailBox = OSMboxCreate((void*)0);
      /*創建接收郵箱*/
      pSenderMailBox = OSMboxCreate((void*)0);
      /*創建發送郵箱*/
      OSTaskCreate(ReceiverTask, (void *)0, (void *)&TaskStk[0][TASK_STK_SIZE - 1], 3); /*創建接收任務*/
      OSTaskCreate(SenderTask, (void *)0, (void *)&TaskStk[1][TASK_STK_SIZE - 1], 4); /*創建發送任務*/
      OSStart(); /*啟動系統*/
      }
      /*發送任務*/
      void SenderTask (void *data){
      INT8U count = 0;
      INT8U error;
      data = data;
      while (1){
      for (count=0;count<10;count++){
      OSMboxPost(pSenderMailBox, (void*)&count);
      OSMboxPend(pReceiverMailBox, 0, &error);
      }
      }
      }
      /*接收任務*/
      void ReceiverTask (void *data){
      INT8U *count;
      INT8U error;
      data = data;
      OSTickISRInit();
      while (1) {
      count = (INT8U*)OSMboxPend(pSenderMailBox, 0, &error);
      P2 = *count;
      OSTimeDlyHMSM(0, 0, 5, 0);
      OSMboxPost(pReceiverMailBox, (void*)1);
      }
      }

      免費預約試聽課

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

      
      

      1. 香港日本韩国三级在线视 | 日本特级婬片免费看 | 久久国产午夜精品理 | 又大又粗又猛免费视频久久 | 中文字幕久久激情 | 香港三日本三级三级少妇久久 |