1. gzyueqian
      13424082685

      uC/OS-Ⅱ在C167CR單片機(jī)上的移植

      更新時(shí)間: 2006-02-15 19:17:55來(lái)源: 粵嵌教育瀏覽量:3554

        隨著嵌入式系統(tǒng)應(yīng)用的日益廣泛,RTOS越來(lái)越受到嵌入式系統(tǒng)開發(fā)人員的青睞,特別是進(jìn)入20世紀(jì)90年代后,RTOS更是逐步確立了在嵌入式系統(tǒng)設(shè)計(jì)中的主導(dǎo)地位。使用RTOS所帶來(lái)的好處是可提高嵌入式系統(tǒng)的可靠性,同時(shí)也提高了軟件的開發(fā)效率,縮短了開發(fā)周期。由于商業(yè)化RTOS軟件較高的價(jià)格和使用成本(版權(quán)費(fèi)、維護(hù)費(fèi)等)的限制,RTOS在國(guó)內(nèi)的應(yīng)用并不普遍。

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

        1 Infineon C167CR單片機(jī)簡(jiǎn)介

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

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

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

        3 移植示例

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

      #include "includes.h""
      #define TASK_STK_SIZE 512 /*任務(wù)堆棧為1KB*/
      #define N_TASKS 2 /*任務(wù)數(shù)*/
      OS_STK TaskStk[N_TASKS][TASK_STK_SIZE];
      /*任務(wù)堆棧*/
      OS_EVENT pReceiverMailBox; /*接收郵箱*/
      OS_EVENT pSenderMailBox; /*發(fā)送郵箱*/
      void ReceiverTask(void *data);
      void SenderTask(void *data);
      /*主程序*/
      void main (void){
      DP2 = 0xffff; /*設(shè)置P2口為輸出*/
      OSInit(); /*系統(tǒng)初始化*/
      pReceiverMailBox = OSMboxCreate((void*)0);
      /*創(chuàng)建接收郵箱*/
      pSenderMailBox = OSMboxCreate((void*)0);
      /*創(chuàng)建發(fā)送郵箱*/
      OSTaskCreate(ReceiverTask, (void *)0, (void *)&TaskStk[0][TASK_STK_SIZE - 1], 3); /*創(chuàng)建接收任務(wù)*/
      OSTaskCreate(SenderTask, (void *)0, (void *)&TaskStk[1][TASK_STK_SIZE - 1], 4); /*創(chuàng)建發(fā)送任務(wù)*/
      OSStart(); /*啟動(dòng)系統(tǒng)*/
      }
      /*發(fā)送任務(wù)*/
      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);
      }
      }
      }
      /*接收任務(wù)*/
      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);
      }
      }

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

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

      
      

      1. 亚洲手机在线人成网站播放 | 日韩一区二区三区中文在线视频 | 亚洲成在线免费观看 | 亚洲精品美日韩免费专区 | 亚洲精品成人AV在线导航 | 亚洲另类久久久精品 |