新聞中心

        單片機(jī)RTOS隨想曲

        作者: 時(shí)間:2012-10-16 來源:網(wǎng)絡(luò) 收藏

        本文標(biāo)為隨想曲,是說明這不是一篇結(jié)構(gòu)嚴(yán)謹(jǐn)?shù)奈恼?而是想到哪寫到哪,希望讀者能喜歡這種風(fēng)格。以下為本文正文:
        對(duì)于搞的特別用8051系列工程師來說,談到,很多時(shí)候會(huì)問一句:“為什么要用就這一點(diǎn)資源,使用能保證效率嗎?”
        對(duì)于這個(gè)問題,我會(huì)反問:“你用單片機(jī)的目的是什么?是為了用單片機(jī)的,單片機(jī)的匯編編程甚至于用單片機(jī)的二進(jìn)制指令編程?”上個(gè)世紀(jì)80年代,工程師用二進(jìn)制指令給Z80編程,現(xiàn)在還有誰(shuí)在用?現(xiàn)在還有人死抱著匯編不放,但越來越多的人工程師使用(我起初也是使用匯編的),為什么?因?yàn)槲覀兊哪康氖窃谟邢薜臅r(shí)間甚至是不充足的時(shí)間內(nèi)把項(xiàng)目保質(zhì)保量的完成!使用是么工具和方法是次要的(如果你的項(xiàng)目以成本放在第一位,則另當(dāng)別論,這時(shí),也是要考慮開發(fā)時(shí)間的)。時(shí)間就是金錢啊,一個(gè)產(chǎn)品在單片機(jī)上增加些許成本是可以接受的。況且,使用8051系列單片機(jī)時(shí),單片機(jī)資源也常有富余,CPU一般情況也只是空轉(zhuǎn),這就為它使用RTOS創(chuàng)造了條件。
        那么,使用RTOS的好處呢?我舉一個(gè)例子吧。假設(shè)我們編一個(gè)串行通訊程序,通訊協(xié)議如下:
        數(shù)據(jù)包長(zhǎng)度為NBYTE,起始字節(jié)為STARTBYTE1,STARTBYTE2,最后一個(gè)字節(jié)為檢驗(yàn)和,中間字節(jié)不可能出現(xiàn)連續(xù)出現(xiàn)STARTBYTE1,STARTBYTE2。
        第一種方法,在中斷中處理協(xié)議:

        unsigned char Buf[NBYTE-2];
        bit GetRight=0;
        void comm(void) interrupt 4
        //"串行口中斷"
        {
        static unsigned char Sum,Flag=0,i;
        unsigned char temp;

        if(RI==1)
        {
        RI=0;
        temp=SBUF;
        switch(Flag)
        {
        case 0:
        if(temp==STARTBYTE1)
        {
        Flag=1;
        }
        break;
        case 1:
        if(temp==STARTBYTE2)
        {
        Sum=STARTBYTE1+STARTBYTE2;
        i=0;
        Flag=2;
        break;
        }
        if(temp==STARTBYTE1) break;
        Flag=0;
        break;
        case 2:
        if(temp==STARTBYTE1)
        {
        Flag=3;
        break;
        }
        Sum+=temp;
        if((i>=(NBYTE-3))Sum==0)
        {
        GetRight=1;
        Flag=0;
        break;
        }
        Buf[i++]=temp;
        break;
        case 3:
        if(temp==STARTBYTE2)
        {
        Sum=STARTBYTE1+STARTBYTE2;
        Flag=2;
        i=0;
        break;
        }
        Sum+=STARTBYTE1;
        if((i>=(NBYTE-3))Sum==0)
        {
        GetRight=1;
        Flag=0;
        break;
        }
        Buf[i++]=STARTBYTE1;
        if(temp==STARTBYTE1)
        {
        break;
        }
        Sum+=temp;
        if((i>=(NBYTE-3))Sum==0)
        {
        GetRight=1;
        Flag=0;
        break;
        }
        Buf[i++]=temp;
        Flag=2;
        break;
        }
        }
        }


        上一頁(yè) 1 2 下一頁(yè)

        關(guān)鍵詞: 單片機(jī) RTOS C編程

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 芜湖市| 公安县| 河西区| 长沙县| 班玛县| 大邑县| 伊春市| 仪陇县| 博客| 新乡市| 息烽县| 鹰潭市| 新余市| 德安县| 太和县| 南陵县| 扎鲁特旗| 铁岭县| 浙江省| 棋牌| 神木县| 景洪市| 泰和县| 屏边| 高要市| 富裕县| 宣威市| 鹤岗市| 昭通市| 福安市| 米脂县| 宜章县| 长春市| 沅陵县| 阿拉尔市| 四川省| 秀山| 汝城县| 西昌市| 阿勒泰市| 武安市|