色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>單片機編程>

單片機RTOS隨想曲

大小:56 人氣: 2010-02-22 需要積分:0
ejlwj的空間

用戶級別:注冊會員

貢獻文章:

貢獻資料:

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

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;
??????? }
??? }
}

??? 第二種方法,使用隊列
??? 中斷函數:
??????? void comm(void) interrupt 4
//"串行口中斷"
{
??? if(RI==1)
??? {
??????? RI=0;
??????? SBUF入隊;
??? }
}

??? 主程序不斷調用的函數:
unsigned char Buf[NBYTE-2];

??????? unsigned char ReadSerial(unsigned char *cp)
{
??? unsigned char i;
??? unsigned char temp,Sum;

??? temp=隊列中數據個數;
??? if(temp<(NBYTE)) return 0;
??? 出隊temp;
??? if(temp!=STARTBYTE1) return 0;
??? temp=隊列首字節;
??? if(temp!=STARTBYTE2) return 0;
??? 出隊temp;
??? sum=STARTBYTE1+STARTBYTE2;
??? for(i=0;i??? {
??????? temp=隊列首字節;
??????? if(temp==STARTBYTE1)
??????? {
???????????? temp=隊列次首字節;
???????????? if(temp==STARTBYTE2) return 0;
??????? }
??????? 出隊temp;
??????? *cp++=temp;
??????? Sum+=temp;
??? }
??? temp=隊列首字節;
??? Sum+=temp;
??? if(Sum!=0) return 0;
??? 出隊temp;
??? return 1;
}

??? 第三種方法,使用RTOS
??? 中斷函數:
??????? void comm(void) interrupt 4
//"串行口中斷"
{
??? OS_INT_ENTER();
??? if(RI==1)
??? {
??????? RI=0;
??????? OSIntSendSignal(RECIVE_TASK_ID);
??? }
??? OSIntExit();
}

?? ID為RECIVE_TASK_ID的任務
??? void Recuve(void)
{
??? unsigned char temp,temp1,Sum,i;

??? OSWait(K_SIG,0);
??? temp=SBUF;
??? while(1)
??? {
??????? while(1)
??????? {
??????????? OSWait(K_SIG,0);
??????????? temp1=SBUF;
??????????? if((temp==STARTBYTE1)&&(temp1==STARTBYTE2)) break;
??????????? temp=temp1;
??????? }
??????? Sum=STARTBYTE1+STARTBYTE2;

非常好我支持^.^

(0) 0%

不好我反對

(0) 0%

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      主站蜘蛛池模板: 国内精品视频久久久久免费| www国产av偷拍在线播放| 一个人看的WWW高清电影| 成年人视频免费在线观看| 麻豆官网入口| 最近中文字幕2019国语4| 久久精品视频uu| 亚洲青青草| 九九久久国产精品大片| 亚洲影院在线播放| 久久99精品国产免费观看| 妖精视频免费看| 久久午夜一区二区| 总攻催眠受的高h巨肉np| 快穿之诱受双性被灌满h| 2019午夜福利757视频第12集| 两性色午夜视频免费国产| 6080伦理久久亚洲精品| 欧美hdxxxx| 动漫美女被吸奶| 午夜人妻理论片天堂影院| 国产毛片女人18水多| 亚洲日韩中文字幕区| 久久在精品线影院| a视频免费在线| 少妇高潮惨叫久久久久久欧美| 国产青青草原| 伊人久久大香线蕉综合亚洲| 免费视频精品38| 国产不卡一卡2卡三卡4卡网站| 亚洲AV无码一区二区三区牛牛| 妓女嫖客叫床粗话对白| 3dbdsm变态videos高清| 日本综艺大尺度无删减版在线| 国产精品大全国产精品| 亚洲区视频| 暖暖 免费 高清 日本视频大全| 成人毛片免费在线观看| 胸大的姑娘中文字幕视频| 久久视频精品38在线播放 | 麻豆一区二区三区蜜桃免费|