新聞中心

單片機RTOS隨想曲

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

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


上一頁 1 2 下一頁

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

評論


相關(guān)推薦

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

關(guān)閉