版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第12章嵌入式單片機技術
C教程基礎12.1 C51編程基礎12.2 串行通信與定時程序12.3 嵌入式操作系統(tǒng)嵌入式51系列單片機的編程語言常用的有二種:匯編語言,C51語言。匯編語言的機器代碼生成效率高但可讀性不強,而C51語言在大多數(shù)情況下其機器代碼生成效率和匯編語言相當,但可讀性和可移植性卻遠遠超過匯編語言;而且C51語言還可以嵌入?yún)R編來解決高時效性的代碼編寫問題。中大型的軟件編寫用C51語言的開發(fā)周期通常要小于匯編語言很多。
C語言的標識符用來標識源程序中某個對象名字。這些對象可以是函數(shù)、變量、數(shù)組、數(shù)據(jù)類型、存儲方式、語句等。關鍵字是一類具有固定名稱和特定含義的特殊標識符,有時又稱為保留字。ANSIC標準一共規(guī)定了32個關健字,表12-1按用途列出了ANSIC標準的關鍵字。
12.1C51編程基礎
12.1.1標志符與關鍵字
表12-1ANSIC標準的關鍵字
關鍵字用途說明auto存儲器種類聲明用以聲明局部變量,默認什為此break程度語句退出最內層循環(huán)體case程度語句switch語句中的選擇項char數(shù)據(jù)類型聲明單字節(jié)整型或字符型const存儲類型聲明在程度執(zhí)行中不可修改的變量值continue程度語句轉向下一次循環(huán)default程序語句switch語句中的失敗選擇項do程度語句構成do...while循環(huán)結構double數(shù)據(jù)類型聲明雙精度浮點數(shù)else程度語句構成if...else選擇結構enum數(shù)據(jù)類型聲明枚舉extern存儲種類聲明在其它程度模塊中聲明了的全局變量float數(shù)據(jù)類型聲明單精度浮點數(shù)for程度語句構成for循環(huán)結構goto程度語句構成goto轉移結構if程度語句構成if...else選擇結構int數(shù)據(jù)種類聲明基本整型數(shù)long數(shù)據(jù)種類聲明長整型數(shù)register數(shù)據(jù)種類聲明使用CPU內部寄存器的變量return程序語句函數(shù)返回short數(shù)據(jù)種類聲明短整型數(shù)signed數(shù)據(jù)種類聲明有符號數(shù),二進制數(shù)的最高位為符號位sizeof運算符計算表達式或數(shù)據(jù)類型的字節(jié)數(shù)static數(shù)據(jù)種類聲明靜態(tài)變量struct數(shù)據(jù)種類聲明結構類型數(shù)據(jù)switch程序語句構成switch選擇結構typedef數(shù)據(jù)種類聲明重新進行數(shù)據(jù)類型定義union數(shù)據(jù)種類聲明聯(lián)合類型數(shù)據(jù)unsigned數(shù)據(jù)種類聲明無符號數(shù)據(jù)void數(shù)據(jù)種類聲明無類型數(shù)據(jù)volatile數(shù)據(jù)種類聲明聲明該變量在程度執(zhí)行中可被隱含的改變while程度語句構成while和...while循環(huán)結構C51編繹器除了支持ANSIC標準的關鍵字以外,還擴展了如表12-2所示的關鍵字:
表12-2C51編繹器的擴展關鍵字
關鍵字用途說明_at_地址定位為變量進行存儲器絕對空間地址定位alien函數(shù)特殊聲明用以聲明與PL/M51兼容的函數(shù)bdata存儲器類型聲明可位尋址的8051內部數(shù)據(jù)存儲器bit位變量聲明聲明一個位變量或位類型的函數(shù)code存儲器類型聲明8051程度存儲器空間compact存儲器模式指定使用8051外部分頁尋址數(shù)據(jù)存儲器空間data存儲器類型聲明直接尋址的8051內部數(shù)據(jù)存儲器idata存儲器類型聲明間接尋址的8051內部數(shù)據(jù)存儲器interrupt中斷函數(shù)聲明定義一個中斷服務函數(shù)large存儲器模式指定使用8051外部數(shù)據(jù)存儲器空間pdata存儲器類型聲明分頁尋址的8051外部數(shù)據(jù)存儲器_priority_多任務優(yōu)先聲明規(guī)定RTX51或RTX51Tiny的任務優(yōu)先級reentrant再入函數(shù)聲明定義一個再入函數(shù)sbit位變量聲明聲明一個可位尋址變量sfr特殊功能寄存器聲明聲明一個8位的特殊功能寄存器sfr16特殊功能寄存器聲明聲明一個16位的特殊功能寄存器small存儲器模式指定使用8051內部數(shù)據(jù)存儲器空間_task_任務聲明定義實時多任務函數(shù)usang寄存器組定義定義8051的工作寄存器組xdata存儲器類型聲明8051外部數(shù)據(jù)存儲器針對51系列單片機各個可操作部分,C51編繹器定義了如表12-3所示的符號,編程時寫出符號名,即可操作單片機對應的部分。
表12-3C51特殊功能寄存器列表符號地址注釋*ACCE0H累加器*BF0H乘法寄存器*PSWD0H程序狀態(tài)字SP81H堆棧指針DPL82H數(shù)據(jù)存儲器指針低8位DPH83H數(shù)據(jù)存儲器指針高8位*IEA8H中斷允許控制器*IPD8H中斷優(yōu)先控制器*P080H端口0*P190H端口1*P2A0H端口2*P3B0H端口3PCON87H電源控制及波特率選擇*SCON98H串行口控制器SBUF99H串行數(shù)據(jù)緩沖器*TCON88H定時器控制TMOD89H定時器方式選擇TL08AH定時器0低8位TL18BH定時器1低8位TH08CH定時器0低8位TH18DH定時器1高8位帶*號的特殊功能寄存器都是可以位尋址的寄存器下面舉舉例說說明特特殊功功能寄寄存器器的操操作方方法。。例1,,欲將將單片片機P1口口的第第一根根口線線-DIP封裝裝單片片機第第一管管腳--設為為報警警輸出出線,,低電電平報報警,,則在在程序序中首首先可可定義義:sbitBJ=P1^0;這就定定義了了一個個變量量BJ對應應P1口的的第一一根口口線,,sbit聲明明變量量BJ是位位尋址址數(shù)據(jù)據(jù)類型型。需需要報報警時時,使使用語語句::BJ=0;即可令令單片片機P1口口的第第一根根口線線輸出出低電電平,,完成成報警警。當當報警警完畢畢,需需要撤撤銷報報警時時,使使用如如下語語句即即可恢恢復到到非報報警狀狀態(tài)::BJ=1;例2,,欲將將單片片機P1口口的第第五根根口線線至第第八根根口線線設置置為構構成寬寬度為為4位位的雙雙向數(shù)數(shù)據(jù)總總線,,使之之既可可以接接收數(shù)數(shù)據(jù)又又可以以發(fā)送送數(shù)據(jù)據(jù),則則在程程序中中首先先可做做如下下定義義:sbitMT8880_D0=P1^4;//雙雙向向數(shù)據(jù)據(jù)總線線sbitMT8880_D1=P1^5;//雙雙向向數(shù)據(jù)據(jù)總線線sbitMT8880_D2=P1^6;//雙雙向向數(shù)據(jù)據(jù)總線線sbitMT8880_D3=P1^7;//雙雙向向數(shù)據(jù)據(jù)總線線收數(shù)據(jù)據(jù)時,,令各各口線線為高高,處處于監(jiān)監(jiān)聽狀狀態(tài)::MT8880_D0=1;MT8880_D1=1;MT8880_D2=1;MT8880_D3=1;當有數(shù)數(shù)據(jù)來來時,,使用用如下下語句句判斷斷、接接收數(shù)數(shù)據(jù)::if(MT8880_D3==0&MT8880_D2==0&MT8880_D1==0&MT8880_D0==0)Number_Key=0;if(MT8880_D3==0&MT8880_D2==0&MT8880_D1==0&MT8880_D0==1)Number_Key=1;…….用作輸輸出數(shù)數(shù)據(jù)時時,直直接寫寫口線線即可可:MT8880_D0=1;MT8880_D1=0;MT8880_D2=1;MT8880_D3=0;如把這這四根根口線線看作作二進進制輸輸出,,MT8880_D3是是高位位,則則輸出出了0101,,相當當于十十進制制的5。當當然,,輸出出前必必須保保證總總線上上的其其它設設備處處于監(jiān)監(jiān)聽狀狀態(tài),,即非非輸出出狀態(tài)態(tài),否否則會會產(chǎn)生生沖突突,因因為總總線信信號是是“與與”的的關系系,比比如某某根數(shù)數(shù)據(jù)線線被任任一總總線設設備置置為邏邏輯0,則則在同同時其其它設設備無無法將將其置置為邏邏輯1。12.1.2數(shù)數(shù)據(jù)類類型C51有如如下數(shù)數(shù)據(jù)類類型::表12-4C51編繹繹器能能夠識識別的的數(shù)據(jù)據(jù)類型型數(shù)據(jù)類型字符類型長度值域unsignedchar字符類型單字節(jié)0~255signedchar字符類型單字節(jié)-128~127unsignedint整型雙字節(jié)0~65536unsignedint整型雙字節(jié)-32768~32767unsignedlong長整型4字節(jié)0~4294967295signedlong長整型4字節(jié)-2147483648~2147483647float浮點型4字節(jié)±1.175494E-38~±3.4028223E+38*指針型1~3字節(jié)對象的地址bit位類型位0或1sfr特殊功能寄存器單字節(jié)0~255sfr1616位特殊功能寄存器雙字節(jié)0~65536sbit可尋址位位0或1指針符符號"*":表表示方方法是是將"*"前面面冠以以數(shù)據(jù)據(jù)類型型的符符號,,如char*point1表表示point1是是一個個字符符型的的指針針變量量。下面給給出幾幾個例例子,,說明明定義義不同同數(shù)據(jù)據(jù)類型型變量量的操操作方方法。。例1,,定義義一個個布爾爾型變變量,,則有有:bitFLAG_BF;例2,,定義義一個個整型型變量量,則則有::intTime_DU;例3,,定義義一個個單字字節(jié)字字符型型變量量,則則有::unsignedcharLOCK_JS;例4,定義一一個字符型數(shù)數(shù)組,則可在在程序開頭聲聲明:typedefunsignedcharNumber[20];這就聲明了一一個長度為20字節(jié)的字字符型數(shù)組,,使用賦值語語句:Number[0]=10將值10填入入該數(shù)組第一一個字節(jié)。使使用賦值語句句:Number[1]=15將值15填入入該數(shù)組第二二個字節(jié)。使使用賦值語句句:MyVar==Number[3]將該數(shù)組的第第四個字節(jié)賦賦給變量MyVar。例5,欲定義義一個結構型型變量,則有有:structReadArray{unsignedcharNumber[20];intSerial[5];}READARRAY;給結構變量賦賦值可使用如如下語句:READARRAY.Number[0]=’a’;READARRAY.Number[1]=’b’;READARRAY.Number[2]=’c’;…READARRAY.Serial[3]=32;…12.1.3常量常量的值在程程序執(zhí)行過程程中不能改變變。常量的數(shù)數(shù)據(jù)類型有整整型、浮點型型、字符型和和字符串型等等。分別說明明如下:1.整型常量整型常量就是是整型常數(shù),可表示為:·十進制整數(shù)數(shù):如12、、-5678、0等?!なM制整整數(shù):十六進進制數(shù)據(jù)以0x開頭,數(shù)數(shù)據(jù)為0~9及a~f。?!らL整數(shù):在在數(shù)字后面加加一個字母L長整數(shù),如如2048L、0123L、0xff00L等等。2.浮點型型常量浮點型常量有有十進制形式式和指數(shù)表示示形式?!なM制表示示形式又稱為為定點表示形形式,由數(shù)字字和小數(shù)點組組成。如0.3141是是十進制數(shù)表表示形式的浮浮點型常量。。3.字符型型常量字符型常量是是單引號內的的字符,如'a','b'等。對于于不可顯示的的控制字符,,可以在該字字符前面加一一個反斜杠"\"組成轉轉義字符。利利用轉義字符符可以完成一一些特殊功能能和輸出時的的格式控制。。常用轉義字字符如表12-5所示。。表12-5常常用轉義字符符表轉義字符含義16進制數(shù)形式\0空字符(NULL)0x00\n換行符(LF)0x0A\r回車符(CR)0x0D\t水平制表符(HT)0x09\b退格符(BS)0x08\f換頁符(FF)0x0C\'單引號0x27\"雙引號0x22\\反斜杠0x5C4.字符串串型常量字符串型常量量由雙引號““”內的字符符組成,如““ABCD””、“$1234”等都都是字符串常常量。當雙引引號內的字符符個數(shù)為0時時,稱為空串串常量。字符符串常量首尾尾的雙引號是是界限符,當當需要表示雙雙引號字符串串時,可用雙雙引號轉義字字符來表示為為:“\”““。C語言在在存儲字符串串常量時,要要在字符串的的尾部加一個個轉義字符\0作為該字字符串常量的的結束符。因因此不要將字字符常量與字字符串常量混混淆,如字符符常量’a‘‘與字符串常常量”a“是是不一樣的。。為了某些編程程需要,常常常在程序開頭頭使用如下語語句定義常量量:#definePI3.14這樣,在程序序中出現(xiàn)常量量PI時,編編譯器會自動動用浮點數(shù)3.14代替替。12.1.4變量及其存存儲模式變量是一種在在程序執(zhí)行過過程中,其值值能夠不斷變變化的量。使使用一個變量量之前,必須須進行定義,,用一個標識識符作為變量量名并指出它它的數(shù)據(jù)類型型和存儲格式式,以便編繹繹系統(tǒng)為它分分配相應的存存儲單元。在在C51中對對變量進行定定義的格式如如下:[存儲器種類類]數(shù)據(jù)類型型[存儲器類類型]變量名名表其中,"存儲儲器種類"和和"存儲器類類型"是可選選項。變量的的存儲器種類類有四種:自自動(auto)、外部部(extern)、靜靜態(tài)(static)和和寄存器(register)。定定義變量時如如果省略存儲儲器種類選項項,則該變量量格式為自動動(auto)。定義一一個變量時,,C51編繹繹器允許說明明變量的存儲儲器類型。KeilC51編繹器對對于每個變量量可以準確地地賦予其存儲儲器類型,使使之能夠在單單片機系統(tǒng)內內準確地定位位。表12-6列出了CC51編繹器器所能識別的的存儲器類型型。表12-6C51編繹繹器所能識別別的存儲器類類型存儲器類型說明DATA直接尋址的片內數(shù)據(jù)存儲器,訪問速度最快BDATA可位尋址的片內數(shù)據(jù)存儲器,允許位與字節(jié)混合訪問IDATA間接訪問的片內數(shù)據(jù)存儲器,允許訪問全部片內地址PDATA分頁尋址的片外數(shù)據(jù)存儲器,用MOVX@Ri指令訪問XDATA片外數(shù)據(jù)存儲器,用MOVX@DPTR指令訪問CODE程序存儲器,用MOVC@A+DPTR指令訪問8051具有有一些特殊功功能寄存器,,如定時器方方式控制寄存存器TMOD、中斷允許許控制寄存器器IE等。C51編繹器器擴充了關鍵鍵字sfr和和sfr16,以便在C語言源程序序中直接對特特殊功能寄存存器進行定義義。定義方法法如下:sfrP0=0x80;/*定義義I/O口P0,其地址址為0x80*/對于定時器T2,可采用用如下方法的的方法來定義義:sfr16T2=0xCC;/*定義TIMER2,其其地址為T2L=0xCC,T2H=0xCD*/T2為特殊功功能寄存器名名,等號后面面是它的低字字節(jié)地址,其其高字節(jié)地址址必須在物理理上直接位于于低字節(jié)之后后。訪問特殊功能能寄存器中的的某位,用擴擴充關鍵字sbit,1.sbit位變量名=位地址這種方法將位位的絕對地址址賦給位變量量,位地址必必須位于0x80~0xFF之間。。例如:sbitY=0xD7;2.sbit位變量名=特殊功能寄寄存器名^位位位置當可位尋址位位位于特殊功功能寄存器中中時,可采用用這種方法。。"位位置"是一個0~7之間的常常數(shù)。例如::sfrPSW=0xD0;sbitCY=PSW^7;3.sbit位變量名=字節(jié)地址^位位置以一常數(shù)作為為基址,常常數(shù)在0x80~0xFF之間。"位位置"是是一個0~7之間的常數(shù)數(shù)。例如:sbitCY=0xD0^7;需要注意的是是,sbit是一個獨立立的關鍵字,,不要將它與與關鍵字bit相混淆。。關鍵字bit是C51編繹器的一一種擴充數(shù)據(jù)據(jù)類型,用來來定義一個普普通位變量,,它的值是二二進制數(shù)的0或1。例如如:staticbitdirection_bit/*定義一個靜靜態(tài)位變量direction_bit*/12.1.5用typedef重新新定義數(shù)據(jù)類類型在C51語言言程序中,用用戶還可以根根據(jù)自己的需需要對數(shù)據(jù)類類型重新定義義。其方法如如下:typedefintIntnew;/*定義Intnew為為新的整型數(shù)數(shù)據(jù)類型名*/Intnewi,j;/*將i,j定義為為Intnew型變量*/一般而言,用用typedef定義的的新數(shù)據(jù)類型型用大寫字母母,以便與C語言中原有有的數(shù)據(jù)類型型相區(qū)別。12.1.6運算符與表表達式運算符是完成成某種特定運運算的符號,,表達式則是是由運算符及及運算對換所所組成的具有有特定含義的的式子。C語語言是一種表表達式語言,,在任意一個個表達式后面面加一個分號號";"就構構成了一個表表達式語句。。運算符按其在在表達式中所所起的作用,,可分為:賦賦值運算符、、算術運算符符、增量與減減量運算符、、關系運算符符、邏輯運算算符、位運算算符、復合運運算符、逗號號運算符、條條件運算符、、指針和地址址運算符、強強制類型轉換換運算符和sizeof運算符等。。"="在C中中賦值運算符符,如,x=10。示例例如下:a=0xFF;//將常數(shù)十十六進制數(shù)FF賦于變量量aC51中的算算術運算符有有如下幾個,,其中只有取取正值和取負負值運算符是是單目運算符符,其它是雙雙目運算符::+加或取正正值運算符-減或取負負值運算符*乘運算符符/除運算符符%取余運算算符如:a+b*(10-a),(x+9)/(y-a)兩浮點數(shù)相除除,其結果為為浮點數(shù),如如10.0/20.0所所得值為0.5,兩個整整數(shù)相除時,,所得值就是是整數(shù),如7/3,值為為2。C的運運算符有優(yōu)先先級和結合性性,可用括號號"()"來來改變優(yōu)先級級。12.2串行行通信與定時時程序下面給出1個個C51完整整程序,該例例子包含對定定時器、中斷斷和串行通信信的處理。該該程序運行在在AT89C51單片機機上,該單片片機安裝在一一臺下位機上上,該下位機機接收從PSTN公共電電話網(wǎng)傳來的的數(shù)據(jù),然后后存儲轉發(fā)給給PC機。。12.3嵌入入式操作系統(tǒng)統(tǒng)12.3.1嵌入式操作作系統(tǒng)簡介提高開發(fā)效率率僅僅依靠編編程語言還不不夠,應該要要建立自己的的開發(fā)平臺。。嵌入式實時時操作系統(tǒng)((RTOS))就是一個很很好的嵌入式式軟件的開發(fā)發(fā)平臺。使用用RTOS是是大勢所趨。。RTOS和一一般的操作系系統(tǒng)有何區(qū)別別?我們平時時熟悉的DOS、Windows、、Linux等操作系統(tǒng)統(tǒng)都是通用操操作系統(tǒng),它它們針對的是是PC或是工工作站。為了了最大幅度地地兼容各種軟軟硬件產(chǎn)品,,通用操作系系統(tǒng)一般面面面俱到、體積積龐大。而RTOS很很不一樣。嵌嵌入式系統(tǒng)中中的硬件資源源環(huán)境一般比比較苛刻,嵌嵌入式微處理理器和微控制制器的內存一一般都不大,,要在如此緊緊張的資源下下完成復雜的的功能,這就就要求嵌入式式系統(tǒng)軟件必必須盡量的小小巧、穩(wěn)定和和高效。目前廣泛用于于各種嵌入式式智能設備的的嵌入式操作作系統(tǒng)有美國國加州的集成成系統(tǒng)公司推推出的pSOSystem,簡稱pSOS。pSOS是是高高性性能能、、模模塊塊化化的的OS,,針針對對嵌嵌入入式式微微處處理理器器量量身身打打造造。。該該系系統(tǒng)統(tǒng)提提供供了了多多任任務務處處理理環(huán)環(huán)境境。。pSOS采采用用模模塊塊化化體體系系結結構構,,包包括括一一個個實實時時多多任任務務核核心心和和一一系系列列軟軟件件部部件件、、連連接接庫庫。。系系統(tǒng)統(tǒng)中中的的每每個個部部分分都都是是封封閉閉式式的的,,相相互互之之間間既既獨獨立立又又密密切切協(xié)協(xié)作作。。開開發(fā)發(fā)人人員員可可以以根根據(jù)據(jù)不不同同的的應應用用需需求求來來制制定定操操作作系系統(tǒng)統(tǒng)的的功功能能和和所所需需要要的的內內存存大大小小。。pSOS的的主主要要組組成成部部分分有有::實實時時多多任任務務核核心心pSOS++、、TCP/IP協(xié)協(xié)議議堆堆棧棧pNA++、、遠遠程程過過程程調調用用庫庫pRPC++、、文文件件系系統(tǒng)統(tǒng)管管理理pHILE++、、ANSIC標標準準庫庫pREPC++、、調調試試功功能能模模塊塊pROBE++、、系系統(tǒng)統(tǒng)信信息息實實時時分分析析工工具具pMONT++等等等等。。pSOS有有如如下下特特征征::支支持持多多種種CPU和和驅驅動動器器硬硬件件產(chǎn)產(chǎn)品品;;集集成成了了網(wǎng)網(wǎng)絡絡技技術術,,對對TCP/IP協(xié)協(xié)議議支支持持;;多多處處理理器器支支持持;;文文件件系系統(tǒng)統(tǒng)支支持持包包括括ISO9660、、MS--DOS兼兼容容文文件件系系統(tǒng)統(tǒng)和和高高性性能能嵌嵌入入式式文文件件系系統(tǒng)統(tǒng)。。另外,WindowsCE.Net也是是一個應應用較廣廣泛的實實時嵌入入式操作作系統(tǒng),,它是微微軟第一一個能夠夠全面支支持中文文的WindowsCE操操作系統(tǒng)統(tǒng),適用用于快速速構建新新一代內內存少體體積小的的智能設設備,WindowsCE.NET也為為構建智智能移動動設備的的開發(fā)人人員提供供了新一一代的功功能強大大嵌入式式系統(tǒng)平平臺。WindowsCE.NET提供供了對無無線技術術的支持持,例如如藍牙技技術和零零配置的的802.11,它還還提供了了全面的的多媒體體和Web瀏覽覽體驗。。WindowsCE.NET支支持各種種處理器器產(chǎn)品家家族,包包括x86、Xscale、、ARM、MIPS和和SH系系列?;?1單片機機的RTOS中中,有名名氣的有有KeilC51所所帶的RTXFull和RTXTiny,μμC/OSII。RTX51是一一個用于于8051系列列單片機機的多任任務實時時操作系系統(tǒng)。有有兩個不不同的版版本可用用。RTX51Full使使用四個個任務優(yōu)優(yōu)先權完完成同時時存在時時間片輪輪轉調度度和搶先先的任務務切換。。RTX51工工作在與與中斷功功能相似似的狀態(tài)態(tài)下,信信號和信信息可以以通過郵郵箱系統(tǒng)統(tǒng)在任務務之間互互相傳遞遞。開發(fā)發(fā)者可以以從一存存儲池中中分配和和釋放內內存;可可以強迫迫一個任任務等待待中斷、、超時,,或者是是從另一一個任務務或中斷斷發(fā)出信信號、信信息。RTX51Tiny是一個個RTX51的子集集,可以以很容易易地在沒沒有任何何外部存存儲器的的單片8051系統(tǒng)上上運轉;;它僅支支持時間間片輪轉轉任務切切換和使使用信號號進行任任務切換換,不支支持搶占占式的任任務切換換,不包包括消息息隊列,,沒有存存儲器池池分配程程序。μC/OSII是著名名的、源源碼公開開的實時時內核,,可用于于各類8位、16位和和32位位單片機機或DSP。從從μC/OS算算起,該該內核已已有10余年應應用史,,并在諸諸多領域域得到廣廣泛應用用。μC/OSII是是一個完完整、可可移植、、可固化化和可剪剪裁的占占先式實實時多任任務內核核。μC/OSII是是用ANSI的的C語言言編寫的的,包含含一小部部分匯編編代碼,,使之可可以供不不同架構構的微處處理器使使用。至至今,從從8位到到64位位,μC/OSII已已在超過過40種種不同架架構的微微處理器器上運行行。8051系列一一般只有有很少的的ROM和RAM,如如AT89C52只有有8KBFlash和256字字節(jié)RAM。但但RTX51Full自身身代碼有有6K多字節(jié)節(jié),且需需要大量量外部RAM,,不利于于學習。。RTXTiny雖雖然?。ǎㄗ陨碚颊加?00多字字節(jié)ROM),,但是任任務沒有有優(yōu)先級級和中斷斷管理,,無源代代碼,不不實用,,也不利利于學習習。而μμC/OSII有源代代碼,有有配套圖圖書,利利于學習習,但規(guī)規(guī)模太大大,又需需要大量量外部RAM,,而且所所有函數(shù)數(shù)都必須須是可重重入函數(shù)數(shù),用在在8051系列列這類小小片內RAM的的單片機機上有點點勉強。。除了上述3種嵌入式式操作系統(tǒng)統(tǒng),還有廣廣州周立功功公司開發(fā)發(fā)的SmallRTOS51,它使使用了RTX51Tiny的堆棧管管理機制,,并像μC/OSII一樣是是搶占式的的。雖然它它為51系系列單片機機編寫,但但比較容易易移植到其其他CPU上。目前前SmallRTOS51的所有版版本均可以以免費在任任何領域使使用。12.3.2實時嵌嵌入式操作作系統(tǒng)分析析所謂操作系系統(tǒng),無非非就是處理理不同硬件件差異的接接口,或者者說隱蔽硬硬件,使用用戶不必和和硬件打交交道,讓應應用程序可可以在上面面操作。通通過由操作作系統(tǒng)提供供出來的系系統(tǒng)接口來來寫應用程程序,無須須考慮硬件件問題。嵌入式操作作系統(tǒng)是將將所有程序序,包括操操作系統(tǒng)、、驅動程序序、應用程程序等程序序代碼全部部都燒進一一個ROM里面執(zhí)行行,操作系系統(tǒng)在其中中的角色比比較像函數(shù)數(shù)庫。操作系統(tǒng)主主要負責三三件事:內內存管理、、任務管理理、外圍資資源管理。。這三項機機制提供給給應用程序序開發(fā)者很很多的好處處,但是在在嵌入式系系統(tǒng)中并非非絕對必要要,如果系系統(tǒng)很簡單單,可以根根本不用操操作系統(tǒng),,但對復雜雜的應用程程序,有個個操作系統(tǒng)統(tǒng)幫忙會省省很多麻煩煩。嵌入式式操作系統(tǒng)統(tǒng)核心通常常很小,往往往只有4到20K。下面我我們來看看看這三項管管理機制。。內存管理簡單方式內內存管理不不提供任何何內存管理理機制,但但也有好處處,用戶自自行管理內內存,用錯錯了系統(tǒng)就就宕機了,,系統(tǒng)只維維護一個已已經(jīng)配置的的空間的頂頂部指針。。位映像方式式內存管理理是將可以以使用的內內存總空間間分成固定定大小的塊塊,系統(tǒng)本本身維護一一個內存使使用位映像像來記錄內內存的使用用方式。在在內存使用用位映像中中,每一個個位表示一一個64bytes大小內存存塊的使用用情況,當當位等于0時表示已已經(jīng)有人用用過了,當當位值等于于1時表示示沒有分配配。標簽邊界內內存管理方方式中,系系統(tǒng)會維護護一個頂部部指針指向向可用的內內存塊頂端端。當用戶戶要求分配配內存時,,如果申請請的空間比比較小,比比如要存放放某個運算算中的中間間變量,有有一個小空空間塊可供供分配,該該小空間塊塊以位映像像方式來管管理。系統(tǒng)統(tǒng)先在小空空間尋找有有無可用內內存,若有有則分配,,若沒有則則轉到調用用頂端指針針指向的地地址去尋找找。如果用用戶要求分分配的內存存空間大,,就直接利利用頂端指指針去尋找找可用的內內存塊。內存分區(qū)((memorypartitionmethod))管理方式式是將內存存分成多個個區(qū)域,并并給每個區(qū)區(qū)域一個識識別碼(ID),在在每個區(qū)域域中包含幾幾個大小相相等的區(qū)塊塊(block)。。當用戶申申請內存時時,只要告告訴系統(tǒng)區(qū)區(qū)域識別碼碼,系統(tǒng)就就會從相應應的區(qū)域中中取出一塊塊可用的區(qū)區(qū)塊給用戶戶。例如下下表所示::表12-7內存存分區(qū)表第幾分區(qū)分區(qū)號區(qū)塊數(shù)目塊尺寸1-412501652100326-8315064945012810-165104K如果給定分分區(qū)號為2,現(xiàn)在在在第5分區(qū)區(qū)中的100個區(qū)塊塊還沒有使使用的話,,就拿到3K左右內內存。任務管理實時嵌入式式操作系統(tǒng)統(tǒng)的核心內內容就是對對任務的調調度、管理理。多任務(Multitasking)在一個操作作系統(tǒng)內部部,內核[kernel]是最最核心的部部件。從表面上看看,允許用用戶并發(fā)訪訪問計算機機。多個用用戶似乎可可以并行執(zhí)執(zhí)行多個程程序。在操操作系統(tǒng)的的控制下,,每個正在在執(zhí)行的程程序就是一一個任務。。如果一個個操作系統(tǒng)統(tǒng)能夠以這這種方法執(zhí)執(zhí)行多個任任務,這就就叫做多任任務。多任務操作作系統(tǒng)的使使用可以簡簡化應用程程序的設計計:
1..
操作系系統(tǒng)的多任任務和任務務間通信的的機制允許許復雜的應應用程序被被分成一系系列更小的的和更多的的可以管理理的任務。。2.
程序序的劃分讓讓軟件測試試更容易,團隊工工作分解,也有利于于代碼復用用。3.
復雜雜的定時和和先后順序序的細節(jié)可可以從應應用程序代代碼中刪刪除。這成成為操作系系統(tǒng)的職責責。一個多任務務操作系統(tǒng)統(tǒng)可以使它它看起來好好像每個任任務并行執(zhí)執(zhí)行一樣。。這可以下下面的示意意圖來描述述。它顯示示了有關時時間的3個個任務的執(zhí)執(zhí)行模式。。任務名用用顏色標注注出來,寫寫在左手邊邊。時間從從左到右增增加,相應應的顏色的的線條顯顯示該任務務在某個特特殊時間正正在執(zhí)行。。上面的圖圖演示的的是用戶所所覺察到的的并行執(zhí)行行模式,下下面的圖是是實際的多多任務執(zhí)行行模式。圖12-2圖12-3所有可用的的任務都好好像在執(zhí)行行,但實際際上在任何何一個時刻刻都只有一一個任務在在執(zhí)行,其其它任務被被掛起,這這也就是時時分復用的的概念。調度調度器(scheduler)是內核核中負責決決定在某個個特殊時間間哪個任務務應該執(zhí)行行的部分。。下圖是內內核調度任任務的狀態(tài)態(tài)轉換圖。。圖12-4其中,停止止指任務已已經(jīng)執(zhí)行完完的狀態(tài);;就緒指任任務滿足所所有啟動條條件后進入入的狀態(tài),,掛起指當當該任務需需要等待某某一事件發(fā)發(fā)生。內核核可以在任任務的運行行期間,可可能會掛起起/恢復該該任務許多多次,之后后才能完成成該任務并并進入停止止狀態(tài)。除了被RTOS內核核無意的掛掛起外,一一個任務還還可以自己己掛起自己己。如果一一個任務想想延遲一段段固定的時時間,或者者等待某個個資源可用用,或者等等待一個事事件出現(xiàn)(比如一個個鍵按下)。一個阻阻塞或者睡睡眠的任務務是不能執(zhí)執(zhí)行的,不不會為它分分配任何處處理時間。。圖12-5上圖中提到到的編號:1)
任務務1正在運運行;2)
t2時刻,內內核掛起任任務1;3)
緊接接著,恢復復/開始執(zhí)執(zhí)行任務2;4)
任務務2正在執(zhí)執(zhí)行,它工工作于獨占占訪問方式式,它鎖定定一個處理理器外設;;5)
t3時刻,內內核掛起任任務2;6)
緊接接著,恢復復任務3;;7)
任務務3試圖訪訪問同樣的的處理器外外設,發(fā)現(xiàn)現(xiàn)它被鎖定定,任務3不能繼續(xù)續(xù),所以自自己掛起自自己;8)
內核核恢復任務務1;9)
接下下來,任務務2在9處處執(zhí)行。它它完成了對對處理器外外設的訪問問,所以解解鎖它;10)再再下來,任任務3在10處執(zhí)行行。它發(fā)現(xiàn)現(xiàn)現(xiàn)在可以以訪問處理理器外設了了,于是開開始執(zhí)行,,直到被內內核掛起。。調度策略是是調度器用用來決定哪哪個任務在在哪個時間間點執(zhí)行的的算法,也也常被稱為為排程算法法。一個非非實時多用用戶系統(tǒng)的的策略很可可能分配給給每個任務務一個"公公平"的處處理器時間間片,即采采用均分的的原則。用用在實時系系統(tǒng)/嵌入入式系統(tǒng)的的策略會更更復雜,一一般都屬于于先占式優(yōu)優(yōu)先權調度度策略,就就是先搶先先贏再加上上優(yōu)先權排排列來改善善。普遍有有四種方式式,我們分分別討論如如下:FCFS((firstcomefirstservicescheduling))策略,在在該策略下下,最先提提出服務要要求的執(zhí)行行線程會最最先分配到到CPU資資源,直到到結束或自自動放棄。。PFS(priorityfirstscheduling)策略根根據(jù)任務的的優(yōu)先權來來決定分配配CPU資資源的先后后,若是優(yōu)優(yōu)先權相同同,則采用用FCFS調度策略略來決定任任務的先后后順序。RRS((round-robinscheduling))策策略略將將就就緒緒狀狀態(tài)態(tài)的的任任務務當當作作一一個個環(huán)環(huán)狀狀任任務務,,將將其其放放入入循循環(huán)環(huán)隊隊列列中中處處理理,,每每一一個個執(zhí)執(zhí)行行線線程程具具有有一一個個時時間間片片的的值值,,以以記記錄錄可可以以使使用用CPU多多少少時時間間,,每每一一次次時時間間中中斷斷跑跑起起來來,,時時間間片片值值就就減減一一,,當當時時間間片片值值用用完完之之后后,,就就會會切切換換到到另另外外一一個個任任務務。。PFRRS((priorityfirstwithroundscheduling))就就是是PFS加加上上RRS,,優(yōu)優(yōu)先先權權有有高高低低的的時時候候,,采采用用PFS,,若若優(yōu)優(yōu)先先權權相相同同,,則則采采用用RRS輪輪流流執(zhí)執(zhí)行行。。執(zhí)行行調調度度策策略略呢呢可可以以在在每每一一個個時時間間中中斷斷的的時時候候,,每每一一個個標標記記((tick))開開始始運運行行的的時時候候執(zhí)執(zhí)行行,,但但這這樣樣太太頻頻繁繁;;也也可可以以在在一一個個任任務務執(zhí)執(zhí)行行完完((即即時時間間片片值值為為零零))的的時時候候執(zhí)執(zhí)行行調調度度策策略略;;另另外外,,還還有有調調用用exit、、sleep、、waitevent、、giveupCPU等等時時候候,,都都會會去去執(zhí)執(zhí)行行調調度度策策略略。。實時時調調度度下面面的的圖圖演演示示多多任任務務是是如如何何被被時時實實操操作作系系統(tǒng)統(tǒng)調調度度的的。。假假設設RTOS自自己己已已經(jīng)經(jīng)建建立立了了一一個個空空閑閑任任務務idletask,,它它只只在在沒沒有有其其他他任任務務執(zhí)執(zhí)行行的的時時候候才才被被執(zhí)執(zhí)行行。。RTOSidletask總總是是處處于于可可以以執(zhí)執(zhí)行行的的狀狀態(tài)態(tài)((它它不不會會因因為為等等待待外外設設資資源源而而被被阻阻塞塞,而而是是處處于于一一種種隨隨時時待待命命的的狀狀態(tài)態(tài))),,通通常??湛臻e閑任任務務就就是是檢檢查查整整個個系系統(tǒng)統(tǒng)還還有有哪哪些些資資源源應應該該回回收收或或是是該該做做些些默默認認的的系系統(tǒng)統(tǒng)動動作作。。圖12-6下面面來來看看看看上上圖圖所所示示的的多多任任務務實實時時調調度度過過程程::1.初初始始狀狀態(tài)態(tài),,定定時時器器控控制制任任務務vControlTask和和處處理理鼠鼠標標任任務務vMouseHandlerTask都都不不能能被被執(zhí)執(zhí)行行,,vControlTask等等待待合合適適的的時時間間開開始始新新的的控控制制循循環(huán)環(huán),,vMouseHandlerTask等等待待鼠鼠標標按按下下。。處處理理器器時時間間分分配配給給RTOS的的idletask。。2.在在t1時時刻刻,,一一個個鼠鼠標標鍵鍵按按下下,,事事件件發(fā)發(fā)生生,,VMouseHandlerTask任任務務現(xiàn)現(xiàn)在在可可以以執(zhí)執(zhí)行行,,它它比比RTOS的的idletask有有更更高高的的優(yōu)優(yōu)先先級級,,所所以以處處理理器器分分配配時時間間給給它它。。3.在在t2時時刻,,vMouseHandlerTask已已經(jīng)完完成了了對按按鍵的的處理理,并并更新新了顯顯示輸輸出。。它不不能繼繼續(xù),,直到到下一一次鼠鼠標鍵鍵被按按下,,所以以必須須掛起起它自自己。。RTOSidletask被恢恢復執(zhí)執(zhí)行。。4.在在t3時時刻,,一個個定時時器事事件預預示可可以執(zhí)執(zhí)行下下一個個控制制循環(huán)環(huán)了。。VControlTask現(xiàn)在在可以以執(zhí)行行,作作為最最高優(yōu)優(yōu)先級級的任任務被被立刻刻分配配到處處理器器時間間。5.在在t3和和t4之間間,當當vControlTask任務務還在在執(zhí)行行的時時候,,一個個鼠標標鍵按按下。。MouseHandlerTask不能能被執(zhí)執(zhí)行,,因為為它沒沒有vControlTask的的優(yōu)先先級高高。不不能分分配到到任何何處理理器時時間。。6.在在t4時時刻,,vControlTask完成成了控控制循循環(huán)的的處理理,不不能夠夠重新新開始始,直直到下下一個個時間間事件件出現(xiàn)現(xiàn),所所以它它自己己掛起起自己己。而而vMouseHandlerTask現(xiàn)現(xiàn)在是是最高高優(yōu)先先級的的任務務,可可以運運行了了,所所以,,為了了處理理先前前的鼠鼠標鍵鍵輸入入事件件,分分配到到了處處理器器時間間。7.在在t5時時刻,,鼠標標鍵已已經(jīng)被被處理理。VMouseHandlerTask為了了等待待下一一個鼠鼠標鍵鍵事件件,掛掛起自自己?!,F(xiàn)在在,兩兩個任任務再再度不不能執(zhí)執(zhí)行。。RTOSidletask分配配到時時間。。8.在在t5和和t6之間間,一一個定定時器器事件件被處處理,,但是是沒有有更多多的鼠鼠標事事件出出現(xiàn)。。9.下下一一個鼠鼠標鍵鍵按下下出現(xiàn)現(xiàn)在t6時時刻,,但在在vMouseHandlerTask完完成處處理鍵鍵之前前,一一個定定時器器事件件出現(xiàn)現(xiàn)了?!,F(xiàn)在在兩個個任務務都能能被執(zhí)執(zhí)行,,而vControlTask比比vMouseHandlerTask有有更更多的的優(yōu)先先級,,所以以vMouseHandlerTask在在它完完成處處理鍵鍵盤之之前就就被掛掛起了了。VControlTask分分配到到處理理器時時間。。10.在在t8時刻刻,vControlTask完完成處處理控控制循循環(huán),,掛起起自己己以等等待下下一個個事件件。VMouseHandlerTask再次次成為為最高高優(yōu)先先級的的任務務,能能夠運運行,,所以以分配配到處處理器器時間間,從從而鼠鼠標鍵鍵按下下事件件處理理能夠夠完成成。11.在在t9時刻刻,vMouseHandlerTask已經(jīng)經(jīng)完成成了對對按鍵鍵的處處理,,并更更新了了顯示示輸出出。它它不能能繼續(xù)續(xù),直直到下下一次次鼠標標鍵被被按下下,所所以必必須掛掛起它它自己己。RTOSidletask又又被恢恢復執(zhí)執(zhí)行。。系統(tǒng)時時鐘節(jié)節(jié)拍中中斷系統(tǒng)時時鐘節(jié)節(jié)拍中中斷是是一種種任務務間切切換的的方法法,一一般稱稱之為為RTOS的TICK((標記記),一般般用tickcount變變量來來度量量時間間。定定時器器中斷斷(RTOStickinterrupt)用用嚴嚴格的的時間間精度度來增增加tickcount,,允許許實時時內核核用一一個指指定的的定時時器中中斷頻頻率精精度來來測量量時間間。每每次tickcount增增加后后,實實時內內核檢檢查查現(xiàn)在在是否否解除除阻塞塞或者者喚醒醒一個個任務務。一一個比比被中中斷的的任務務有更更
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年瓦工工程承攬協(xié)議范本版B版
- 2024年貨物買賣合同(含運輸)
- 2025版知識產(chǎn)權許可使用合同協(xié)議書范本
- 2024年資深銷售顧問雇傭合同
- 2024年糧油期貨交易合約
- 2024年特輯:景點門票預訂協(xié)議(適用于在線旅游平臺)
- 2025年工程燈具項目策劃方案報告
- 2025年中國通信電纜行業(yè)市場調查研究及投資戰(zhàn)略研究報告
- 2025年空調項目評估報告
- 2025年花草茶項目可行性研究報告
- 反洗錢述職報告
- 《中國缺血性卒中和短暫性腦缺血發(fā)作二級預防指南2022》解讀
- 廣東省大灣區(qū)2023-2024學年高一上學期期末生物試題【含答案解析】
- 飛機電氣系統(tǒng)電子緒論課件
- 泌尿護士述職報告
- 明細賬(三欄式)模板
- 正大天虹方矩管鍍鋅方矩管材質書
- 2024年山東魯商集團有限公司招聘筆試參考題庫含答案解析
- 妊娠劇吐伴酮癥護理查房課件
- 200#溶劑油安全技術說明書
- 單位洗車房管理制度
評論
0/150
提交評論