系統(tǒng)的消息循環(huán)
一、 實(shí)驗(yàn)?zāi)康?BR>學(xué)習(xí)使用系統(tǒng)的消息循環(huán)。掌握如何通過(guò)系統(tǒng)的消息循環(huán)來(lái)響應(yīng)鍵盤(pán)的消息,同時(shí)學(xué)會(huì)
使用圖形模式下的液晶屏文字顯示函數(shù)。最終實(shí)現(xiàn)按不同的鍵,在屏幕上顯示不同的文字;
同時(shí),把鍵盤(pán)的按鍵號(hào)碼輸出到PC 機(jī)的終端顯示。
二、實(shí)驗(yàn)內(nèi)容
通常在多任務(wù)操作系統(tǒng)中,任務(wù)之間的通訊是通過(guò)任務(wù)之間發(fā)送消息來(lái)實(shí)現(xiàn)的。在本操
作系統(tǒng)的Main_Task 任務(wù)中,定義了一個(gè)消息隊(duì)列。本次實(shí)驗(yàn)將通過(guò)使用這個(gè)消息隊(duì)列接收
鍵盤(pán)的按鍵消息,并把鍵盤(pán)的按鍵顯示在液晶屏和PC 機(jī)的終端上。
三、預(yù)備知識(shí)
1、用ARM SDT 2.5 集成開(kāi)發(fā)環(huán)境,編寫(xiě)和調(diào)試程序的基本過(guò)程。
2、基于操作系統(tǒng)的應(yīng)用程序的框架結(jié)構(gòu)。
3、會(huì)使用Source Insight 3 編輯C 語(yǔ)言源程序
4、操作系統(tǒng)的繪圖API 函數(shù)和繪圖設(shè)備上下文(DC)的使用
四、實(shí)驗(yàn)設(shè)備及工具(包括軟件調(diào)試工具)
硬件:ARM 嵌入式開(kāi)發(fā)板、用于ARM7TDMI 的JTAG 仿真器、PC 機(jī)Pentumn100 以
上
軟件:PC 機(jī)操作系統(tǒng)win98、ARM SDT 2.51 集成開(kāi)發(fā)環(huán)境、仿真器驅(qū)動(dòng)程序、Source
Insight 3.0、超級(jí)終端通訊程序、USB 下載程序
五、實(shí)驗(yàn)步驟
1、在ARM SDT 2.51 中,使用實(shí)驗(yàn)一中創(chuàng)建好的模板,新建一個(gè)項(xiàng)目work1。把操作
系統(tǒng)的所需要的頭文件(*.h)和庫(kù)文件(*.alf)加入工程中。
2、用Source Insight 3 創(chuàng)建一個(gè)工程,把work1 中的C 語(yǔ)言源文件文件加入。
3、打開(kāi)Main.c 文件,仔細(xì)閱讀Key_Scan_Task 函數(shù)——系統(tǒng)的鍵盤(pán)掃描函數(shù)。理解系
統(tǒng)中Main_Task 任務(wù)消息隊(duì)列的創(chuàng)建和發(fā)送的過(guò)程。
void Key_Scan_Task(void *Id)
{
U32 key;
POSMSG pmsg;
for (;;){
key=GetKey();
pmsg=OSCreateMessage(OSM_KEY,(key+1)0xffff,key>>16);
if(pmsg)
SendMessage(pmsg);
}
}
4、在Main_Task 任務(wù)中加入代碼,實(shí)現(xiàn)消息循環(huán)。即:等待消息、處理(響應(yīng))消息、
刪除消息。具體的流程圖如圖所示。
提示:
⑴ 使用WaitMessage 接收消息,通常等待時(shí)間設(shè)置為無(wú)限長(zhǎng)。
⑵ 如圖4-1 所示,系統(tǒng)的消息循環(huán)是一個(gè)無(wú)限循環(huán)。
⑶ 系統(tǒng)的消息結(jié)構(gòu)定義如下:
typedef struct {
U32 Message;
U32 WParam;
U32 LParam;
}OSMSG, *POSMSG;
收到消息以后(即,WaitMessage 函數(shù)返回),通過(guò)判斷消息結(jié)構(gòu)中Message 的成
員來(lái)判斷消息類(lèi)型。如果是鍵盤(pán)消息,則Message 的值為OSM_KEY,WParam 參數(shù)存
儲(chǔ)的是按鍵的號(hào)碼,LParam 參數(shù)存儲(chǔ)的是同時(shí)系統(tǒng)按下的功能鍵(如果沒(méi)有,則為0)。
⑷ 開(kāi)始等待下一條消息之前必須使用DeleteMessage 刪除消息,釋放系統(tǒng)的內(nèi)存
空間。
5、編寫(xiě)鍵盤(pán)消息響應(yīng)函數(shù),處理鍵盤(pán)的消息。當(dāng)有鍵盤(pán)消息收到的時(shí)候,把按鍵號(hào)碼
顯示在液晶屏上,同時(shí),發(fā)送給PC 機(jī)的終端。
提示:
⑴ 使用TextOut 函數(shù)在液晶屏的圖形方式下繪圖。此函數(shù)輸出的字符數(shù)組必須是
基于雙字節(jié)Unicode 編碼的。
⑵ 使用Int2Unicode 函數(shù)完成整型變量到Unicode 字符串的轉(zhuǎn)換。
⑶ 通過(guò)Uart_SendByte 函數(shù)向串行口發(fā)送一個(gè)字節(jié)的數(shù)據(jù)
6、用ARM SDT 2.5 編譯、下載并調(diào)試上述程序,檢查運(yùn)行結(jié)果
7、生成發(fā)行版本的.bin 文件,通過(guò)USB 下載到嵌入式開(kāi)發(fā)板中,運(yùn)行并檢查輸出結(jié)果。
評(píng)論