嵌入式系統(tǒng)設計平臺課v_第1頁
嵌入式系統(tǒng)設計平臺課v_第2頁
嵌入式系統(tǒng)設計平臺課v_第3頁
嵌入式系統(tǒng)設計平臺課v_第4頁
嵌入式系統(tǒng)設計平臺課v_第5頁
已閱讀5頁,還剩212頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

嵌入式系統(tǒng)設計主講:王曉榮Email:wang@

D301實驗室網(wǎng)絡設置無線網(wǎng)絡:D301_2、D301_3、D301_4無線網(wǎng)絡密碼:D301D303入網(wǎng)登錄賬號:zdh25入網(wǎng)登錄密碼:301303第1章嵌入式系統(tǒng)簡介1什么是嵌入式系統(tǒng)1什么是嵌入式系統(tǒng)?廣義:帶有微處理器的專用軟、硬件系統(tǒng)狹義:微處理器中帶有嵌入式操作系統(tǒng)(EmbeddedOperatingSystem)的專用軟、硬件系統(tǒng)思考STC89C52是不是嵌入式系統(tǒng)?什么是嵌入式操作系統(tǒng)1什么是嵌入式操作系統(tǒng)嵌入式操作系統(tǒng)EOS(EmbeddedOperatingSystem)是用在嵌入式系統(tǒng)中的操作系統(tǒng)。它在硬件和應用程序之間,通過提供應用程序接口,屏蔽了硬件工作的一些細節(jié),從而使應用程序的設計人員得以在一個友好的平臺上進行應用程序的設計和開發(fā),大大提高了應用程序的開發(fā)效率。嵌入式操作系統(tǒng)的優(yōu)缺點優(yōu)點:提高了系統(tǒng)的可靠性程序設計和擴展更容易應用程序模塊化,設計過程大為簡化縮短了產(chǎn)品的開發(fā)周期。缺點:ROM/RAM開銷大2~5%的CPU額外負荷內(nèi)核費用較高嵌入式操作系統(tǒng)分類微型操作系統(tǒng):UCOSII、UCLINUX、rt-thread等大型操作系統(tǒng):Linux、WindowsCE、VxWorks、Symbian、PalmOS、QNX等UCOSIIμC/OS-II是一個源碼公開、可移植、可固化、可裁剪、占先式的實時多任務操作系統(tǒng)。其絕大部分源碼是用ANSIC寫的,使其可以方便移植并支持大多數(shù)類型的處理器。μC/OS-II通過了聯(lián)邦航空局(FAA)商用航行器認證。μC/OS-II占用很少的系統(tǒng)資源(幾K的RAM和ROM),并且在高校教學使用是不需要申請許可證。UCLINUXuClinux是完全符合GNU/GPL公約的操作系統(tǒng),完全開放代碼。uClinux從Linux2.0/2.4內(nèi)核派生而來,沿襲了主流Linux的絕大部分特性。適用于沒有虛擬內(nèi)存或內(nèi)存管理單元(MMU)的處理器,例如ARM7TDMI。它通常用于具有很少內(nèi)存或Flash(幾百K)的嵌入式系統(tǒng)。它保留了Linux的大部分優(yōu)點:穩(wěn)定、良好的移植性、優(yōu)秀的網(wǎng)絡功能、完備的對各種文件系統(tǒng)的支持、以及標準豐富的API等。WINCEWindowsCE是微軟開發(fā)的一個開放的、可升級的32位嵌入式操作系統(tǒng),是基于掌上型電腦類的電子設備操作,它是精簡的Win95。WindowsCE的圖形用戶界面相當出色。WinCE具有模塊化、結構化和基于Win32應用程序接口以及與處理器無關等特點。WinCE不僅繼承了傳統(tǒng)的Windows圖形界面,并且在WinCE平臺上可以使用Win95/98上的編程工具(如VisualBasic、VisualC++等)、使絕大多數(shù)的應用軟件只需簡單的修改和移植就可以在WindowsCE平臺上繼續(xù)使用。VxWorksVxWorks操作系統(tǒng)是美國WINDRIVER公司于1983年設計開發(fā)的一種嵌入式實時操作系統(tǒng)(RTOS),是嵌入式開發(fā)環(huán)境的關鍵組成部分。良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的用戶開發(fā)環(huán)境,在嵌入式實時操作系統(tǒng)領域占據(jù)一席之地。它以其良好的可靠性和卓越的實時性被廣泛地應用在通信、軍事、航空、航天等高精尖技術及實時性要求極高的領域中,如衛(wèi)星通訊、軍事演習、彈道制導、飛機導航等,甚至在1997年4月登陸火星表面的火星探測器上也使用到了VxWorks。嵌入式系統(tǒng)的應用1輛汽車中有很多嵌入式系統(tǒng)馬達控制器車燈尾燈控制系統(tǒng)后車門控制系統(tǒng)前車門控制系統(tǒng)座椅控制系統(tǒng)發(fā)動器控制系統(tǒng)所有的控制系統(tǒng)都是一個完整的嵌入式系統(tǒng)嵌入式系統(tǒng)的未來嵌入式系統(tǒng)的應用將無處不在。目前,產(chǎn)品市場翻番的周期狂熱到6~9個月。STM32F107VCT61STM32F107VCT6本次課程以講解STM32F107VCT6微控制器為主。STM32F107VCT6是STM32系列產(chǎn)品中的1款微控制器。STM32系列產(chǎn)品的命名規(guī)則見[2]P3。STM32是基于ARM公司Cortex-M3核的32位微控制器。Cortex-M3核CortexM3是MCU的中央處理單元(CPU),完整的基于CM3的MCU還需要很多其它組件。芯片制造商得到CM3內(nèi)核的使用授權后,就可以在CM3內(nèi)核基礎上,添加存儲器,外設,I/O以及其它功能塊,形成自己的MCU。Cortex-M3芯片Cortex-M3的優(yōu)點性能強勁功耗低實時性好成本低開發(fā)工具便宜程序開發(fā)容易Cortex

M3Cortex

M3的出現(xiàn),在MCU市場上橫掃一片,帶來行業(yè)地震,引發(fā)MCU市場統(tǒng)一狂潮。以處處滿溢的先進特性力壓群芳。[1]P17Cortex-M3系列的生產(chǎn)廠商意法半導體(ST)恩智浦(NXP)德州儀器(TI)愛特梅爾(ATMEL)等等課后練習查閱資料,熟悉ARM架構的背景。STM32系列意法半導體生產(chǎn)的以Cortex-M3為內(nèi)核的芯片統(tǒng)稱為STM32系列2010年,STM32系列的總銷量為1.44億片,制約瓶頸為產(chǎn)能。2011年,STM32系列的產(chǎn)能擴大1倍。2011,STM32系列芯片的總銷量占全部Cortex-M3內(nèi)核總銷量的45%。STM32F107VCT6的功能詳見[5](選型手冊)。第2章GPIO1GPIOGPIO(GeneralPurposeInputOutput)通用輸入輸出接口([2]P105)GPIO引腳的內(nèi)部結構思考同AT89S51、STC89C52相比有什么不同?輸入輸出數(shù)據(jù)寄存器輸入的上拉和下拉電阻保護二極管輸入輸出數(shù)據(jù)寄存器定時將數(shù)據(jù)采樣到輸入數(shù)據(jù)寄存器。定時將數(shù)據(jù)送到輸出數(shù)據(jù)寄存器。思考GPIO添加輸入輸出數(shù)據(jù)寄存器有什么優(yōu)點?GPIO的功能模擬輸入浮空輸入下拉輸入上拉輸入開漏輸出推挽輸出復用開漏輸出復用推挽輸出

復用功能的推挽輸出GPIO_Mode_AF_PP——片內(nèi)外設功能(I2C的SCL,SDAUSART)

復用功能的開漏輸出GPIO_Mode_AF_OD——片內(nèi)外設功能(TX1,MOSI,MISO.SCK.SS)專用寄存器GPIOx_CRL(配置)([2]微控制器手冊P113)

GPIOx_CRH(配置)GPIOx_IDR(輸入數(shù)據(jù))GPIOx_ODR(輸出數(shù)據(jù))GPIOx_BSRR(位置位/位清零)GPIOx_BRR(位清零)GPIOx_LCKR(配置鎖定)RCC_APB2ENR([2]P70)

外設時鐘使能GPIO口的輸出1例題例題:LED(不用庫)功能:不用庫,在學習板上實現(xiàn)1個LED閃爍。課堂練習參考[6],新建一個項目,并下載到學習板上,觀察運行結果。例題講解硬件電路[15]電路圖STM32內(nèi)部結構簡介STM32存儲器映射[2]P27書P17片上外設的映射區(qū)域[2]P28頭文件啟動代碼書寫規(guī)范版本號硬件電路供電電路晶振電路復位電路LED電路供電STM32的工作電壓(VDD)為2.0~3.6V可通過LM1117穩(wěn)壓芯片實現(xiàn)[15]。課后上網(wǎng)查資料,熟悉LM1117芯片及其穩(wěn)壓電路。晶振電路內(nèi)部晶振(精度較差,誤差約為2%)外部晶振(普通晶振誤差小于1000ppm,高精度晶振可達10ppm以下)107手冊P1復位電路低電平復位(同AT89S51相反)[2]P54LED電路限流電阻的選擇。107手冊P33Stm32引腳的驅(qū)動能力約為8mA。最好采用“灌電流”方式設計。STM32芯片內(nèi)部結構簡圖存儲器映射[1]P31(課本P17)STM32F107VCT6SRAM(64K)0x20000000~0x2000FFFFFLASHROM(256K)0x08000000~0x0803FFFF片上外設(散布)0x40000000~0x5003FFFF片上外設的起始地址參考[2]P28CPU對片上外設的控制是通過對存儲單元的讀寫來實現(xiàn)思考GPIO端口D(GPIOD)的控制存儲區(qū)域復位和時鐘控制(RCC)的控制存儲區(qū)域GPIOD共有多少個專用寄存器?RCC共有多少個專用寄存器?GPIOD->CRL的地址是?RCC->APB2ENR的地址是?頭文件頭文件中對片上外設專用寄存器的符號做了定義。stm32f10x.h

–L1272頭文件添加方法:在編輯區(qū)域右擊鼠標添加。用庫和不用庫頭文件是不同的,為什么?啟動代碼啟動代碼的作用主要是對最小系統(tǒng)的初始化。版本號版本號:v0.0.0當版本號帶有第3個數(shù)字時,為調(diào)試版本,當修改程序時,需保存老版本,并增加該數(shù)字的值在新版本上修改。當程序調(diào)試成功,可以發(fā)布時,可增加中間的數(shù)字,并去掉第3個數(shù)字。當可發(fā)布的版本有重大改進,可增加第1個數(shù)字。課堂練習完全掌握例題的軟硬件設計。課堂練習在例題基礎上修改,實現(xiàn)流水燈功能。例題例題:LED功能:利用固件庫,在學習板上實現(xiàn)1個LED的閃爍。課堂練習參考[6],新建一個項目,在學習板上實現(xiàn)例題功能。熟悉例題。課堂練習在例題(v0.0.0)基礎上修改,實現(xiàn)流水燈功能。熟悉例題(v0.1.1).在例題(v0.1.1)基礎上修改,實現(xiàn)流水燈功能。課后練習在例題基礎上修改,分別用庫和不用庫實現(xiàn)LED的定時加一(二進制顯示)。使用庫函數(shù)控制LED燈閃爍《庫函數(shù)》P128GPIO_SetBits

函數(shù)GPIO_ResetBits

函數(shù)GPIO_WriteBit

函數(shù)GPIO_WriteGPIO口的輸入1例題例題:key(不用庫)功能:不用庫實現(xiàn):按鍵控制LED亮滅。按鍵的硬件連接參考[15]。PC4PB10PA0PC13課堂練習[2]P114在例題基礎上修改,實現(xiàn):4個按鍵控制4個LED亮滅。1.使能外部時鐘《控制器手冊》P952.讀輸入寄存器《控制器手冊》P1143.寫輸出寄存器《控制器手冊》P115GPIO庫設置步驟:《庫手冊》P124GPIO引腳時鐘使能RCC_APB2PeriphClockCmd《庫手冊》P127GPIO_InitTypeDef

定義初始化類型GPIO_InitStructure.GPIO_Pin

定義管腳GPIO_InitStructure.GPIO_Speed

定義速度GPIO_InitStructure.GPIO_Mode定義模式GPIO_Init

初始化命令《庫手冊》P124例題例題:key(v0.0.0版本)功能:用庫實現(xiàn):按鍵控制LED亮滅?!稁焓謨浴稰126GPIO_ReadInputDataBit()GPIO_ReadInputData()課堂練習在例題基礎上修改,實現(xiàn):4個按鍵控制4個LED亮滅。例題例題:key(v0.1.1版本)課堂練習在例題(v0.1.1)基礎上修改,實現(xiàn):4個按鍵控制4個LED亮滅。課后練習編寫程序(用庫)在學習板上實現(xiàn)下列功能:LED同時閃爍,LED左移的流水燈,LED右移的流水燈,按鍵控制LED值加一和減一。不同功能通過KEY_1鍵切換,加一通過KEY_2鍵實現(xiàn),減一通過KEY_3鍵實現(xiàn)。(注意格式的規(guī)范化)第3章中斷和異常1中斷和異常中斷(Interrupt),異常(Exception)凡是打斷程序順序執(zhí)行的事件,都被稱為異常。異常包括:系統(tǒng)異常和外部中斷。異常系統(tǒng)異常包括:有指令執(zhí)行了“非法操作”,訪問被禁的內(nèi)存區(qū)間,因各種錯誤產(chǎn)生的fault,不可屏蔽中斷等引起的與內(nèi)核相關的異常。外部中斷是指芯片內(nèi)部片上外設引起的中斷。外部中斷相當于傳統(tǒng)意義上的中斷,包括:傳統(tǒng)意義上的外部中斷,定時中斷,串行中斷,SPI中斷,AD中斷等。中斷和異常在不嚴格意義下:嚴格意義下的外部中斷統(tǒng)稱為中斷;嚴格意義下的系統(tǒng)異常統(tǒng)稱為異常。Cortex-M3的異常Cortex-M3的異常見[1]P33表2-2(課本P20)CM3支持240個中斷,但具體使用多少個是由芯片生產(chǎn)商決定。STM32F107VC的異常見[2]P130表54。CM3異常的處理由NVIC(嵌套向量中斷控制器)與CM3內(nèi)核里應外合,共同完成。NVICNVIC(NestedVectoredInterruptController)CM3和NVIC對所有異常按優(yōu)先級進行排序并處理。默認排序:異常向量表中位置靠前的優(yōu)先級越高。思考默認情況下,外部中斷0和外部中斷1哪個優(yōu)先級高?如何更改默認的優(yōu)先級順序呢?優(yōu)先級對異常向量表中默認排序可通過設置搶占式優(yōu)先級和響應式優(yōu)先級進行修改。具有高搶占式優(yōu)先級的中斷可以在具有低搶占式優(yōu)先級的中斷處理過程中被響應,即中斷嵌套,或者說高搶占式優(yōu)先級的中斷可以嵌套低搶占式優(yōu)先級的中斷。搶占式優(yōu)先級相同時,如同時產(chǎn)生中斷,響應式優(yōu)先級高的中斷先得到處理。如兩種優(yōu)先級都相同時,默認優(yōu)先級高的中斷先得到處理。。優(yōu)先級的設置STM32系列的搶占式優(yōu)先級數(shù)量可設置為:1,2,4,8,16個當搶占式優(yōu)先級設為1個時,該級別的響應式優(yōu)先級可設16個。當搶占式優(yōu)先級設為2個時,每個級別的響應式優(yōu)先級可設8個,依此類推。要注意的幾點是:

1)如果指定的搶占式優(yōu)先級別或響應優(yōu)先級別超出了選定的優(yōu)先級分組所限定的范圍,將可能得到意想不到的結果;

2)搶占式優(yōu)先級別相同的中斷源之間沒有嵌套關系;

3)由于Pxn連接到同一個外部中斷線上,因此不要在使用PA0時,使用PB0.(P137)

4)如果某個中斷源被指定為某個搶占式優(yōu)先級別,又沒有其它中斷源處于同一個搶占式優(yōu)先級別,則可以為這個中斷源指定任意有效的響應優(yōu)先級別。思考當搶占式優(yōu)先級設為8個時,每個級別的響應式優(yōu)先級可設多少個?具體如何設置,詳見后面的例題。相關庫函數(shù)NVIC_Init《庫手冊》P166按鍵的硬件連接參考[15]。PC4PB10PA0PC13第4章外部中斷1外部中斷本章的外部中斷均指傳統(tǒng)的外部中斷。STM32F10X的每個IO口都可以設為外部中斷,最多可設19個。16+3=19[微控制器手冊]P137外部中斷的引腳0號外部中斷線只能設在GPIO口的0號引腳,依此類推,15號外部中斷線只能設在GPIO口的15號引腳。16號外部中斷線只能連到PVD輸出引腳。17號外部中斷線只能連到RTC鬧鐘事件。18號外部中斷線只能連到USB喚醒事件。中斷設置步驟GPIO引腳時鐘使能RCC_APB2PeriphClockCmd《庫手冊》P127GPIO引腳屬性設置

GPIO_Init《庫手冊》P1243.外部中斷配置GPIO_EXTILineConfig《庫手冊》P1334.外部中斷初始化EXTI_Init《庫手冊》P99EXTI_InitStructure.EXTI_Line=EXTI_Line0; //中斷線EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;//模式:中斷請求/事件請求EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;

//下降沿觸發(fā)EXTI_InitStructure.EXTI_LineCmd=ENABLE;//中斷使能EXTI_Init(&EXTI_InitStructure);//進行初始化例題例題:XINT功能:將學習板上的4個按鍵作為4個外部中斷的輸入,分別控制4個LED亮滅。課堂練習在例題“KEY”的基礎上,進行修改,最終修改為例題“XINT”。用word文檔記錄修改過程。分析修改的每一步過程,搞懂為什么這樣修改。課堂練習在學習板上實現(xiàn)下列功能:LED同時閃爍,LED左移的流水燈,LED右移的流水燈,按鍵控制LED值加一和減一。不同功能通過KEY_1鍵切換,加一通過KEY_2鍵實現(xiàn),減一通過KEY_3鍵實現(xiàn)。(按鍵用外部中斷實現(xiàn))課后練習閱讀并熟悉[1]第2章、第7章、第8章。理解例題“XINT”。CM3的寄存器組1參見[1]P38(課本P26)CM3的寄存器組寄存器組在CM3內(nèi)核中,效率高。通用寄存器R0-R7:所有指令均可訪問。通用寄存器R8-R12:僅很少的Thumb指令能訪問,32位的Thumb-2指令不受限制。寄存器組的使用函數(shù)的參數(shù)和函數(shù)中的臨時變量一般定義在寄存器組中。優(yōu)先使用R0-R3,R12Thumb-2與Thumb的關系R13(堆棧指針)雙堆棧機制主堆棧指針MSP(SP_main)進程堆棧指針PSP(SP_process)MSP為默認的堆棧指針,由操作系統(tǒng)或異常服務例程使用PSP由用戶程序使用CM3的堆棧向下生長的滿棧PUSH{R0}R13=R13-4;*R13=R0;POP{R0}R0=*R13;R13=R13+4;R14R14(LR):連接寄存器功能:調(diào)用子程序時,保存返回地址要實現(xiàn)嵌套,R14必須入棧響應異常時,有新用途R15程序計數(shù)器(PC)CM3的特殊功能寄存器CM3的操作模式1操作模式特權級handler模式特權級thread模式用戶級thread模式關于用戶級thread模式用戶thread模式一般在有操作系統(tǒng)時才使用。用戶級代碼禁止寫特殊功能寄存器如果芯片帶有MPU,用戶級代碼還禁止訪問部分內(nèi)存區(qū)域。STM32不帶MPU雙堆棧機制MSP(SP_main)PSP(SP_process)PSP一般在有操作系統(tǒng)時才使用。CONTROL[1]=1時,為PSP響應異常和異常返回1響應異常響應異常時,自動完成以下工作:入棧取址(與入棧同時進行)更新入棧將xPSR、PC、LR、R12、R3~R0(共8個)依次入棧如果R4-R11需要入棧,由編譯器負責生成代碼取址從向量表中找出服務程序地址更新入棧的同時更新了SP更新IPSR(xPSR低9位)為新的異常編號更新PC更新LR為EXC_RETURN異常返回自動將EXC_RETURN寫入PC,觸發(fā)異常返回,并完成以下工作:出棧更新例題例題:startup研究v3.5庫中STM32F107的啟動代碼。時鐘樹參見[微控制器手冊]P80時鐘設置流程HSE(25MHZ)PREDIV2(/5,5M)PLL2MUL(*8,40M)

PREDIV1SCR(PLL2,40M)

PREDIV1(/5,8M)PLLSCR(PREDIV1,8M)PLLMUL((*9,72M)

SW(PLL,72M)

SYSCLK(72MHZ)課堂練習找到系統(tǒng)時鐘設置代碼,結合[2],看懂系統(tǒng)時鐘設置程序。閱讀并熟悉[2]第7章。第5章系統(tǒng)時基定時器1系統(tǒng)時基定時器簡介STM32F10X內(nèi)核中有一個24位的系統(tǒng)時基定時器。設定初值并使能后,該定時器每經(jīng)過1個系統(tǒng)時鐘周期減1,當減到0時,自動重裝初值,并觸發(fā)中斷?!稁焓謨浴稰237例題例題:

SysTick功能:利用系統(tǒng)時基定時器,實現(xiàn)LED定時加一。主程序中斷服務程序例題例題:

KEY_SysTick要求:利用系統(tǒng)時基定時器實現(xiàn)按鍵去抖動。功能:按鍵控制LED閃爍課堂練習在例題“SysTick”基礎上修改,最終修改為例題“KEY_SysTick”。用word文檔記錄修改過程。分析修改的每一步過程,搞懂為什么這樣修改。課后練習利用系統(tǒng)時基定時器實現(xiàn)LED二進制顯示值每隔1秒定時加一,其中,顯示值可通過按鍵設置。在Key_Sys上修改方法:1.將SysTick工程中的systick中斷服務代碼拷入,更改externu8counter_numb2.將變量counter_numb在main.c中定義u8counter_numb,在按鍵按下后修改counter_numb=0x08,04,02,01。課堂練習修改系統(tǒng)時鐘,編寫程序,觀察修改后的效果。第7章定時器1例題例題:timer功能:利用通用定時器實現(xiàn)LED二進制顯示值每隔1秒定時加一,其中,顯示值可通過按鍵設置。1.配置LedConfig()KeyConfig()Timer5Config()2.初始化課堂練習在其它例題基礎上,進行修改,實現(xiàn)上面的例題“timer”。用word文檔記錄修改過程。分析修改的每一步過程,搞懂為什么這樣修改。課堂練習改用tim5以外的通用定時器實現(xiàn)例題功能。方法:把所有的tim5改成tim2課后練習編寫測試代碼,試試通用定時器的其它功能。第8章TFT-LCD1TFT-LCD簡介TFT(ThinFilmTransistor)應用廣泛學習板上的TFT彩屏分辨率為320*240,彩屏模塊集成了SSD1289控制器[9]。TFT-LCD原理閱讀[3]P266~270熟悉TFT-LCD的基本原理。例題例題:TFT-LCD功能:在TFT-LCD上顯示字符及顏色。討論和解釋。課堂練習在TFT-LCD上顯示定時器的1秒計數(shù)值將LCD與Timer兩個程序組合在一起,形成一個完整的程序,功能:Timer中的BitNumb值顯示在LCD上??疾旌陀柧氉约盒薷某绦?,添加和刪除相應代碼,學會使用定位錯誤的方法。課后練習在TFT-LCD上顯示可調(diào)時的電子鐘。創(chuàng)新練習利用學習板實現(xiàn)一款創(chuàng)新作品。第9章uCGUI1uCGUI初識μC/GUI以C源代碼形式給LCD應用程序提供了一個高效的封裝庫。它適合于單一任務和多任務環(huán)境,專用的操作系統(tǒng)或者任何商業(yè)的實時操作系統(tǒng)(RTOS)。提供底層驅(qū)動程序后,它可以適用于任何LCD控制器和CPU。uCGUI的特點支持不同顏色深度的位圖。不同的繪畫模式。提供了多種字體:4*6,6*8,6*9,8*8,8*9,8*16,8*17,8*18,24*32,字體還可充分地縮放。完全的窗口管理器包括剪切在內(nèi)。提供觸摸屏和鼠標支持。例題例題:

uCGUI最簡單的基于uCGUI的例題。功能:在LCD上顯示“Helloworld!”將例題現(xiàn)在到學習板上,觀察效果。uCGUI的移植uCGUI的移植步驟見[18]。課堂練習利用uCGUI,實現(xiàn)可調(diào)時的1秒定時加一,二進制的數(shù)值顯示在LCD上。利用uCGUI,實現(xiàn)可調(diào)時的電子鐘。創(chuàng)新練習利用uCGUI,實現(xiàn)中文顯示。第10章DMA控制器1DMA簡介DMA(DirectMemoryAccess)直接存儲器存取主要功能:無需CPU干預,實現(xiàn)外設之間通信的“橋梁”。詳見[2]P142,[11]初步閱讀例題見后面章節(jié)AD轉(zhuǎn)換1例題例題:AD轉(zhuǎn)換功能:在TFT-LCD上顯示電位器的電壓值。討論和解釋。課堂作業(yè)將例題下載到學習板觀察效果。熟悉例題。從新建項目開始,一步步實現(xiàn)例題功能。課堂練習利用uCGUI實現(xiàn)例題功能。USART串口1例題例題:COM2_putchar功能:在學習板上的COM2接口實現(xiàn)字符輸出。例題例題:COM2_printf功能:在學習板上的COM2接口實現(xiàn)Printf輸出和scanf輸入。課堂作業(yè)將例題下載到學習板觀察效果。熟悉例題。在例題KEY_SysTick上修改,實現(xiàn)例題COM2_printf功能。注意:需將keil項目中,“OptionsforTarget/Target/UseMicroLIB”選中。課后練習熟悉Printf函數(shù),scanf函數(shù)及其編程。USB接口1例題USB_HID參考[28],實現(xiàn)例題。課堂作業(yè)參考[23-27],熟悉USB協(xié)議。RTThread操作系統(tǒng)1RTThread簡介1RTThread特點小型,實時,可剪裁,代碼格式規(guī)范。結合了VxWorks和ucos兩個操作系統(tǒng)的優(yōu)點,綜合性能優(yōu)于ucos,是CortexM3內(nèi)核的最理想的嵌入式操作系統(tǒng)。源代碼完全公開,免費商業(yè)使用。RTThread歷史RT-Thread是由熊譜翔(bernard)發(fā)起并組織的開源項目,源代碼均為操作系統(tǒng)愛好者利用業(yè)余時間開發(fā),并全部開放。2006年,發(fā)布了第一個版本v0.1目前最新版是v1.0.1,2012年4月16日發(fā)布。例題利用rtthread最新的操作系統(tǒng),在開發(fā)板上實現(xiàn):4個LED以不同頻率閃爍。課堂練習參考[31],實現(xiàn)例題功能。從例題可以看出,

RTThread實現(xiàn)了多線程。例題中定義的線程數(shù)量例題中共定義了6個線程。應用文件中定義了4個線程。系統(tǒng)默認定義了1個調(diào)試線程和1個空閑線程。例題Uart1輸出實驗。Uart2輸出實驗。參考[33],實現(xiàn)例題功能。從例題可以看出,

在RTThread上,編寫應用程序?qū)崿F(xiàn)uart是相當?shù)娜菀祝TThread的要求在RTThread操作系統(tǒng)之上會編寫應用程序。掌握RTThread操作系統(tǒng)的內(nèi)核原理,讀懂RTThread的源代碼。RTThread源碼風格1C語言實現(xiàn)了面向?qū)ο箫L格面向?qū)ο笤O計更適合于人類思考問題的特點,有其天然的好處,如:封裝、繼承、多態(tài)性。RTThread用C語言實現(xiàn)了精簡的面向?qū)ο蠛诵乃枷?。結構清晰,代碼容量小。RTThread對象化模型封裝繼承多態(tài)封裝封裝使數(shù)據(jù)和加工該數(shù)據(jù)的方法(函數(shù))封裝為一個整體,以實現(xiàn)獨立性很強的模塊,使得用戶只能見到對象的外特性,而對象的內(nèi)特性(保存內(nèi)部狀態(tài)的私有數(shù)據(jù)和實現(xiàn)加工能力的算法)對用戶是隱蔽的。C++是通過類實現(xiàn)封裝的,關鍵函數(shù)、數(shù)據(jù)設置為私有。RTThread采用C語言通過在文件中將需封裝的數(shù)據(jù)和函數(shù)前加“static”關鍵字,使其作用域限制在文件中實現(xiàn)的。舉例打開源碼中“usart.c”、“serial.c”文件。熟悉文件中“static”關鍵字的使用。熟悉利用C語言實現(xiàn)封裝的設計方法。L245voidrt_hw_usart_init()繼承繼承是C++語言中,子類共享父類數(shù)據(jù)和方法的機制。RTThread采用C語言通過強制類型轉(zhuǎn)換的方法實現(xiàn)繼承(僅能實現(xiàn)單重繼承)。例題熟悉[30]P30的程序代碼。課堂練習打開源碼中“rtdef.h”文件,結合[30]P36圖,熟悉RTThread

繼承的實現(xiàn)方法。多態(tài)同一消息為不同的對象接受時可產(chǎn)生完全不同的行動,這種現(xiàn)象稱為多態(tài)性。RTThread采用C語言通過函數(shù)指針的方法實現(xiàn)多態(tài)性。C++采用虛函數(shù)通過不同的狀態(tài)調(diào)用不同的函數(shù)例題熟悉[30]P31的程序代碼。課堂練習結合多態(tài)性和“rt_device”結構的定義,熟悉源碼中的2個函數(shù):“rtthread_startup();”/“rt_hw_board_init();”/“rt_hw_usart_init();”

“rtthread_startup();”/“rt_device_init_all();”關中斷和開中斷1關中斷和開中斷一些關鍵語句需要關閉中斷運行。PRIMASK(中斷屏蔽寄存器)僅1位有效:為1時,關閉所有可屏蔽的異常,只剩下NMI和硬fault可以響應。[1]P41CPSIDI;關中斷CPSIEI;開中斷例題打開例題的“context_rvdx.s”文件,熟悉關中斷和開中斷程序。多線程1多線程運行框圖線程的狀態(tài)在源碼的“rtdef.h”文件中定義了線程的幾種狀態(tài)(此處如果使用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論