版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
嵌入式系統(tǒng)第六講基于C/OS-Ⅱ的軟件設計本節(jié)提要132546基于COS-II擴展RTOS圖形用戶接口設計外設及驅動文件系統(tǒng)的設計系統(tǒng)的消息嵌入式GUI簡介基于COS-II擴展RTOS將COS-II移植到自己的硬件平臺以后,接下來的工作就是對操作系統(tǒng)本身的擴充。介紹如何對COS-II進行必要的擴展,建立一個簡單實用的實時操作系統(tǒng)(RTOS)為什么要擴展uCOS-IICOS-II僅僅一個實時多任務的內核,移植了COS-II以后,離實際的應用還是有一段距離的。要想實現(xiàn)一個相對完整、實用的嵌入式的實時多任務操作系統(tǒng)(RTOS),還需要相當多的擴展性的工作。具體的擴展工作建立文件系統(tǒng);外設及驅動程序的實現(xiàn);基于Unicode漢字庫的實現(xiàn)方法;基本繪圖函數(shù)的實現(xiàn);其它實用API函數(shù);基于COS-II擴展RTOS的體系結構1.系統(tǒng)外圍設備的硬件部分系統(tǒng)外圍設備的硬件部分包括:液晶顯示屏(LCD)、USB通信模塊、鍵盤、海量Flash存儲器、系統(tǒng)的時鐘和日歷。外圍設備的硬件部分是保證系統(tǒng)實現(xiàn)指定任務的最底層的部件。2、驅動程序模塊驅動程序是連接底層的硬件和上層的API函數(shù)的紐帶,有了驅動程序模塊,就可以把操作系統(tǒng)的API函數(shù)和底層的硬件分離開來。硬件的改變、刪除或者添加,只需要隨之改變、刪除或者添加提供給操作系統(tǒng)的相應的驅動程序就可以了。而不會影響到API函數(shù)的功能,更不會影響到用戶的應用程序。3.操作系統(tǒng)的API函數(shù)在操作系統(tǒng)中提供標準的應用程序接口(API)函數(shù),可以加速用戶應用程序的開發(fā),統(tǒng)一應用程序的標準,同時也給操作系統(tǒng)版本的升級帶來了方便。在API函數(shù)中,提供了大量的常用模塊,可以大大簡化用戶應用程序的編寫。4.實時操作系統(tǒng)的多任務管理C/OS-Ⅱ作為操作系統(tǒng)的內核,主要的任務就是完成多任務之間的調度和同步。5.系統(tǒng)的消息隊列這里所說的系統(tǒng)的消息隊列是以C/OS-Ⅱ的消息隊列派生出來的系統(tǒng)消息傳遞機制,用來實現(xiàn)系統(tǒng)的各個任務之間、用戶應用程序的各個任務之間以及用戶應用程序和系統(tǒng)的各個任務之間的通信。6.系統(tǒng)任務系統(tǒng)任務主要包括液晶顯示屏(LCD)的刷新任務、系統(tǒng)鍵盤掃描任務。這兩個任務是操作系統(tǒng)的基本任務,隨著操作系統(tǒng)的啟動而運行。7.用戶應用程序用戶的應用程序建立在系統(tǒng)的主任務(Main_Task)基礎之上。用戶應用程序主要通過調用系統(tǒng)的API函數(shù)對系統(tǒng)進行操作,完成用戶的要求。在用戶的應用程序中也可以創(chuàng)建用戶自己的任務。任務之間的協(xié)調主要依賴于系統(tǒng)的消息隊列。用戶應用程序的建立在嵌入式硬件平臺的基礎上,有了實時多任務操作系統(tǒng)來管理硬件資源、進行任務協(xié)調,在操作系統(tǒng)平臺上使用操作系統(tǒng)所提供的GUI(圖形用戶接口)及API(應用程序接口)函數(shù)來編制自己相應的用戶應用程序了。嵌入式系統(tǒng)上運
行的應用程序的結構以ARM7TDMI結構的處理器為例,它不帶有MMU(內存管理單元)。所以,操作系統(tǒng)和應用程序是編譯在一起運行的。系統(tǒng)的啟動和運行過程嵌入式控制器硬件初始化操作系統(tǒng)初始化LCD初始化裝載字庫調用系統(tǒng)配置文件創(chuàng)建任務初始化用戶界面、時鐘啟動多任務調度主任務用戶程序消息處理任務1任務n……本節(jié)提要132546基于COS-II擴展RTOS圖形用戶接口設計外設及驅動文件系統(tǒng)的設計系統(tǒng)的消息嵌入式GUI簡介圖形用戶接口函數(shù)基于32位嵌入式處理器的硬件平臺,有著較高的運算速度和大容量的內存。為人機交互建立GUI無疑為最首選的方式。本小節(jié)將建立針對常用的圖形界面的應用建立相應的API函數(shù)。主要包括:基本繪圖函數(shù)?;赨nicode的漢字字庫典型的控件繪圖API函數(shù)繪圖是操作系統(tǒng)的圖形界面的基礎,本系統(tǒng)為圖形界面提供了豐富的繪圖函數(shù)。在多任務操作系統(tǒng)中,繪圖設備上下文(DC)是繪圖的關鍵。繪圖設備上下文(DC)保存了每一個繪圖對象的相關參數(shù)(比如:繪圖畫筆的寬度、繪圖的原點坐標等)。在多任務操作系統(tǒng)中,通過繪圖設備上下文(DC)來繪圖,可以保證在不同的任務繪圖的參數(shù)是相互獨立的,不會互相影響。DC的定義typedef
struct{
int
DrawPointx;
int
DrawPointy;//繪圖所使用的坐標點
int
PenWidth; //畫筆寬度
U32PenMode;//畫筆模式
U32PenColor; //畫筆的顏色
int
DrawOrgx; //繪圖的坐標原點位置
int
DrawOrgy;
int
DrawRangex; //繪圖的區(qū)域范圍
int
DrawRangey; U8bUpdataBuffer; //是否更新后臺緩沖區(qū)
U32Fontcolor;//字符顏色}DC,*PDC;DC的初始化在繪圖設備上下文(DC)中保存了每一個繪圖對象的相關參數(shù)。在系統(tǒng)啟動的時候,通過調用initOSDC()函數(shù)初始化繪圖設備上下文(DC),為以后創(chuàng)建繪圖設備上下文(DC)分配存儲空間。DC的使用典型的繪圖函數(shù)(a)voidinitOSDC();PDCCreateDC();voidDestoryDC(PDC
pdc);voidMoveTo(PDC
pdc,intx,inty);voidLineTo(PDC
pdc,intx,inty);voidDrawRectFrame(PDC
pdc,int
left,inttop,intright,intbottom);voidCircle(PDC
pdc,intx0,inty0,intr);典型的繪圖函數(shù)(b)voidSetDrawOrg(PDC
pdc,int
x,inty,int*oldx,int*oldy)設置繪圖設備上下文(DC)的原點典型的繪圖函數(shù)(c)voidSetDrawRange(PDC
pdc,int
x,inty,int*oldx,int*oldy)設置繪圖設備上下文(DC)的繪圖范圍x,y:設定的橫向、縱向繪圖的范圍,如果x(或者y)為1,則表示x(或者y)方向的比例隨著y(或者x)方向的范圍按比例縮放。如果參數(shù)為-1,表示方向相反DC創(chuàng)建PDCpdc;pdc=CreateDC();DC設置舉例PDCpdc;pdc=CreateDC();SetDrawOrg(pdc,170,50,&oldx,&oldy);SetDrawRange(pdc,800,-1,&oldxrange,&oldyrange);上面的程序代碼創(chuàng)建一個繪圖設備上下文(DC),將原點坐標設定在液晶屏設備坐標的(170,50),并把繪圖的邏輯坐標的水平值設置成800,垂直范圍按照液晶屏實際的橫縱比例縮放?;赨nicode的字庫什么是Unicode使用Unicode的優(yōu)點字符的存儲方式編寫Unicode的程序Unicode字模的提取Unicode字庫的顯示及相關函數(shù)什么是UnicodeUnicode是統(tǒng)一編碼的緊縮寫法世界上常用的編碼系統(tǒng)有數(shù)百種之多,但所有的這些編碼系統(tǒng),沒有哪一個能有足夠的字符,可以適用于多種語言文本由于編碼不統(tǒng)一,這些編碼系統(tǒng)之間經常相互沖突Unicode出現(xiàn)改變了這一切在Unicode的雙字節(jié)版本中(UTF-16)使用的是16位編碼方式,可提供65,000多個字符代碼指針使用Unicode的優(yōu)點使用Unicode避免了亂碼的產生,使得國際間文本數(shù)據(jù)交換成為可能解決了多語言文本同平面共存的問題實現(xiàn)了軟件的全球化,避免了軟件產品在貫穿多個平臺、語言和國家時的重建字符的存儲方式
在圖形操作系統(tǒng)中,字符(包括:中文、英文)通常有2種存儲方式。一種方式存儲的是字符的圖形點陣另一種方式是存儲漢字的矢量圖形
在嵌入式處理中,因為處理器的性能和嵌入式系統(tǒng)資源還不如PC機,而且,嵌入式只是針對專一控制而應用的系統(tǒng)。基本上,沒有必要使用矢量字庫。編寫Unicode的程序
Windows2000及其以后的系統(tǒng)版本,默認的字符處理方式是UnicodeWindows平臺上,有大量豐富的字符資源Windows2000及其以后的系統(tǒng)版本中,提取Unicode字符點陣無疑成了最好的選擇。Unicode字庫分配
本系統(tǒng)中編碼采用雙字節(jié)版本的Unicode格式收集了ASCII字符(0x0000-0x00ff)256個特殊圖形符號(0x2600-0x267f和0x2700-0x27bf)320個中文字符(0x4e00-0x9fff)20992個。Unicode字庫相關函數(shù)
轉換函數(shù)voidInt2Unicode(intnumber,U16str[]);intUnicode2Int(U16str[]);voidstrChar2Unicode(U16ch2[],constcharch1[]);輸出函數(shù)voidTextOut(PDC
pdc,intx,inty,U16*ch,U8bunicode,U8fnt);voidTextOutRect(PDC
pdc,structRECT*prect,U16*ch,U8bunicode,U8fnt)
典型的控件 控件是可視化開發(fā)的基礎。對于開發(fā)應用程序的用戶來說,控件是一個獨立的組件,它有著自己的顯示方式,自己的動態(tài)內存管理模式,甚至有的控件還可以向系統(tǒng)發(fā)送自己的消息。用戶不需要掌握控件的內部到底是如何工作的,用戶只需要通過控件提供的API函數(shù),改變控件相應的屬性,從而改變控件的顯示方式??丶囊肟梢苑奖阌脩舻拈_發(fā),加速用戶應用程序界面的編寫速度。為運行在操作系統(tǒng)上的應用程序的界面提供了統(tǒng)一的標準,方便了使用。系統(tǒng)中的控件文本框控件列表框控件圖片框控件按鈕控件窗體控件的使用流程通用的系統(tǒng)控件對一個通用的系統(tǒng)控件,包含了如下的數(shù)據(jù)結構:
typedef
struct{ U32CtrlType; //控件的類型
U32CtrlID; //控件的ID
structRECT
ListCtrlRect;//控件的位置和大小
U32FontSize; //控件的字符大小
U32style; //控件的的邊框風格
U8bVisible; //是否可見
}OS_Ctrl;本節(jié)提要132546基于COS-II擴展RTOS圖形用戶接口設計外設及驅動文件系統(tǒng)的設計系統(tǒng)的消息嵌入式GUI簡介什么是文件系統(tǒng)(FileSystem)文件系統(tǒng)的定義
——處理文件的操作系統(tǒng)的部分稱為文件系統(tǒng).是操作系統(tǒng)中統(tǒng)一管理信息資源的一種軟件,管理文件的存儲、檢索、更新,提供安全可靠的共享和保護手段,并且方便用戶使用文件系統(tǒng)的功能
——文件的構造、命名、存取、采用、保護和實現(xiàn)等。文件系統(tǒng)的存儲媒質
——磁盤、軟盤、光盤、FLASH盤等等文件系統(tǒng)的發(fā)展DOS1.0(1981)DOS3.0(1984)Win95(1995)Win95Osr2(1996)Win98(1998)Win3.1(1992)FAT12FAT16VFATFAT32FAT12/FAT16/FAT32的比較FAT12FAT16FAT32SizeofFATentry12bits16bits32bitsMaxnumofclusters4,08665,526268,435,456Clustersizeused0.5KB-4KB2KB-32KB4KB-32KB最大磁盤容量16,736,256
(16M)2,147,123,200
(2G)about2^41
(2T)基于FLASH的嵌入式文件系統(tǒng)FLASH讀寫的特點(1)必須以Page為單位進行讀寫;(2)寫之前必須先擦除原有內容;(3)擦除操作必須對Block進行,即一次至少擦除一個Block的內容針對這種情況,將Flash的一個Page定為1個扇區(qū),將其1個Block,32個扇區(qū)定為一個簇,這樣,簇的容量剛好為512*32=16K,滿足FAT16對簇大小的要求FLASH文件系統(tǒng)的要求(1)掉電安全:嵌入式系統(tǒng)的運行環(huán)境一般比較惡劣,但同時又要求有較高的可靠性。這就對FLASH文件系統(tǒng)進出了較高的要求,無論程序崩潰或系統(tǒng)掉電,都不能影響文件系統(tǒng)的一致性和完整性,文件系統(tǒng)的寫入、垃圾回收等操作對系統(tǒng)異常中止都非常敏感,極易造成數(shù)據(jù)丟失和數(shù)據(jù)垃圾,在文件系統(tǒng)設計和選用時應考慮;(2)平均使用(wear-leveling):由于FLASH扇區(qū)的擦除次數(shù)有限制,要求能夠均勻使用各扇區(qū),以延長FLASH的使用壽命;(3)高效垃圾回收(garbagecollection):任何存儲器在分配使用一段時間后,都會出現(xiàn)空區(qū)和碎片數(shù)據(jù),為保證存儲空間的使用率。方法是先移動扇區(qū)數(shù)據(jù),再擦除整個扇區(qū);(4)低空間消耗(lovoverhead):指文件系統(tǒng)管理結構在FLASH存儲器上的空間消耗,該空間用于FS建立,而不能用于實際數(shù)據(jù)的存儲,可以提高有用數(shù)據(jù)的存儲空間FLASH文件系統(tǒng)的分類(1)集中管理文件系統(tǒng)特點:存儲器空間的使用信息集中存放在存儲器的某個地方,存儲器的其它區(qū)域用于存放數(shù)據(jù),數(shù)據(jù)必須依賴關鍵信息區(qū)才能被索引和使用缺點:需要大量緩存空間,當某扇區(qū)需要更新時,先將扇區(qū)數(shù)據(jù)備份到RAM中,再進行擦除操作,最后將修改后的備份寫入FLASH,缺點是難以保證掉電安全,不能均勻使用存儲器空間,特別是關鍵信息區(qū),對文件系統(tǒng)的使用個性都會改寫該區(qū),導致FLASH快速損壞;FLASH文件系統(tǒng)的分類(2)線性文件系統(tǒng)概述:每個文件相關的信息都連續(xù)存放在存儲器中,實現(xiàn)簡單,讀寫快速,文件系統(tǒng)的關鍵信息分布存放;優(yōu)點:安全性好;能保證存儲器的平均使用,延長了FLASH的使用壽命;缺點:對文件操作效率低,不易實現(xiàn)添加、插入、剪切等操作;FLASH文件系統(tǒng)的分類(3)日志文件系統(tǒng)概述:日志結構的文件系統(tǒng)使用順序的、只增的日志作為磁盤上唯一的組織文件系統(tǒng)數(shù)據(jù)的結構,文件的描述可以仍采用傳統(tǒng)的索引組織方式。方法是在內存中將幾次FS的修改匯集成一個大的日志條目(被稱為段映像),然后動態(tài)分配磁盤空間并通過一次寫操作寫到磁盤上的一個連續(xù)的、固定大小的日志段(Segment)中。并定時或當系統(tǒng)發(fā)出同步寫請求時保證日志同步寫到磁盤上;優(yōu)點:恢復快速。幾種開源的FLASH文件系統(tǒng)TFS(TinyFileSystem)概述:TFS是由原Lucent公司的EdSutter開發(fā)的嵌入式系統(tǒng)引導平臺Umon的一部分。TFS是一種線性結構的文件系統(tǒng),由多個存放的文件塊組成。一個文件塊包含一個文件的所有信息。優(yōu)點:TFS提供了掉電安全機制和垃圾回收機制,需要額外的輔助空間,用于垃圾回收時的文件緩存和過程狀態(tài),如果出現(xiàn)終止,系統(tǒng)根據(jù)輔助空間的信息進行文件系統(tǒng)的恢復;缺點:文件的插入、剪切和個性需要較大的運行開銷,即使是很小的修改,也要求將整修文件重寫幾種開源的FLASH文件系統(tǒng)JFFS(JournalingFlashFileSystem)概述:由瑞典Axis通信公司開發(fā)的文件系統(tǒng),主要針對NOR型Flash存儲器設計,提供了掉電安全,平均使用等特性,是基于Linux,由于遵循GPL開放源代碼,易實現(xiàn)移植;FAT16文件系統(tǒng)基本結構FAT文件系統(tǒng)由下面四部分組成保留區(qū)Reservedregion存放引導記錄,BIOS信息等FAT區(qū)FAT信息列表
(12/16/32bits)根目錄區(qū)目錄信息列表
(32bytes)文件和目錄區(qū)存放簇信息reservedFAT(p)FAT(b)RootdirFileanddirectory……保留區(qū)ReservedRegion引導記錄基本信息
……引導代碼BIOS參數(shù)塊
(BPB)字節(jié)/扇區(qū)(512,1024,2048,4096)扇區(qū)/簇(1,2,4,8,16,32,64,128)根目錄數(shù)總扇區(qū)值介質類型
(硬盤,軟盤,F(xiàn)LASH)reservedFAT(p)FAT(b)RootdirFileanddirectory……FAT區(qū)通常有
FAT(P)(primary)和FAT(B)(backup)每一個簇都有一個對應的FAT目錄Cluster2Cluster3Clustern-1Clustern……FAT數(shù)據(jù)區(qū)reservedFAT(p)FAT(b)RootdirFileanddirectory………FAT鏈表
(FAT16)……目錄樹FLASH的前兩個BLOCKLBABlock/Page長度內容說明00/0512字節(jié)MBR=BPB+ExcutableCode+55AA(查看內容)1~20/1~0/21024字節(jié)FAT區(qū)(第一份FAT)3~40/3~0/41024字節(jié)FAT區(qū)備份(第二份FAT)5~39H0/5~1/3130K字節(jié)目錄區(qū)(在BPB中調整目錄項數(shù),使其剛好占盡本簇)40H1/32512字節(jié)數(shù)據(jù)區(qū)(因目錄區(qū)占盡一個簇,故數(shù)據(jù)區(qū)始于新簇首扇)建立文件系統(tǒng)COS-II本身不提供文件系統(tǒng),針對嵌入式的應用,為適應大容量數(shù)據(jù)存儲的需要,參考FAT16的格式,可以建立起一套簡單的文件系統(tǒng)。文件系統(tǒng)簡介此文件系統(tǒng)可以保存最多512個文件文件數(shù)據(jù)以簇為單位進行存儲。為了便于管理和提高訪問速度,文件系統(tǒng)中不提供存儲子目錄的管理。文件名的格式為8.3的格式文件名稱均為大寫文件系統(tǒng)的組織形式文件的訪問讀取文件的時候,首先在文件目錄表中找到相應的文件所對應的首簇的號碼,讀取完成一個簇以后,如果文件的長度大于16KB(一個簇),就從文件分配表中查找到下一個簇的號碼,然后繼續(xù)讀取,直到文件分配表中的下一個簇號碼為FFFFH時為止文件系統(tǒng)實現(xiàn)過程文件相關的API函數(shù)文件的打開文件的讀取文件的寫入文件的關閉文件的列表文件結構體文件結構體的定義如下:typedef
struct{ U8Buffer[BLOCK_SIZE]; //文件緩沖區(qū)
U32fileblock; //文件當前的簇的位置
U32filemode; //打開文件的模式
U32filebufnum; //文件緩沖區(qū)中已經讀取/寫入的字節(jié)數(shù)
U32fileCurpos; //讀寫的當前位置
U32filesize; //文件的大小}FILE;可見,在FILE結構中包括了文件的緩沖區(qū)和其他的相關信息。OpenOSFile的工作的流程圖OpenOSFile的工作的流程圖
ReadOSFile函數(shù)的程序流程圖
ReadOSFile函數(shù)的程序流程圖
WriteOSFile函數(shù)的程序流程圖WriteOSFile函數(shù)的程序流程圖
CloseOSFile函數(shù)的程序流程圖CloseOSFile函數(shù)的程序流程圖
本節(jié)提要132546基于COS-II擴展RTOS圖形用戶接口設計外設及驅動文件系統(tǒng)的設計系統(tǒng)的消息嵌入式GUI簡介系統(tǒng)消息在多任務操作系統(tǒng)中,各個任務之間,用戶應用程序的各個任務之間以及用戶應用程序和系統(tǒng)的各個任務之間的通常是通過消息來傳遞信息和同步的。消息與任務系統(tǒng)的消息函數(shù)voidinitOSMessage();POSMSGOSCreateMessage(U32Message,U32wparam,U32lparam);U8SendMessage(POSMSGpmsg);POSMSGWaitMessage(INT16Utimeout);voidDeleteMessage(POSMSG
pMsg);消息結構typedef
struct{ U32Message; U32WParam; U32LParam;}OSMSG,*POSMSG;其中,Message成員說明了系統(tǒng)的消息類型。WParam和LParam是系統(tǒng)消息傳遞的相應的參數(shù)。對于不同的消息有不同的意義。系統(tǒng)的消息循環(huán)在系統(tǒng)的主任務中可以使用如下的代碼來實現(xiàn)消息循環(huán):
POSMSGpMsg=0; //消息循環(huán)
for(;;){
pMsg=WaitMessage(0);//等待消息
switch(pMsg->Message){ caseXXX: //需要處理的消息
……//消息處理過程
break; }
DeleteMessage(pMsg);//刪除消息,釋放資源
}本節(jié)提要132546基于COS-II擴展RTOS圖形用戶接口設計外設及驅動文件系統(tǒng)的設計系統(tǒng)的消息嵌入式GUI簡介外設及驅動程序外設驅動程序可以對系統(tǒng)提供訪問外圍設備的接口,把操作系統(tǒng)(軟件)和外圍設備(硬件)分離開來。當外圍設備改變的時候,只需更換相應的驅動程序,不必修改操作系統(tǒng)的內核以及運行在操作系統(tǒng)中的軟件。本小節(jié)中,將建立幾種典型外設的驅動程序標準接口。串行口 串行口符合RS-232標準,通訊的最高速度可以達到115200bps。串行口的接口函數(shù)如下:voidUart_Init(int
Uartnum,int
mclk,intbaud);voidUart_Printf(char*fmt,...);charUart_Getch(char*Revdata,int
Uartnum,inttimeout);voidUart_SendByte(int
Uartnum,intdata);液晶顯示驅動程序液晶屏是內部有控制電路的液晶模塊分辨率320x240使用雙緩沖機制顯示緩沖區(qū)在系統(tǒng)的內存里開辟了一塊內存作為液晶屏顯示的后臺緩沖區(qū)LCDBuffer,其定義如下:U32LCDBuffer[LCDHEIGHT][LCDWIDTH];其中,LCDBuffer為按雙字映射存儲的緩沖區(qū)(即:每四個字節(jié)表示一個點),寫入的時候調用液晶屏的voidLCD_Refresh()函數(shù),就可以把緩沖區(qū)的內容顯示在液晶屏上。因為緩沖區(qū)是按雙字存儲的,所以LCDBuffer[y][x]對應的就是屏幕點(x,y)的像素值,每一個點用一個32位的整數(shù)表示,可以滿足實現(xiàn)32位真彩色圖片的顯示,保證不同的液晶屏的兼容性。不同的液晶屏只需要更新LCD320.c和LCD320.h文件中的驅動程序即可液晶模塊的控制液晶模塊有兩種工作模式:圖形方式:在圖形方式下,模塊上的緩沖區(qū)映射的是液晶屏上顯示的圖形點陣文本方式:在文本模式下,模塊上的緩沖區(qū)對應的是液晶屏上顯示的文本字符,包括:英文字符和英文標點符號。液晶屏的操作主要包括:初始化、設置液晶屏的工作模式(文本或者圖形)、更新顯示、開啟(或者關閉)背光。液晶驅動程序接口voidLCD_Init(void);voidLCD_printf(char*fmt,...);voidLCD_ChangeMode(U8mode);voidLCD_Refresh();voidLCDBkLight(U8isOpen);鍵盤驅動程序本控制器使用的是4x4的鍵盤(16鍵),在S3C44B0X的GPD端口上由程序掃描控制,無需外圍芯片在操作系統(tǒng)中,鍵盤掃描是通過uCOS-II的專門的一個任務來控制的支持系統(tǒng)的組合按鍵(相當于Ctrl、Shift等),最多可以支持16鍵中所有的功能按鍵同時組合鍵盤驅動接口U32GetKey();低16位為鍵盤號碼,高16位對應功能鍵掃描碼(1有效)。此函數(shù)為死鎖函數(shù),調用以后,除非有按鍵按下,否則,函數(shù)不會返回。voidSetFunctionKey(U16Fnkey);設定功能鍵掃描碼,1有效??梢蕴峁┙M合按鍵。功能鍵不能單獨返回。U32GetNoTaskKey();類似于GetKey(),但是,此函數(shù)不會釋放此任務的控制權,除非有更高級的任務運行。鍵盤消息在系統(tǒng)中,鍵盤有專門的任務來管理。當有按鍵按下的時候就會相應鍵盤消息鍵盤的消息類型為OSM_KEY消息參數(shù)WParam表示系統(tǒng)的鍵盤按鍵號碼LParam表示按鍵時同時按下的功能鍵等待鍵盤消息可以通過如下代碼來等待并處理鍵盤消息POSMSGpMsg=0;//消息循環(huán)for(;;){
pMsg=WaitMessage(0);//等待消息
switch(pMsg->Message){ caseOSM_KEY:
onKey(pMsg->WParam, pMsg->LParam); break; }
DeleteMessage(pMsg);//刪除消息,釋放資源}USB接口USB接口是USB的設備(device)接口,需要和USB的主控(host)接口相連符合USB1.1標準接口系統(tǒng)通過USB供電當系統(tǒng)進入USB連接狀態(tài)后,立刻時關閉了其他所有的正在執(zhí)行的任務,以保證USB和主控設備之間的高速通訊USB連接舉例下面一段代碼給出了連接USB的例子:
EnterUsbConnect(); for(;;){ key=GetNoTaskKey(); if(((key+1)&0xffff)==16){
ExitUsbConnect(); return; } }其它實用API函數(shù)為了便于用戶的應用開發(fā),操作系統(tǒng)還提供了一些常用的API函數(shù)和數(shù)據(jù)結構。主要包括:雙向鏈表的相關API函數(shù)系統(tǒng)的時間相關API函數(shù)系統(tǒng)的圖形相關API函數(shù)雙向鏈表API函數(shù)voidinitOSList();初始化鏈表,為鏈表分配動態(tài)空間voidAddListNode(PList
plist,void*pNode);在指定的位置為鏈表增加一個節(jié)點voidDeleteListNode(PList
pList);刪除鏈表的指定節(jié)點PList
GetLastList(PList
pList);返回鏈表的最后一個節(jié)點系統(tǒng)的時間API函數(shù)voidInitRtc();voidGet_Rtc(PstructTimetime);U8Rtc_IsTimeChange(U32hichChange);voidSet_Rtc(PstructTimetime);voidRtc_Format(char*fmtchar,U16*outstr);圖形相關API函數(shù)voidCopyRect(structRECT*prect1,structRECT*prect2);voidSetRect(structRECT*prect,intleft,inttop,intright,intbottom);voidInflateRect(structRECT*prect,int
cx,intcy);U8IsInRect(structRECT*prect,intx,inty);多任務uCOS-II操作系統(tǒng)上允許同時運行64個任務每一個任務都要有其獨立的??臻g和唯一的任務優(yōu)先級其中,有8個任務被系統(tǒng)的內核使用。另外還有,4個任務被操作系統(tǒng)使用。任務的資源下面的代碼定義了一個New_Task任務所需要的資源:OS_STKNew_Stack[STACKSIZE]={0,}; //New_Task堆棧voidNew_Task(void*Id);//任務函數(shù)#defineNew_Task_Prio20//任務優(yōu)先級任務的創(chuàng)建下面的代碼用于創(chuàng)建New_Task任務:OSTaskCreate(New_Task,(void*)0,(OS_STK*)& New_Stack[STACKSIZE-1],
New_Task_Prio);
任務創(chuàng)建以后,就會處于就緒狀態(tài)。系統(tǒng)在任務調度的時候,總是執(zhí)行處于最高優(yōu)先級的任務。任務的同步 在uCOS-II中有三種方法可以在任務之間傳遞信息,保證任務的同步:信號量郵箱消息隊列信號量以信號量為例,講解兩個任務之間是如何同步的。創(chuàng)建信號量等待信號量發(fā)送信號量創(chuàng)建信號量下面的代碼定義并創(chuàng)建了一個信號量:OS_EVENT*Rtc_Updata_Sem; ……Rtc_Updata_Sem=OSSemCreate(1);OSSemCreate的參數(shù)為1,表示信號量的計數(shù)值是1,即在同一個時間只能有一個資源被獨占。等待信號量下面的代碼用來在一個任務中等待一個信號量(比如:Rtc_Updata_Sem):INT8Uerr; ……OSSemPend(Rtc_Updata_Sem,0,&err);因為定義了Rtc_Updata_Sem中信號量的計數(shù)器為1,所以,一旦用OSSemPend獲得了信號量的控制權,其他的任務就無法得到Rtc_Updata_Sem信號量的控制權了。發(fā)送信號量下面的代碼用來在一個任務中發(fā)送一個信號量(比如:Rtc_Updata_Sem):OSSemPost(Rtc_Updata_Sem);使信號量的計數(shù)器的值加1,因為Rtc_Updata_Sem在創(chuàng)建的時候計數(shù)器的值為1,相當于釋放了一個資源的占有權本節(jié)提要132546基于COS-II擴展RTOS圖形用戶接口設計外設及驅動文件系統(tǒng)的設計系統(tǒng)的消息嵌入式GUI簡介GUI的概念GUI的定義
GraphicsUserInterface,是指計算機與其使用者之間的圖形化對話接口。GUI的主要特征:
——Windows,采用窗口界面,每個窗口是用戶或系統(tǒng)的一個工作區(qū)域。一個屏幕上可以有多個窗口。
——Icons,采用形象化的圖標或圖符,易于操作者理解與操作。
——Menu,采用菜單,可供用戶選擇的功能提示
——PointingDevices,指鼠標器、觸摸屏等,便于用戶直接對屏幕對象進行操作。嵌入式GUI的特點體積小功能強;圖形算法簡潔、快速,占用系統(tǒng)資源少可靠性高;模塊結構,便于移植和定制嵌入式GUI的實現(xiàn)方法1)照需求開發(fā)滿足自身特定需要的GUI系統(tǒng);2)將GUI作為一個軟件層從應用程序中剝離,GUI的支持邏輯由應用程序自己負責;3)設計一個支持大多數(shù)常見的GUI對象的應用編程接口庫,使其具有與其他通用開發(fā)工具相類似的調用方法(如Win32)的GUI系統(tǒng)幾種典型的嵌入式GUICompactX-WindowSystem:可擴展性好、可移植性好,代碼尺寸大Microwindows
:開放源碼的嵌入式GUI軟件,可移植性好,圖形功能出色。OpenGUI
:自由軟件。匯編實現(xiàn)的內核,并利用MMX指令進行了優(yōu)化,OpenGUI運行速度非常快。支持32位處理器,可以在MS-DOS,QNX和Linux下運行。主要用來在這些系統(tǒng)中開發(fā)圖形應用程序和游戲Qt/Embedded:QT庫開發(fā)商Trolltech
推出的面向嵌入式系統(tǒng)的QT版本??梢浦残院茫瑑r格較貴。MiniGUI:自由軟件,面向嵌入式系統(tǒng)或者實時系統(tǒng)的圖形用戶界面支持系統(tǒng)。它主要運行于Linux,還可以運行在任何一種具有POSIX線程支持的POSIX兼容系統(tǒng)上嵌入式GUICompactX-WindowSystem:可擴展性好、可移植性好,代碼尺寸大Microwindows
:開放源碼的嵌入式GUI軟件,可移植性好,圖形功能出色。OpenGUI
:自由軟件。匯編實現(xiàn)的內核,并利用MMX指令進行了優(yōu)化,OpenGUI運行速度非??臁VС?2位處理器,可以在MS-DOS,QNX和Linux下運行。主要用來在這些系統(tǒng)中開發(fā)圖形應用程序和游戲Qt/Embedded:QT庫開發(fā)商Trolltech
推出的面向嵌入式系統(tǒng)的QT版本??梢浦残院?,價格較貴。Min
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 營銷策劃委托合同三篇
- 工程免責合同范本
- 南昌串串香加盟合同范本
- 拍賣協(xié)議合同范本
- 材料包工合同范本
- 下沉廣場地面施工合同范本
- 體育賽事風險分級管控管理制度
- 幼兒園師生關系改善方案
- 北京社會化職業(yè)生涯指導方案
- 土木工程樁機選型方案
- 最新種植新病歷
- 水聯(lián)動試車方案(共33頁)
- 高效電池片(TOPCon)生產項目可行性研究報告模板-提供甲乙丙資質資信
- INPLAN操作培訓PPT課件
- VB和Oracle的鏈接
- 代理報關委托書
- 小學美術四年級質量檢測試卷(共3頁)
- 青少年科學調查體驗活動分析報告
- 大班科學四季的變化ppt課件
- 建設部211文件
- 16種多環(huán)芳烴簡介
評論
0/150
提交評論