国产精品2022不卡在线观看|青草国产福利视频免费观看|亚洲天堂日韩在线|日日摸夜夜添夜夜添97|亚洲伊人久久大香线蕉av|午夜性爽快免费视频播放

聯(lián)系我們

銷(xiāo)售直撥
     025-85550202;
     025-85550520;


master@csch.com.cn

技術(shù)咨詢(xún):
     025-85550520

duan@csch.com.cn

售后服務(wù)專(zhuān)線(xiàn):

     15251851604    

wu_yuyang@csch.com.cn

傳 真:025-85550303


深圳市中霍電子技術(shù)有限公司
地址:深圳市龍華新區龍華街道牛地埔村美滿(mǎn)圓小區
聯(lián)系人:顏安軍/副總
Mobile:18038070895
E-mail: szyanaj@csch.com.cn  
 

單片機就那點(diǎn)資源,為啥還要用RTOS?

要用RTOS?單片機就這一點(diǎn)資源,使用RTOS能保證效率嗎?”


對于這個(gè)問(wèn)題,我會(huì )反問(wèn):“你用單片機的目的是什么?是為了用單片機的C編程,單片機的匯編編程甚至于用單片機的二進(jìn)制指令編程?”上個(gè)世紀80年代,工程師用二進(jìn)制指令給Z80編程,現在還有誰(shuí)在用?現在還有人死抱著(zhù)匯編不放,但越來(lái)越多的人工程師使用C編程(我起初也是使用匯編的),為什么?因為我們的目的是在有限的時(shí)間甚至是不充足的時(shí)間內把項目保質(zhì)保量的完成!使用什么工具和方法是次要的(如果你的項目以成本放在第 一位,則另當別論,這時(shí),也是要考慮開(kāi)發(fā)時(shí)間的)。時(shí)間就是金 錢(qián)啊,一個(gè)產(chǎn)品在單片機上增加些許成本是可以接受的。況且,使用8051系列單片機時(shí),單片機資源也常有富余,CPU一般情況也只是空轉,這就為它使用RTOS創(chuàng )造了條件。


那么,使用RTOS的好處呢?我舉一個(gè)例子吧。假設我們編一個(gè)串行通訊程序,通訊協(xié)議如下:


數據包長(cháng)度為NBYTE,起始字節為STARTBYTE1,STARTBYTE2,一個(gè)字節為檢驗和,中間字節不可能出現連續出現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;}}}


第 二種方法,使用隊列中斷函數:


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=隊列中數據個(gè)數;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的任務(wù)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;OSWait(K_SIG,0);temp=SBUF;for(i=0;i{OSWait(K_SIG,0);temp1=SBUF;if((temp==STARTBYTE1)&&(temp1==STARTBYTE2)){OSWait(K_SIG,0);temp=SBUF;i=-1;Sum=STARTBYTE1+STARTBYTE2;continue;}Buf[i]=temp;Sum+=temp;temp=temp1;}Sum+=temp1;if(Sum==0) OSSendSignal(命令解釋任務(wù) ID);}}


以下為這幾種方法的比較:


可讀性和編程容易性方面,第三鐘方法zui好(如果允許使用goto語(yǔ)句,程序更加簡(jiǎn)單易讀),第 二種次之(因為要編隊列程序),第 一種zui差。如果協(xié)議更加復雜,這方面更加明顯。程序簡(jiǎn)單易讀,自然出錯機會(huì )小了。


RAM占用方面,第三種方法較少,第 二種zui多(因為隊列占用大量空間),第 一種zui少。


中斷執行時(shí)間方面,第三種方法zui長(cháng),第 二種zui短,第 一種較長(cháng)。


從功能方面,第三種方法zui強,它還可以進(jìn)行超時(shí)處理(雖然例子程序沒(méi)有),其它方法均不行。


如果數據來(lái)的太快,命令處理程序來(lái)不及處理,三種方法處理方式不太一樣,第 一種和第三種方法類(lèi)似:丟棄以前數據,第 二種則是丟棄后到的數據。而且,第 二種方法必須等命令處理程序完成后才處理下一個(gè)數據包,而第 一種和第三種方只需命令處理程序將數據收取后就可處理下一個(gè)數據包。也就是說(shuō),第 一種和第三種與命令處理程序并行處理,第 二種方法為串行處理。


現在,一般情況下,開(kāi)發(fā)的效率第 一,執行的效率(包括執行時(shí)間和資源占用)第 二。在這種情況下,降低些許效率換取開(kāi)發(fā)的效率的較大提高,何樂(lè )而不為?何況,單個(gè)模塊的執行的效率高不等于整個(gè)程序執行效率高。例如,如果程序需要等待一段時(shí)間,一般用程序延時(shí)或定時(shí)器延時(shí)。無(wú)論何種方法,CPU不再處理其它工作,效率很低。而用RTOS,等待的時(shí)候CPU可以處理其它工作,效率得到提高。


以下摘自《uC/OS-II--源碼公開(kāi)的實(shí)時(shí)嵌入式操作系統》


“實(shí)時(shí)內核也稱(chēng)為實(shí)時(shí)操作系統或RTOS。使用它使得實(shí)時(shí)應用程序的設計和擴展變得容易。不需要大的改動(dòng)就可以增加新的功能。通過(guò)應用程序分割為若干獨立的任務(wù),RTOS使得應用程序的設計過(guò)程大為簡(jiǎn)化。使用可剝奪性的內核時(shí),所有時(shí)間要求苛刻的事件都得到了盡可能快捷、有效的處理。通過(guò)有效的服務(wù);如信號量、郵箱、隊列、延時(shí)、超時(shí)等;RTOS使得資源得到更好的利用。


“如果應用項目對額外的需求可以承受,應該考慮使用實(shí)時(shí)內核。這些額外的需求  是:內核的價(jià)格,額外ROM/RAM開(kāi)銷(xiāo),2至4百分點(diǎn)的CPU額外負擔。


“還有沒(méi)提到的一個(gè)因素是使用實(shí)時(shí)內核增加的價(jià)格成本。在一些應用中,價(jià)格就是一切,以至于對使用RTOS連想都不敢想?!?/span>


總而言之,適用的就是好的,不要拒絕RTOS,在它適用的情況下,它工作得很好。

Copyright@ 2003-2025  南京信瑞譜傳感技術(shù)有限公司版權所有     

熱門(mén)導航電壓傳感器  霍爾電流傳感器  互感器  高精度電流傳感器  直流漏電流傳感器  直流電流變送器  霍爾傳感器工作原理 傳感器資料下載

           

        在線(xiàn)購買(mǎi)-直達淘寶店

     具體購買(mǎi)產(chǎn)品請聯(lián)系淘寶客服

(淘寶店拍買(mǎi)請聯(lián)系淘寶在線(xiàn)服務(wù),告知型號或在線(xiàn)經(jīng)理的姓名即可)

国产精品2022不卡在线观看|青草国产福利视频免费观看|亚洲天堂日韩在线|日日摸夜夜添夜夜添97|亚洲伊人久久大香线蕉av|午夜性爽快免费视频播放