




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
專業實驗嵌入式系統實驗指導書2025年3月王恒編-PAGE7-實驗一嵌入式系統ARM驅動編程一、實驗目的1.熟悉ARM環境,學會ARM仿真器的使用。使用ADS編譯、下載、調試并跟蹤一段已有的程序,了解嵌入式開發的基本思想和過程。2.掌握非嵌入式操作系統模式下的ARM編程。3.了解LCD基本概念與原理,熟悉用ARM內置的LCD控制器驅動LCD,掌握延時函數的使用方法,可以設計動態ARM程序。二、實驗內容(2學時)1.本次實驗使用ADS集成開發環境。學習ARM仿真器的使用和開發環境的設置。下載已經編譯好的文件到嵌入式控制器中運行。學會在程序中設置斷點,觀察系統內存和變量,為調試應用程序打下基礎。2.學習LCD顯示器的基本原理,理解其驅動控制方法。掌握兩種LCD驅動方式的基本原理和方法。并用編程實現控制LCD顯示的ARM程序。三、預備知識C語言的基礎知識、程序調試的基礎知識和方法。四、實驗設備及工具硬件:ARM嵌入式開發平臺、用于ARM7TDMI的JTAG仿真器、PC機。軟件:PC機操作系統Win2000、ARMADS1.2集成開發環境、仿真器驅動程序、超級終端通訊程序五、實驗原理1.ARM程序的在線仿真與調試ADS1.2可以進行ARM程序的編寫和調試。打開ADS1.2的編輯界面后,可以以工程的方式編寫和組織源代碼。執行菜單Project|Make可對工程進行編譯連接。在出現的錯誤/警告窗口中選擇某錯誤/警告信息,ADS會自動打開相應源文件并用箭頭指向出錯的文本行。如果某個源文件被修改,重新編譯時ADS會自動同步各文件的日期信息。ARM程序調試步驟如下:(1)在ADS中執行菜單Project|Debug啟動ADS1.2的調試工具AXD。(2)在AXD中執行菜單Options|ConfigureTarget對AXD進行設置。如圖1B-13所示。選擇ADP即遠程調試,點Configure按鈕進一步設置具體參數,如圖1B-14所示。(3)在圖1B-14中點Select按鈕選擇遠程連接為ARMethernetdriver,點Configure按鈕輸入仿真器的IP地址。如果用戶使用的是并行口仿真器,請輸入127.0.0.1即可。(4)等待程序裝載完畢以后,通過Execute|Go菜單以及Execute|Stop(或者工具欄中的相應按鈕)運行或暫停程序。程序暫停后在窗口中將顯示出程序暫停的位置。(5)通過Execute|Step菜單(或者工具欄中的相應按鈕)可以單步運行程序。也可以使用StepIn、StepOut菜單命令進入或者跳出函數的調用。RunToCursor命令運行到光標位置。(6)程序停止后可以通過ProcessorViews|Sources菜單查看源文件,并可在適當位置按F9設置端點。(7)使用在ProcessorView菜單下的Registers、Variables和Memory命令可以查看工作寄存器或者內存變量??梢灾鹨坏貒L試,以方便對程序進行調試。2.LCD的驅動方法市面上出售的LCD有兩種驅動類型:一種是帶有驅動電路的LCD顯示模塊,這種LCD可以方便地與各種低檔單片機進行接口,如8051系列單片機,但是由于硬件驅動電路的存在,體積比較大。這種模式常常使用總線方式來驅動。另一種是LCD顯示屏,沒有驅動電路,需要與驅動電路配合使用。特點是體積小,但卻需要另外的驅動芯片。也可以使用帶有LCD驅動能力的高檔MCU驅動,如ARM系列的S3C44BOX。S3C44B0X中具有內置的LCD控制器,它具有將顯示緩存(在系統存儲器中)中的LCD圖象數據傳輸到外部LCD驅動電路的邏輯功能。S3C44B0X中內置的LCD控制器可支持灰度LCD和彩色LCD。在灰度LCD上,使用基于時間的抖動算法(time-basedditheringalgorithm)和FRC(FrameRateControl)方法,可以支持單色、4級灰度和16級灰度模式的灰度LCD。在彩色LCD上,可以支持256級彩色。對于不同尺寸的LCD,具有不同數量的垂直和水平象素、數據接口的數據寬度、接口時間及刷新率,而LCD控制器可以進行編程控制相應的寄存器值,以適應不同的LCD顯示板。與ARM自帶LCD驅動器有關的寄存器可參見S3C44B0X的數據手冊。3.延時函數與嵌入式系統的主函數寫法voidDelay(inttime)函數可以實現延時功能,(注意函數名中的字母D是大寫),其中參數time是設定的延時值,單位為0.1ms。例如延時1s,可以調用:Delay(10000);即可實現。該延時函數的精度比較高,是采用S3C44B0X芯片內部的定時器來實現定時功能的。嵌入式系統的主函數一般是一個永不結束或返回的函數。在程序結構上,寫成一個大循環。永遠循環的兩種寫法:while(1){循環內容;}或for(;;){循環內容}LCD顯示配合延時功能,可以實現各種動畫功能。例如一個實現兩幅圖不停的切換的程序框架如下:main(){ 開發板及必要的初始化;while(1){ LCD_Cls();//清屏畫第一幅圖;LCD_Refresh();//刷新屏幕,只有調用該函數液晶屏才會真正顯示所畫內容;Delay(20000);//延時2sLCD_Cls();//清屏 畫第二幅圖;LCD_Refresh();Delay(20000);}}如果畫面重畫的速度比較快(例如每秒切換24張),人眼就不會看到重畫過程,從而形成動畫。清屏函數例子:voidLCD_Cls(){intx,y;for(x=0;x<320;x++)for(y=0;y<240;y++)LCDBuffer[y][x]=0x0;}六、實驗步驟1.將“Exp1LCD驅動控制實驗”整個文件夾復制到自己所建的目錄下,將其改為英文名(ADS對中文目錄的支持不好),然后雙擊exp1.mcp文件,便可以打開工程。2.查看LCD的驅動文件,包括(1)有關常量與宏(lcd320.h,lcd320.c)#defineLCDWIDTH320#defineLCDHEIGHT240U32*pLCDBuffer16=(U32*)0xc000000;//一級緩存指針U32LCDBuffer[LCDHEIGHT][LCDWIDTH];//二級緩存將其定義為32位是為了與RGB顏色兼容。(2)查看LCD初始化函數(lcd320.c):設置各功能寄存器,清空顯示緩存區。(3)查看LCD刷新函數(lcd320.c)。此函數主要是將二級緩存LCDBuffer的數據由32位彩色圖形信息轉換成8位256色的圖形信息,然后放到pLCDBuffer16指向的一級緩存。轉換公式:pixcolor=(pbuf[0]&0xe0)|((pbuf[1]>>3)&0x1c)|(pbuf[2]>>6)。其中,pbuf[0]、pbuf[1]、pbuf[2]是一個象素的32位彩色數據的前24位,分別代表R、G、B。(4)查看主函數(main.c)在LCD上顯示256色圖形的關鍵是填充二級顯示緩沖,將顯示象素的24位顏色信息寫入LCDBuffer。將RGB三種基本顏色按一定比例混合即可構成更復雜的顏色,每個象素的三種基本顏色分別占一個字節,可以方便的在程序里改寫各基本顏色的數值,從而改變該象素的混合顏色。例如向位于(x,y)坐標的像素填充紅色,對應代碼為:LCDBuffer[x][y]=0xe0;屏幕的左上角為坐標原點,x軸向右依次增加到320,y軸向下依次增加到240.3.將示例程序下載到開發板上,調試并查看程序運行結果。4.在消化吸收示例程序的main.c文件的基礎上,按照老師的現場要求,修改或重寫main.c文件中的main函數,編寫自己的ARM程序,實現LCD顯示和ARM動態程序設計。5.編譯、下載與調試自編程序。七、思考題1)ARM程序在線調試時主要進行哪些設置?2)寫出ARM程序設計中main函數常用的程序框架。
實驗二嵌入式操作系統程序設計一、實驗目的1.了解μC/OS-Ⅱ內核的主要結構。2.掌握μC/OS-Ⅱ程序設計的基本方法。3.學習使用嵌入式系統繪圖的API函數。理解繪圖設備上下文(DC)在多任務操作系統中的作用。會使用繪圖設備上下文(DC)在屏幕上繪制一個圓角矩形和一個圓。了解繪制動畫防止閃爍的基本原理,可以實現無閃爍的動畫。4.學習使用系統的消息循環。掌握如何通過系統的消息循環來響應鍵盤任務的消息,同時學會使用圖形模式下的液晶屏文字顯示函數。二、實驗內容(4學時)1.學習μC/OS-Ⅱ的編程方法。2.編寫幾個簡單任務,在超級終端上觀察任務的切換。3.通過使用嵌入式系統的繪圖API函數,首先,在屏幕上繪制一個圓角矩形和一個整圓。然后,再在屏幕上無閃爍的繪制一個移動的正弦波。4.通過使用消息隊列接收鍵盤任務發出的按鍵消息,并把對應按鍵的字符顯示在液晶屏和PC機的終端上。三、預備知識1.掌握在ADS1.2集成開發環境中編寫和調試程序的基本過程。2.了解ARM7處理器的結構。3.了解μC/OS-Ⅱ系統結構。四、實驗設備及工具硬件:ARM嵌入式開發平臺、用于ARM7TDMI的JTAG仿真器、PC機。軟件:PC機操作系Win2000、ADS1.2集成開發環境、仿真器驅動程序、超級終端通訊程序。五、實驗原理(一)μC/OS-Ⅱ程序編寫基礎為了使μC/OS-Ⅱ可以正常運行,硬件初始化和配置文件也是必須的。STARTUP目錄下的文件還包括中斷處理,時鐘,串口通信等基本功能函數。在文件main.c中給出了應用程序的基本框架,包括初始化和多任務的創建,啟動等。在μC/OS-Ⅱ中創建一個任務的步驟如下:1)在程序開頭定義任務堆棧,任務函數聲明和任務優先級:OS_STKTaskName_Stack[STACKSIZE]={0,};//任務堆棧voidTaskName(void*Id);//任務函數#defineTaskName_PrioN//任務優先級2)在main()函數中調用OSStart()函數之前用下列語句創建任務:OSTaskCreate(TaskName,(void*)0,(OS_STK*)&TaskName_Stack[STACKSIZE-1],TaskName_Prio);OSTaskCreate()函數的原型是:INT8UOSTaskCreate(void(*task)(void*pd),void*p_arg,OS_STK*ptos,INT8Uprio);需要將任務函數TaskName,任務堆棧TaskName_Stack,任務優先級TaskName_Prio三個參數傳給OSTaskCreate()函數。根據任務函數的內容決定堆棧大小,宏STACKSIZE定義為4KB,可以在此基數上乘倍。任務優先級越高,TaskName_Prio值越小;μC/OS-Ⅱ可以管理64個任務,由OSInit()創建的空閑任務的優先級最低為63;μC/OS-Ⅱ保留4個最高和4個最低優先級,用戶任務可以使用其余56個優先級值。3)編寫任務函數內容:voidTaskName(void*Id){//添入任務初始化語句for(;;){//添入任務循環內容OSTimeDly(SusPendTime);//掛起一定時間,以使其他任務可以占用CPU}}μC/OS-Ⅱ至少要有一個任務,這里首先創建一個系統任務SYS_Task,其中由語句OSRunning=TRUE;//使能μC/OS-Ⅱ運行uHALr_InstallSystemTimer();啟動系統時鐘和多任務切換。為了驗證μC/OS-Ⅱ多任務切換的進行,再編寫兩個簡單的任務,分別在超級終端上輸出runtask1和runtask2??梢詤⒖糾ain.c的結構創建多個不同功能的任務,觀察個任務的切換。(二)完善的μC/OS-Ⅱ開發框架需要說明的是,μC/OS-Ⅱ作為一個實時操作系統只提供了多任務調度等基本功能,這在實際應用中顯然是不夠的。除了移植好的操作系統內核部分,還必須有文件系統,全部硬件的驅動程序,圖形API,控件函數,綜合提高的消息函數以及幾個系統必須的基本任務,象鍵盤,觸摸屏,LCD刷新等。有了這些,μC/OS-Ⅱ才能實現復雜的功能。特殊需求的地方還需要像USB通信協議,TCP/IP協議等更復雜的軟件模塊。實驗系統提供的μC/OS-Ⅱ庫文件中包含了上述大部分功能,基于庫的開發變的非常簡單,在基本的程序框架下應用實驗系統提供的豐富API函數即可。實際開發中,用戶的工程中無需包括μC/OS-Ⅱ的源代碼,只需要包括庫文件即可。當然,用戶也可以了解庫中部分代碼的源文件,可以根據自己的需求就行重新編譯,也可以對自己的一系列源文件生成一個專門的庫,方便自己后續工作。μC/OS-Ⅱ的開發中,應用程序和操作系統是綁在一起編譯的,所生成的system.bin文件是唯一的可執行文件,其中包括了所需要的μC/OS-Ⅱ代碼和被用到的驅動程序等函數代碼,以及應用程序的代碼。system.bin文件是存放在平臺的16MFLASH中的,在系統啟動時由BIOS依靠文件系統從FLASH中讀入到SDRAM中,然后把控制轉移到該代碼上,完成所謂的引導。而BIOS是存儲在另外的ROM中的。本實驗提供了基于庫的μC/OS-Ⅱ開發框架,可以打開工程進行了解。圖3-3是ADS環境下看到的該框架的文件組成,還可以展開各目錄查看更多的文件信息。圖3-3ADS下框架文件構成可以看出,STARTUP下的都是最基本的硬件初始化和配置文件;Ucos_lib.a是ADS環境下的庫;SRC是用戶編寫的工程文件;μC/OS-Ⅱ下都是系統用到的頭文件,其中ADD下是添加的基本系統任務和消息函數的相關頭文件。INC下主要是硬件驅動程序的頭文件。Init下的幾個文件是ADS環境下配置存儲器及堆棧的,和μC/OS-Ⅱ無直接關系。打開Main.c文件,可以看到一個應用工程的基本框架,在這個實驗中,所謂的應用很簡單,就是在LCD上顯示“Helloworld!”,大部分代碼都是框架。用戶可以在這些代碼的基礎上進行應用開發,創建新任務,編寫必要的函數。當然,如果針對特定的項目有相對獨立并集中的一些函數則最好新建源文件和頭文件,以方便管理,這些用戶新建的源文件可以放到SRC目錄下,在編譯環境下用AddFiles命令加入對應位置。下面是Main()函數中的內容:intmain(void){ARMTargetInit();//開發板初始化OSInit();//操作系統初始化uHALr_ResetMMU();//復位MMULCD_Init();//初始化LCD模塊LCD_printf("LCDinitializationisOK\n");//向液晶屏輸出數據initOSGUI();//初始化圖形界面LoadFont();//調Unicode字庫LoadConfigSys();//使用config.sys文件配置系統設置LCD_printf("CreatetaskonμC/OS-Ⅱ...\n");OSTaskCreate(Main_Task,(void*)0,(OS_STK*)&Main_Stack[STACKSIZE*8-1],Main_Task_Prio);//創建系統任務OSAddTask_Init();//創建系統附加任務LCD_printf("StartingμC/OS-Ⅱ...\n");LCD_printf("Enteringgraphmode...\n");LCD_ChangeMode(DspGraMode);//變LCD顯示模式為圖形模式InitRtc();//初始化系統時鐘Nand_Rw_Sem=OSSemCreate(1);//創建Nand-Flash讀寫控制權旗語,初值為1滿足互斥條件OSStart();//操作系統任務調度開始//不會執行到這里return0;}main()函數中調用了必要的初始化函數,創建了系統任務和用戶任務,然后啟動系統任務調度。建議用戶不要改動該函數中的初始化過程,但可以按本實驗第一部分所述的任務創建方法來創建更多的任務,注意每個任務必須具有不同的優先級。(三)繪圖的API函數請查閱附錄API函數,在Display.h中定義了和繪圖顯示有關的數據類型和函數原型。在μC/OS-Ⅱ系統環境下,繪圖必須通過使用繪圖設備上下文(DC)來實現。繪圖設備上下文(DC)中包括了與繪圖相關的信息,比如:畫筆的寬度、繪圖的原點等等。這樣,在多任務系統中,不同的任務通過不同的繪圖設備上下文(DC)繪圖才不會互相影響。繪圖設備上下文(DC)的結構定義如下:typedefstruct{intDrawPointx;intDrawPointy;//繪圖所使用的坐標點intPenWidth;//畫筆寬度U32PenMode;//畫筆模式COLORREFPenColor;//畫筆的顏色intDrawOrgx;//繪圖的坐標原點位置intDrawOrgy;intWndOrgx;//繪圖的窗口坐標位置intWndOrgy;intDrawRangex;//繪圖的區域范圍intDrawRangey;structRECTDrawRect;//繪圖的有效范圍U8bUpdataBuffer;//是否更新后臺緩沖區及顯示U32Fontcolor;//字符顏色}DC,*PDC與繪圖設備上下文(DC)有關的函數有:initOSDC()用來初始化系統的DC,為DC動態內存開辟空間;CreateDC()和DestoryDC(PDCpdc)分別用來創建和刪除DC,前者返回所創建的DC指針,后者則釋放DC的內存空間。和繪圖有關的函數有TextOut(),LineTo(),FillRect(),Circle(),ShowBmp()等常見的圖形函數,用戶可以查看附錄API函數顯示部分,嘗試使用這些函數。在μC/OS-Ⅱ操作系統中,液晶顯示屏的刷新是通過Lcd_Fresh_Task任務完成的,該任務是在系統附加任務初始化函數OSAddTask_Init()中定義的,該函數開辟了LCD刷新任務,觸摸屏任務,鍵盤任務等。繪圖首先是在繪圖緩沖區中完成的,然后系統自動(也可以通過設置繪圖設備上下文參數,不讓系統自動刷新)向Lcd_Fresh_Task發送更新消息。其流程圖如圖4-1所示:圖4-1繪圖流程因為繪圖是在后臺進行的,繪制完成之后,再更新到液晶屏上,所以,在繪圖的時候不用擔心反覆的擦除屏幕會引起屏幕的閃爍,這樣,可以很方便的實現動畫無閃爍的顯示。繪制完一次圖形以后,必須要使用OSTimeDly()給出一定時間的延時(推薦用200),同時使Main_Task任務主動讓出對CPU的控制權,使Lcd_Fresh_Task任務可以完成刷新。(四)圖形系統的消息循環通常在多任務操作系統中,任務之間的通訊是通過發送消息來實現的。消息隊列是μC/OS-Ⅱ操作系統的一種通信機制,它可以使一個任務或者中斷服務程序向另一個任務發送以指針方式定義的變量。μC/OS-Ⅱ操作系統提供了若干對消息隊列進行操作的函數,例如OSQCreate(),OSQPend(),OSQPost()等,都定義在OS_Q.C中。但是,在將μC/OS-Ⅱ移植到本ARM嵌入式開發平臺時,對消息隊列相關函數又作了提高,使得程序中對消息隊列的使用變得更加簡單易行。請參考附錄API函數系統消息部分,開發平臺的消息隊列相關函數定義在OSMessage.h中。程序中可以用OSCreateMessage()函數為某個控件創建消息,用SendMessage()函數將該消息發送到消息隊列中,用WaitMessage()函數等待消息,用DeleteMessage()函數刪除消息。消息的數據結構定義如下:typedefstruct{POS_CtrlpOSCtrl;//消息所發到的窗口(控件),為NULL時指桌面U32Message;//消息類型U32WParam;//消息參數U32LParam;//消息參數}OSMSG,*POSMSG;下面是平臺的基本消息類型定義:#defineOSM_KEY1//鍵盤消息#defineOSM_TOUCH_SCREEN2//觸摸屏消息#defineOSM_SERIAL100//串口收到數據的消息#defineOSM_LISTCTRL_SELCHANGE1001//列表框的選擇被改變的消息#defineOSM_LISTCTRL_SELDBCLICK1002//列表框的選擇雙擊消息#defineOSM_BUTTON_CLICK1003//單擊按鈕消息下面是各基本消息類型的參數說明:MessageWParamLParamOSM_KEY鍵盤掃描碼OSM_TOUCH_SCREEN低16位=觸摸點x坐標值高16位=觸摸點y坐標值觸摸動作OSM_LISTCTRL_SELCHANGECtrlIDCurrentSelOSM_LISTCTRL_SELDBCLICKCtrlIDCurrentSelOSM_BUTTON_CLICKCtrlID對于鍵盤消息來說其類型pMsg->Message=OSM_KEY,參數pMsg->WParam則是按鍵的鍵碼(pMsg是指向該消息結構體的指針)。鍵盤中斷服務程序只向鍵盤郵箱(郵箱是μC/OS-Ⅱ的另一種通信機制)中發送一個消息,通知鍵盤掃描任務發生按鍵事件:voidISR_Key(){OSMboxPost(Key_MailBox,(void*)1);}當鍵盤掃描任務等到該郵箱的消息后就會從鍵盤掃描芯片讀取掃描碼,繼而將該掃描碼對應的鍵碼用鍵盤消息發送到消息隊列:voidKey_Scan_Task(void*Id)//鍵盤掃描任務{U32key;INT8Uerr;POSMSGpmsg;Uart_Printf("beginkeytask\n");for(;;){OSMboxPend(Key_MailBox,0,&err);key=ZLG7289_ReadKey();if(key>=64)continue;pmsg=OSCreateMessage(NULL,OSM_KEY,KeyBoard_Map[key],0);if(pmsg)SendMessage(pmsg);}}所謂的系統消息循環如圖4-2所示:圖4-2系統的消息循環應用程序在Main_Task任務中等待消息,并對該消息進行判斷和處理,如果是鍵盤消息則提取出鍵碼,變換為對應字符,然后將其顯示到液晶屏上。在圖形模式下,液晶屏的文字輸出函數是TextOut(),實際是通過在圖形方式下繪圖完成文字顯示的。此函數輸出的字符數組必須是基于雙字節Unicode編碼的。在程序中可以使用Int2Unicode()和strChar2Unicode()兩個函數分別將整形數或ASCII字符轉換為Unicode字符串。這部分內容請參考附錄API函數,在Ustring.h定義。六、實驗步驟(一)嵌入式操作系統基本程序設計1.查看實驗示例程序,學習μC/OS-Ⅱ任務創建和延時的程序編寫方法。2.編寫多任務程序,要求實現:任務1不停的向串口打印“Task1”,任務2向不同的串口打印“Task2”,任務3不停的向串口打印“Task3”。打印的規律為:121213,循環打印。效果如下:Task1Task2Task1Task2Task1Task33.編譯、調試所編寫的程序。(二)繪圖的API函數1、新建工程,將“Exp4-1繪圖的API函數”中的文件加入工程。2、編輯Main.c文件,在Main_Task任務中加入代碼。使用操作系統的繪圖API函數,繪制出如圖4-3所示的圖形。圖4-3繪制的圖形提示:1)繪制整個圓可以用Circle函數,繪制直線用LineTo函數,繪制圓弧用ArcTo函數。調試的過程中可以在每次調用繪圖函數之后調用OSTimeDly()函數,使系統更新顯示,輸出到液晶屏上。2)為方便繪圖,可使用SetDrawOrg函數設置繪圖的原點。3)因為本次實驗不用系統的字符顯示,所以,可以去掉Main()函數中LoadFont()函數,以節省系統啟動的時間。3、用ADS1.2編譯、下載并調試上述程序,檢查運行結果。4、在屏幕上無閃爍的繪制一個移動的正弦波。提示:1)繪制正弦波等有數學表達式的曲線時,可以根據平面幾何的知識通過數學計算得到曲線上點的坐標,然后用線段連起來構成整個曲線。兩幀畫面之間可以清屏擦掉原來圖形,然后重畫新圖形。2)因為繪圖需要使用sin()函數,所以需要在main.c中加入#include<math.h>。5、用ADS1.2編譯、下載并調試上述程序,檢查運行結果。(三)圖形系統的消息循環7、新建工程,將“Exp4-2系統的消息循環”中的文件加入工程。8、編輯Main_Task任務中的代碼,理解如何實現消息循環。即:等待消息、處理(響應)消息、刪除消息。提示:1)使用WaitMessage(0)接收消息,通常等待時間設置為無限長。2)系統的消息循環是一個無限循環。3)收到消息以后(即WaitMessage()函數返回后),通過判斷消息結構中Message成員來判斷消息類型。如果是鍵盤消息,則Message的值為OSM_KEY,WParam參數存儲的是按鍵的鍵碼,LParam參數存儲的是同時按下的功能鍵(如果沒有,則為0)。4)開始等待下一條消息之前必須使用DeleteMessage刪除消息,釋放系統的內存空間。9、編寫鍵盤消息響應函數onKey(),處理鍵盤的消息。當有鍵盤消息收到的時候,把按鍵字符顯示在液晶屏上,同時,發送給PC機的終端。提示:1)通過Uart_Printf()函數向串行口發送鍵面字符串。10、用ARMADS1.2編譯、下載并調試上述程序,檢查運行結果。12、在學習和調試上述例子程序的基礎上,按照教師現場的要求,編寫一個結合進程通信和繪圖函數的綜合程序,要求最終程序能夠通過開發板自啟動運行。七、思考題1.若循環打印出序列121213,各任務的循環周期和優先級應如何設置?2.結合自己實驗種的體會,談一下μC/OS-Ⅱ有什么優勢?
附錄嵌入式系統應用編程API函數1.顯示部分Display.h相關結構:typedefstruct{intDrawPointx;intDrawPointy;//繪圖所使用的坐標點intPenWidth;//畫筆寬度U32PenMode;//畫筆模式COLORREFPenColor;//畫筆的顏色intDrawOrgx;//繪圖的坐標原點位置intDrawOrgy;intWndOrgx;//繪圖的窗口坐標位置intWndOrgy;intDrawRangex;//繪圖的區域范圍intDrawRangey;structRECTDrawRect;//繪圖的有效范圍U8bUpdataBuffer;//是否更新后臺緩沖區及顯示U32Fontcolor;//字符顏色}DC,*PDCtypedefstruct{intleft;inttop;intright;intbottom;}structRECT相關函數:initOSDC定義:voidinitOSDC()功能:初始化系統的繪圖設備上下文(DC),為DC的動態分配開辟內存空間CreateDC定義:PDCCreateDC()功能:創建一個繪圖設備上下文(DC),返回指向DC的指針DestoryDC定義:voidDestoryDC(PDCpdc)功能:刪除繪圖設備上下文(DC),釋放相應的資源參數說明:pdc:指向繪圖設備上下文(DC)的指針SetPixel定義:voidSetPixel(PDCpdc,intx,inty,COLORREFcolor)功能:設置指定點的像素顏色到LCD的后臺緩沖區,LCD范圍以外的點將被忽略參數說明:pdc:指向繪圖設備上下文(DC)的指針x,y:指定的像素座標color:指定的像素的顏色,高8位為空,接下來的24位分別對應RGB顏色的8位碼。SetPixelOR定義:voidSetPixelOR(PDCpdc,intx,inty,COLORREFcolor)功能:設置指定點的像素顏色和LCD的后臺緩沖區的對應點或運算,LCD范圍以外的點將被忽略參數說明:pdc:指向繪圖設備上下文(DC)的指針x,y:指定的像素座標color:指定的像素的顏色,高8位為空,接下來的24位分別對應RGB顏色的8位碼。SetPixelAND定義:voidSetPixelAND(PDCpdc,intx,inty,COLORREFcolor)功能:設置指定點的像素顏色和LCD的后臺緩沖區的對應點與運算,LCD范圍以外的點將被忽略參數說明:pdc:指向繪圖設備上下文(DC)的指針x,y:指定的像素座標color:指定的像素的顏色,高8位為空,接下來的24位分別對應RGB顏色的8位碼。SetPixelXOR定義:voidSetPixelXOR(PDCpdc,intx,inty,COLORREFcolor)功能:設置指定點的像素顏色和LCD的后臺緩沖區的對應點異或運算,LCD范圍以外的點將被忽略參數說明:pdc:指向繪圖設備上下文(DC)的指針x,y:指定的像素座標color:指定的像素的顏色,高8位為空,接下來的24位分別對應RGB顏色的8位碼。GetFontHeight定義:intGetFontHeight(U8fnt)功能:返回指定字體的高度參數說明:fnt:輸出字體的大小型號,可以是表1-1數值中的一種:表1-1字體大小字體的型號數值說明FONTSIZE_SMALL1小字體模式,12x12字符FONTSIZE_MIDDLE2中字體模式,16x16字符FONTSIZE_BIG3大字體模式,24x24字符TextOut定義:voidTextOut(PDCpdc,intx,inty,U16*ch,U8bunicode,U8fnt)功能:在LCD屏幕上顯示文字參數說明:pdc:指向繪圖設備上下文(DC)的指針x,y:所輸出文字左上角的屏幕坐標ch:指向輸出文字字符串的指針bunicode:是否為Unicode編碼,如果是TRUE,表示ch指向的字符串為Unicode字符集;如果為FALSE,表示表示ch指向的字符串為GB字符集。fnt:指定字體的大小型號,可以是表1-1數值中的一種或上表1-2的數值:表1-2字的顯示方式顯示模式數值說明FONT_NORMAL0正常顯示FONT_TRANSPARENT4透明背景FONT_BLACKBK8黑底白字TextOutRect定義:voidTextOutRect(PDCpdc,structRECT*prect,U16*ch,U8bunicode,U8fnt,U32outmode)功能:在指定矩形的范圍內顯示文字,超出的部分將被裁減參數說明:pdc:指向繪圖設備上下文(DC)的指針prect:所輸出文字的矩形范圍ch:指向輸出文字字符串的指針bunicode:是否為Unicode編碼,如果是TRUE,表示ch指向的字符串為Unicode字符集;如果為FALSE,表示表示ch指向的字符串為GB字符集。fnt:指定字體的大小型號,可以是表1-1數值中的一種或表1-2的數值outmode:指定矩形中文字的對齊方式,可以是表1-3中的數值表1-3矩形中文字的對齊方式對齊方式數值說明TEXTOUT_LEFT_UP0文字從左上角開始TEXTOUT_MID_X1水平居中TEXTOUT_MID_Y2垂直居中MoveTo定義:voidMoveTo(PDCpdc,intx,inty)功能:把繪圖點移動到指定的坐標參數說明:pdc:指向繪圖設備上下文(DC)的指針x,y:移動畫筆到繪圖點的屏幕坐標LineTo定義:voidLineTo(PDCpdc,intx,inty)功能:在屏幕上畫線。從當前畫筆的位置畫直線到指定的坐標位置,并使畫筆停留在當前指定的位置參數說明:pdc:指向繪圖設備上下文(DC)的指針x,y:直線繪圖目的點的屏幕坐標DrawRectFrame定義:voidDrawRectFrame(PDCpdc,intleft,inttop,intright,intbottom)功能:在屏幕上繪制指定大小的矩形方框。參數說明:pdc:指向繪圖設備上下文(DC)的指針left:繪制矩形的左邊框位置right:繪制矩形的右邊框位置top:繪制矩形的上邊框位置bottom:繪制矩形的下邊框位置DrawRectFrame2定義:voidDrawRectFrame2(PDCpdc,structRECT*rect)功能:在屏幕上繪制指定大小的矩形方框。參數說明:pdc:指向繪圖設備上下文(DC)的指針rect:繪制矩形的位置及大小FillRect定義:voidFillRect(PDCpdc,intleft,inttop,intright,intbottom,U32DrawMode,COLORREFcolor)功能:在屏幕上填充指定大小的矩形。參數說明:pdc:指向繪圖設備上下文(DC)的指針left:繪制矩形的左邊框位置right:繪制矩形的右邊框位置top:繪制矩形的上邊框位置bottom:繪制矩形的下邊框位置DrawMode:矩形的的填充模式和顏色,它的數值可以是表1-4中的一種和表1-5中的或運算的結果color:填充的顏色值,高8位為空,接下來的24位分別對應RGB顏色的8位碼。表1-4繪圖模式繪圖模式數值說明GRAPH_MODE_NORMAL0x00普通繪圖模式GRAPH_MODE_OR0x10或繪圖模式GRAPH_MODE_AND0x20與繪圖模式GRAPH_MODE_XOR0x30異或繪圖模式表1-5前景顏色圖形顯示模式數值說明COLOR_BLACK1黑色前景色COLOR_WHITE0白色前景色FillRect2定義:voidFillRect2(PDCpdc,structRECT*rect,U32DrawMode,COLORREFcolor)功能:在屏幕上填充指定大小的矩形。參數說明:pdc:指向繪圖設備上下文(DC)的指針rect:繪制矩形的位置及大小DrawMode:矩形的的填充模式和顏色,它的數值可以是表1-4中的一種和表1-5中的或運算的結果。color:填充的顏色值,高8位為空,接下來的24位分別對應RGB顏色的8位碼。ClearScreen定義:voidClearScreen()功能:清除整個屏幕的繪圖緩沖區,即:清空LCDBuffer2SetPenWidth定義:U8SetPenWidth(PDCpdc,U8width)功能:設置畫筆的寬度,并返回以前的畫筆寬度參數說明:pdc:指向繪圖設備上下文(DC)的指針width:畫筆的寬度,默認值是1,即一個像素點寬SetPenMode定義:voidSetPenMode(PDCpdc,U32mode)功能:設置畫筆畫圖的模式參數說明:pdc:指向繪圖設備上下文(DC)的指針mode:繪圖的更新模式,可以是表1-4數值中的一種Circle定義:voidCircle(PDCpdc,intx0,inty0,intr)功能:繪制指定圓心和半徑的圓參數說明:pdc:指向繪圖設備上下文(DC)的指針x0,y0:圓心坐標r:圓的半徑ArcTo定義:voidArcTo(PDCpdc,intx1,inty1,U8arctype,intR)功能:繪制圓弧,從畫筆的當前位置繪制指定圓心的圓弧到給定的位置參數說明:pdc:指向繪圖設備上下文(DC)的指針x1,y1:繪制圓弧的目的位置arctype:圓弧的方向可以是表1-6參數中的一種:R:圓弧的半徑表1-6圓弧的方向園弧繪制模式數值說明GRAPH_ARC_BACKWARD0逆時針畫圓GRAPH_ARC_FORWARD1順時針畫圓SetLCDUpdata定義:U8SetLCDUpdata(PDCpdc,U8isUpdata)功能:設定繪圖的時候是否及時的更新LCD的顯示,返回以前的更新模式參數說明:pdc:指向繪圖設備上下文(DC)的指針isUpdata:是否更新LCD的顯示,可以為TRUE或者FALSE。如果選擇及時更新則每調用一次繪圖的函數都要更新LCD的后臺緩沖區并把后臺緩沖區復制到前臺,雖然可以保證繪圖的實時性,但是,總體來講,是降低了繪圖的效率。Draw3DRect定義:voidDraw3DRect(PDCpdc,intleft,inttop,intright,intbotton,COLORREFcolor1,COLORREFcolor2)功能:繪制指定大小和風格的3D邊框的矩形參數說明:pdc:指向繪圖設備上下文(DC)的指針left:繪制矩形的左邊框位置right:繪制矩形的右邊框位置top:繪制矩形的上邊框位置bottom:繪制矩形的下邊框位置color1:左和上的邊框顏色,高8位為空,接下來的24位分別對應RGB顏色的8位碼。color2:右和下的邊框顏色,高8位為空,接下來的24位分別對應RGB顏色的8位碼。Draw3DRect2定義:voidDraw3DRect2(PDCpdc,structRECTrect,COLORREFcolor1,COLORREFcolor2)功能:繪制指定大小和風格的3D邊框的矩形參數說明:pdc:指向繪圖設備上下文(DC)的指針rect:繪制矩形的位置及大小color1:左和上的邊框顏色,高8位為空,接下來的24位分別對應RGB顏色的8位碼。color2:右和下的邊框顏色,高8位為空,接下來的24位分別對應RGB顏色的8位碼。GetPenWidth定義:U8GetPenWidth(PDCpdc)功能:返回當前繪圖設備上下文(DC)畫筆的寬度參數說明:pdc:指向繪圖設備上下文(DC)的指針GetPenMode定義:U32GetPenMode(PDCpdc)功能:返回當前繪圖設備上下文(DC)畫筆的模式參數說明:pdc:指向繪圖設備上下文(DC)的指針SetPenColor定義:U32SetPenColor(PDCpdc,U32color)功能:設定畫筆的顏色,返回當前繪圖設備上下文(DC)畫筆的顏色參數說明:pdc:指向繪圖設備上下文(DC)的指針color:畫筆的顏色,高8位為空,接下來的24位分別對應RGB顏色的8位碼。GetPenColor定義:U32GetPenColor(PDCpdc)功能:返回當前繪圖設備上下文(DC)畫筆的顏色參數說明:pdc:指向繪圖設備上下文(DC)的指針GetBmpSize定義:voidGetBmpSize(charfilename[],int*Width,int*Height)功能:取得指定位圖文件位圖的大小參數說明:filename[]:位圖文件的文件名Width:位圖的寬Height:位圖的高ShowBmp定義:voidShowBmp(PDCpdc,charfilename[],intx,inty)功能:顯示指定的位圖(Bitmap)文件,到指定的坐標參數說明:pdc:指向繪圖設備上下文(DC)的指針filename[]:顯示的位圖(Bitmap)文件名x,y:顯示位圖的左上角坐標SetDrawOrg定義:voidSetDrawOrg(PDCpdc,intx,inty,int*oldx,int*oldy)功能:設置繪圖設備上下文(DC)的原點參數說明:pdc:指向繪圖設備上下文(DC)的指針x,y:設定的新原點oldx,oldy:返回的以前原點的位置SetDrawRange定義:voidSetDrawRange(PDCpdc,intx,inty,int*oldx,int*oldy)功能:設置繪圖設備上下文(DC)的繪圖范圍參數說明:pdc:指向繪圖設備上下文(DC)的指針x,y:設定的橫向、縱向繪圖的范圍,如果x(或者y)為1,則表示x(或者y)方向的比例隨著y(或者x)方向的范圍按比例縮放。如果參數為-1,表示方向相反oldx,oldy:返回的以前橫向、縱向繪圖的范圍LineToDelay定義:voidLineToDelay(PDCpdc,intx,inty,intticks)功能:在屏幕上畫線。從當前畫筆的位置畫直線到指定的坐標
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 10-03矩陣及其運算章節課件
- 幼兒園小班體育教案好玩的彩帶
- 2024北京北師大實驗中學高二10月月考數學試題及答案
- 2025年國際關系與外交學考試試題及答案
- 2025年公共衛生服務與健康教育考試試題及答案
- 秩序維護部半年工作總結
- 火災動力學FD05a-爆炸常識
- 直腸癌中醫護理
- 高考歷史考前沖刺-心理調適 課件
- 2025年網絡經濟與在線商業模式考試題及答案
- 東營市廣饒縣2025屆五年級數學第二學期期末學業水平測試模擬試題含答案
- 自行車智能化發展趨勢-深度研究
- 2022火電廠鐵路專用線安全管理標準
- 《2025年煤礦開工第一課培訓》專題講座
- 食品檢驗員持證上崗培訓課件
- 2025年中國速凍水餃行業供需態勢、競爭格局及投資前景分析報告(智研咨詢)
- 臨床教學師資培訓
- 弱電工程項目經理職責
- 青馬工程培訓班培訓課件
- 雙碳知識培訓
- 新交際英語(2024新版)一年級上冊Unit 1~6全冊教案
評論
0/150
提交評論