【正文】
t process are passed on to an API function named DefWindowProc, which provides default responses to unprocessed messages. Messages, Messages, and More MessagesWhere do messages e from, and what kinds of information do they convey? Windows defines hundreds of different message types. Most messages have names that begin with the letters WM and an underscore, as in WM_CREATE and WM_PAINT. These messages can be classified in various ways, but for the moment classification is not nearly as important as realizing the critical role messages play in the operation of an application. The following table shows 10 of the most mon messages. A window receives a WM_PAINT message, for example, when its interior needs repainting. One way to characterize a Windows program is to think of it as a collection of message handlers. To a large extent, it is a program39。s upper right corner), or selected Close from the window39。[J].廣州致遠(yuǎn)電子有限公司,2008年[6] 張晶,[J].嵌入式操作系統(tǒng)應(yīng)用,2008年5月:39一42[7] 程序設(shè)計(jì)VisualC++++[J].電子工業(yè)出版社,2000年12月 [8] ++[J].清華大學(xué)出版社,2006年[9] ++入門、進(jìn)階與應(yīng)用實(shí)例[J].人民郵電出版社,2007年外文資料翻譯及原文翻譯原文The Windows Programming ModelPrograms written for traditional operating environments use a procedural programming model in which programs execute from top to bottom in an orderly fashion. The path taken from start to finish may vary with each invocation of the program depending on the input it receives or the conditions under which it is run, but the path remains fairly predictable. In a C program, execution begins with the first line in the function named main and ends when main returns. In between, main might call other functions and these functions might call even more functions, but ultimately it is the program—not the operating system—that determines what gets called and when. Windows programs operate differently. They use the eventdriven programming model illustrated in Figure 11, in which applications respond to events by processing messages sent by the operating system. An event could be a keystroke, a mouse click, or a mand for a window to repaint itself, among other things. The entry point for a Windows program is a function named WinMain, but most of the action takes place in a function known as the window procedure. The window procedure processes messages sent to the window. WinMain creates that window and then enters a message loop, alternately retrieving messages and dispatching them to the window procedure. Messages wait in a message queue until they are retrieved. A typical Windows application performs the bulk of its processing in response to the messages it receives, and in between messages, it does little except wait for the next message to arrive. The message loop ends when a WM_QUIT message is retrieved from the message queue, signaling that it39。在此一并致謝。最后感謝我的父母,在我最困難的時(shí)候,他們始終給我最有力的支持和理解。其次需要感謝計(jì)算機(jī)一班的同學(xué)們,四年的同窗生涯,在學(xué)習(xí)生活上給了我許多無(wú)私熱情的幫助。從吳老師那里,不僅學(xué)到了許多的專業(yè)知識(shí),而且學(xué)會(huì)了一些學(xué)習(xí)的方法和為人處事的道理,對(duì)我以后的工作學(xué)習(xí),影響是非常深遠(yuǎn)的。在這寶貴的四年時(shí)光里,吳老師淵博的知識(shí)、嚴(yán)謹(jǐn)?shù)慕虒W(xué)態(tài)度令我欽佩不已。首先我要深深的感謝我的恩師吳磊老師,在本次設(shè)計(jì)期間給予我悉心的指導(dǎo)。致謝時(shí)光飛逝,四年的大學(xué)生活轉(zhuǎn)瞬即逝。3. 作為基于winCE嵌入式程序的開發(fā),提供了一個(gè)完整的過(guò)程,從一開始定制內(nèi)核到下載內(nèi)核,程序的編寫直至最后程序在板子上調(diào)試運(yùn)行給初學(xué)者帶來(lái)了一個(gè)整體的指導(dǎo),方便學(xué)習(xí)基于winCE嵌入式??偨Y(jié)與展望本論文描述了基于winCE設(shè)計(jì)思想開發(fā)的貪吃蛇游戲功能,采用了軟硬件相結(jié)合的嵌入式設(shè)計(jì)方案,開拓了自己對(duì)嵌入式領(lǐng)域的認(rèn)知,最后經(jīng)過(guò)一系列的功能測(cè)試,下載內(nèi)核,調(diào)試實(shí)驗(yàn)開發(fā)板,完成了能夠在實(shí)驗(yàn)板上運(yùn)行的貪吃蛇游戲,總體來(lái)說(shuō),本次設(shè)計(jì)主要有幾下幾個(gè)特點(diǎn):1. ,較其他嵌入式操作系統(tǒng)而言,具有的優(yōu)勢(shì)是:良好的操作界面、實(shí)時(shí)性較高、占用資源少、開發(fā)工具豐富以及強(qiáng)大的技術(shù)支持等等。當(dāng)蛇死亡時(shí),我們需要回到初始化界面,進(jìn)行游戲的重玩,這時(shí),我們需要按鍵回車鍵進(jìn)行游戲的重新初始化工作,我們現(xiàn)在來(lái)進(jìn)行回車鍵功能的測(cè)試工作,如下圖所示:通過(guò)觀察上圖和前一個(gè)狀態(tài)的變化,我們發(fā)現(xiàn)當(dāng)我們按下回車鍵時(shí),游戲重新回到初始化界面,說(shuō)明此功能正確,測(cè)試結(jié)束。通過(guò)觀察上圖和前一個(gè)狀態(tài)的變化,我們發(fā)現(xiàn)此圖顯示了按左功能鍵后,貪吃蛇蛇頭向上移動(dòng),說(shuō)明向上按鍵功能正確。下面我們來(lái)進(jìn)行上、下、左、右功能鍵的按鍵測(cè)試,如下圖所示:通過(guò)觀察上圖和前一個(gè)狀態(tài)的變化,我們發(fā)現(xiàn)此圖顯示了按上功能鍵后,貪吃蛇蛇頭向上移動(dòng),說(shuō)明向上按鍵功能正確。一共有6個(gè)按鍵與貪吃蛇游戲相關(guān),分別是,上、下、左、右按鍵,還有回車,空格按鍵。開始游戲,然后讓蛇吃到自己的身體某一部分,結(jié)果如下圖所示: 通過(guò)上圖,我們發(fā)現(xiàn),當(dāng)蛇頭吃到自己身體的某一部分時(shí),貪吃蛇死亡,游戲結(jié)束,說(shuō)明此功能正確,測(cè)試結(jié)束。根據(jù)游戲規(guī)則,當(dāng)貪吃蛇吃到自己身體的某一部分時(shí),也應(yīng)該出現(xiàn)一個(gè)對(duì)話框,顯示游戲結(jié)束,標(biāo)志著游戲的結(jié)束,玩家重新開始游戲。我們運(yùn)行程序,然后按空格鍵開始游戲,讓蛇自身開始移動(dòng),我們首先讓蛇頭撞到地圖周圍的墻壁,觀察結(jié)果是不是出現(xiàn)應(yīng)該出現(xiàn)的結(jié)果。按照預(yù)先設(shè)計(jì)應(yīng)出現(xiàn)的結(jié)果是當(dāng)蛇頭下一個(gè)移動(dòng)節(jié)點(diǎn)的位置是地圖四周的墻壁時(shí),或者是蛇自身的某一個(gè)位置節(jié)點(diǎn)時(shí),應(yīng)該顯示出一個(gè)對(duì)話框,標(biāo)志著蛇死亡。我們將開發(fā)板接好電源,下載好winCE系統(tǒng),后,將數(shù)據(jù)線連接好,啟動(dòng)同步軟件,進(jìn)行連接,直到同步軟件顯示連接成功之后,瀏覽板子內(nèi)容,選擇PXA270S開發(fā)板SDK,進(jìn)行編譯,將C:\Documents and Settings\lining\桌面\Snake_no_dead\ARMV4Irel目錄下的可執(zhí)行文件加入到實(shí)驗(yàn)箱目錄下,然后連接鍵盤和鼠標(biāo)到開發(fā)板上的USB上,點(diǎn)擊可執(zhí)行程序Snake文件,運(yùn)行開發(fā)完成的貪吃蛇游戲程序,這樣,整個(gè)系統(tǒng)整合完成。至此,我們完成了整個(gè)winCE內(nèi)核的燒寫工作。如果因?yàn)榫W(wǎng)絡(luò)狀況不好,造成下載中斷,則需要重新進(jìn)行上述過(guò)程。等待下載完畢。+EbootSendBootmeAndWaitForTftpSent BOOTME to Sent BOOTME to 選擇菜單中Target\Connectivity Options,在Download欄中按Settings按鈕,出現(xiàn)如下對(duì)話框:在Active Device框中選擇識(shí)別出的設(shè)備名,點(diǎn)擊框中的設(shè)備,在device boot name中選中該設(shè)備,之后點(diǎn)“OK”確定。啟動(dòng)實(shí)驗(yàn)板,按空格進(jìn)入控制臺(tái),監(jiān)視超級(jí)終端,配置好子網(wǎng)掩碼和系統(tǒng)IP,保存選項(xiàng),再選擇“D”選項(xiàng)下載新的內(nèi)核,然后等待超級(jí)終端出現(xiàn)下面信息:Using device name: 39。在PB中選擇菜單中Target\Connectivity Options,彈出如下對(duì)話框:將“Download”“Transport”兩欄都選擇為“Ethernet”,“Debugger”一欄選擇為“None”。如下圖所示: 以下是對(duì)各個(gè)項(xiàng)目的解釋:0為設(shè)備啟動(dòng)IP設(shè)定;1 為設(shè)備及子網(wǎng)地址設(shè)定;2 為boot延時(shí)的時(shí)間設(shè)定;3 選擇是否設(shè)置動(dòng)態(tài)IP分配,這一級(jí)Boot可以選擇IP分配方式;4 為重置為缺省設(shè)置,各項(xiàng)參數(shù)將還原為默認(rèn)值;5 有兩個(gè)選擇,切換DOWNLOAD NEW方式和LAUNCH EXIST方式;6 啟動(dòng)順序設(shè)定,我們?cè)O(shè)置為以太網(wǎng)SMSC網(wǎng)卡啟動(dòng);7 設(shè)置串口調(diào)試模式,我們?cè)O(shè)置為FFUART,即使用UARTA串口;8 選擇修改MAC地址,需要避開主機(jī)的MAC地址;9 為存儲(chǔ)所設(shè)置的參數(shù);D 下載當(dāng)前的內(nèi)核鏡像;L 運(yùn)行當(dāng)前的內(nèi)核鏡像;F 選擇是否格式化為二進(jìn)制文件系統(tǒng),新的內(nèi)核鏡像寫入Nand Flash 必須支持二進(jìn)制文件系統(tǒng),注意格式化將擦掉原來(lái)系統(tǒng)內(nèi)核數(shù)據(jù),確定要擦除時(shí)才能選擇該命令,擦除需要一段時(shí)間,需要等待幾分鐘;N選擇是否允許將內(nèi)核寫入Nand Flash,如果不選為Enable,則運(yùn)行在RAM中,掉電后將不能保存。配置Eboot 參數(shù)Bootloader下載好之后,可以運(yùn)行控制臺(tái)執(zhí)行一些操作。在倒計(jì)時(shí)時(shí)空格進(jìn)入Eboot控制臺(tái)。出現(xiàn)如下圖所示:運(yùn)行“flash eboot”將eboot寫入flash。具體配置過(guò)程如下圖所示:配置好主機(jī)和試驗(yàn)箱的IP地址,要保證這兩個(gè)IP必須在同一個(gè)網(wǎng)段內(nèi),否則系統(tǒng)下載會(huì)失敗。配置好了之后運(yùn)行ifconfig查看配置是否正確。運(yùn)行配置好的超級(jí)終端(配置方法同Linux),啟動(dòng)Blob,在進(jìn)入過(guò)程中按一下空格鍵,進(jìn)入blob控制臺(tái):之后和配置linux系統(tǒng)一樣運(yùn)行ifconfig。注意開發(fā)機(jī)與設(shè)備的連接關(guān)系,可以使用直連網(wǎng)線連接開發(fā)機(jī)PC與設(shè)備。關(guān)閉電源,拔下JTAG下載線。在Windows 回車,選擇輸入“bc16”,回車,可以看到如下圖所示的界面:然后我們輸入“blob”,如上面右圖所示;此時(shí)我們等待系統(tǒng)燒寫Flash,完成后如下圖所示:到這我們完成燒寫第一步; 如下:在這里我們應(yīng)十分注意注意,所有文件都需要放到Current Directory目錄下,請(qǐng)確保這個(gè)路徑和IP設(shè)置正確無(wú)誤。安裝Giveio驅(qū)動(dòng),具體安裝請(qǐng)參考Giveio的說(shuō)明。1. 燒寫B(tài)lob使用JflashMM將eboot燒寫到Nand Flash中。有了這些硬件和軟件的資源,我們就可以把自己定制的內(nèi)核燒寫到開發(fā)板子上了,下面,我介紹具體的燒寫步驟。 } } } ReleaseDC(dc)。 } if(SnakeOfBrick[y][x]==1) { dcFillSolidRect(LEFTMARGIN+x*WIDTHOFBRICKS,10+y*HEIGHTOFBRICKS,WIDTHOFBRICKS,HEIGHTOFBRICKS,SNAKECOLOR)。x++) { if(SnakeOfBrick[y][x]==0)