實(shí)時(shí)操作系統(tǒng)應(yīng)用技術(shù) 課件 RTOS-第05章-底層硬件驅(qū)動(dòng)構(gòu)件_第1頁(yè)
實(shí)時(shí)操作系統(tǒng)應(yīng)用技術(shù) 課件 RTOS-第05章-底層硬件驅(qū)動(dòng)構(gòu)件_第2頁(yè)
實(shí)時(shí)操作系統(tǒng)應(yīng)用技術(shù) 課件 RTOS-第05章-底層硬件驅(qū)動(dòng)構(gòu)件_第3頁(yè)
實(shí)時(shí)操作系統(tǒng)應(yīng)用技術(shù) 課件 RTOS-第05章-底層硬件驅(qū)動(dòng)構(gòu)件_第4頁(yè)
實(shí)時(shí)操作系統(tǒng)應(yīng)用技術(shù) 課件 RTOS-第05章-底層硬件驅(qū)動(dòng)構(gòu)件_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

RTOS

本章導(dǎo)引:

在嵌入式領(lǐng)域,無(wú)論是基于NOS編程,還是基于RTOS編程,都要與硬件打交道。軟件干預(yù)硬件的方法是通過(guò)基礎(chǔ)構(gòu)件完成的,在應(yīng)用層面,只要使用基礎(chǔ)構(gòu)件的對(duì)外應(yīng)用程序接口API干預(yù)硬件。因此,規(guī)范的構(gòu)件封裝及體現(xiàn)知識(shí)要素的API十分重要。本章首先給出嵌入式構(gòu)件概述及基礎(chǔ)構(gòu)件的設(shè)計(jì)要點(diǎn),在此基礎(chǔ)上,給出基礎(chǔ)構(gòu)件、應(yīng)用構(gòu)件及軟件構(gòu)件的設(shè)計(jì)舉例,由此理解構(gòu)件的重用與移植方法。第5章基礎(chǔ)構(gòu)件5.1嵌入式構(gòu)件概述RTOS第5章基礎(chǔ)構(gòu)件5.2基礎(chǔ)構(gòu)件設(shè)計(jì)原則與方法5.3基礎(chǔ)構(gòu)件設(shè)計(jì)舉例5.4應(yīng)用構(gòu)件設(shè)計(jì)實(shí)例5.5軟件構(gòu)件設(shè)計(jì)實(shí)例5.6本章小結(jié)第1頁(yè)共38頁(yè)RTOS5.1.1制作構(gòu)件的必要性(了解)

機(jī)械、建筑等傳統(tǒng)產(chǎn)業(yè)的運(yùn)作模式是先生產(chǎn)符合標(biāo)準(zhǔn)的構(gòu)件(零部件),然后將標(biāo)準(zhǔn)構(gòu)件按照規(guī)則組裝成實(shí)際產(chǎn)品。其中,構(gòu)件是核心和基礎(chǔ),復(fù)用是必需的手段。傳統(tǒng)產(chǎn)業(yè)的成功充分證明了這種模式的可行性和正確性。軟件產(chǎn)業(yè)的發(fā)展借鑒了這種模式,為標(biāo)準(zhǔn)軟件構(gòu)件的生產(chǎn)和復(fù)用確立了舉足輕重的地位。

隨著時(shí)間的推移,硬件設(shè)計(jì)變得越來(lái)越復(fù)雜,軟件的分量也急劇增大,嵌入式開(kāi)發(fā)人員也由一人發(fā)展為由若干人組成的開(kāi)發(fā)團(tuán)隊(duì)。為此,希望提高軟硬件設(shè)計(jì)可重用性與可移植性,構(gòu)件的設(shè)計(jì)與應(yīng)用是重用與移植的基礎(chǔ)與保障。5.1嵌入式構(gòu)件概述第2頁(yè)共38頁(yè)RTOS5.1.2構(gòu)件的基本概念構(gòu)件(component):

廣義上的理解是:可復(fù)用的成分,這里的構(gòu)件主要是指軟件構(gòu)件。軟件構(gòu)件是一種組裝單元,它具有規(guī)范的接口規(guī)約和顯式的語(yǔ)境依賴(lài)。軟件構(gòu)件可以被獨(dú)立地部署并由第三方任意地組裝。它既包括了技術(shù)因素,例如獨(dú)立性、合約接口、組裝,也包括了市場(chǎng)因素,例如第三方和部署。

美國(guó)卡內(nèi)基梅隆大學(xué)軟件工程研究所(Carnegie-MellonUniversity/SoftwareEngineeringInstitute,CMU/SEI)給出的軟件構(gòu)件的定義:構(gòu)件是一個(gè)不透明的功能實(shí)體,能夠被第三方組織,且符合一個(gè)構(gòu)件模型。第3頁(yè)共38頁(yè)RTOS5.1.3嵌入式開(kāi)發(fā)中構(gòu)件分類(lèi)

為了便于理解與應(yīng)用,可以把嵌入式軟件構(gòu)件分為基礎(chǔ)構(gòu)件、應(yīng)用構(gòu)件與軟件構(gòu)件三種類(lèi)型。

1.基礎(chǔ)構(gòu)件:基礎(chǔ)構(gòu)件是根據(jù)MCU內(nèi)部功能模塊的基本知識(shí)要素,針對(duì)MCU引腳功能或MCU內(nèi)部功能,利用MCU內(nèi)部寄存器所制作的直接干預(yù)硬件的構(gòu)件。

2.應(yīng)用構(gòu)件:應(yīng)用構(gòu)件是調(diào)用芯片基礎(chǔ)構(gòu)件而制作完成的,符合軟件工程封裝規(guī)范的,面向?qū)嶋H應(yīng)用硬件模塊的驅(qū)動(dòng)構(gòu)件。

3.軟件構(gòu)件:軟件構(gòu)件是一個(gè)面向?qū)ο蟮?、具有?guī)范接口和確定的上下文依賴(lài)的組裝單元,它能夠被獨(dú)立使用或被其他構(gòu)件調(diào)用。第4頁(yè)共38頁(yè)RTOS5.1.4構(gòu)件的基本特征與表現(xiàn)形式

在嵌入式軟件領(lǐng)域中,軟件與硬件緊密聯(lián)系,良好的底層驅(qū)動(dòng)構(gòu)件具備如下特性:1)封裝性。在內(nèi)部封裝實(shí)現(xiàn)細(xì)節(jié),采用獨(dú)立的內(nèi)部結(jié)構(gòu)以減少對(duì)外部環(huán)境的依賴(lài)。2)描述性。構(gòu)件必須提供規(guī)范的函數(shù)名稱(chēng)、清晰的接口信息、參數(shù)含義與范圍、必要的注意事項(xiàng)等描述。3)可移植性。是指同樣功能的構(gòu)件,如何做到不改動(dòng)或少改動(dòng),而方便地移植到同系列及不同系列芯片內(nèi).4)可復(fù)用性。在滿(mǎn)足一定使用要求時(shí),構(gòu)件不經(jīng)過(guò)任何修改就可以直接使用。第5頁(yè)共38頁(yè)RTOS5.1.4構(gòu)件的基本特征與表達(dá)形式

底層構(gòu)件即基礎(chǔ)構(gòu)件,是與硬件直接打交道的軟件,它被組織成具有一定獨(dú)立性的功能模塊,由頭文件和源程序文件兩部分組成。構(gòu)件的頭文件名和源程序文件名一致,且為構(gòu)件名。

構(gòu)件的頭文件中,主要包含必要的引用文件、描述構(gòu)件功能特性的宏定義語(yǔ)句以及聲明對(duì)外接口函數(shù)。

構(gòu)件的源程序文件中包含構(gòu)件的頭文件、內(nèi)部函數(shù)的聲明、對(duì)外接口函數(shù)的實(shí)現(xiàn)。

將構(gòu)件分為頭文件與源程序文件兩個(gè)獨(dú)立的部分,意義在于,頭文件中包含對(duì)構(gòu)件的使用信息的完整描述,調(diào)用者通過(guò)構(gòu)件對(duì)外接口獲取服務(wù),而不必關(guān)心服務(wù)函數(shù)的具體實(shí)現(xiàn)細(xì)節(jié)。第6頁(yè)共38頁(yè)RTOS5.2.1

基礎(chǔ)構(gòu)件設(shè)計(jì)的基本原則

在設(shè)計(jì)基礎(chǔ)構(gòu)件時(shí),最關(guān)鍵的工作是要對(duì)構(gòu)件的共性和個(gè)性進(jìn)行分析,設(shè)計(jì)出合理的、必要的對(duì)外接口函數(shù)及其形參。盡量做到:當(dāng)一個(gè)基礎(chǔ)構(gòu)件應(yīng)用到不同系統(tǒng)中時(shí),僅需修改構(gòu)件的頭文件,對(duì)于構(gòu)件的源程序文件則不必修改或改動(dòng)很小。

根據(jù)構(gòu)件的封裝性、描述性、可移植性、可復(fù)用性的基本特征,基礎(chǔ)構(gòu)件的開(kāi)發(fā),應(yīng)遵循層次化、易用性、魯棒性及對(duì)內(nèi)存的可靠使用原則。5.2基礎(chǔ)構(gòu)件設(shè)計(jì)原則與方法(重點(diǎn)、難點(diǎn))第7頁(yè)共38頁(yè)RTOS5.2.1基礎(chǔ)構(gòu)件設(shè)計(jì)的基本原則1.層次化原則:針對(duì)應(yīng)用場(chǎng)景和服務(wù)對(duì)象,分層組織構(gòu)件。在構(gòu)件的層次模型中,上層構(gòu)件可以調(diào)用下層構(gòu)件提供的服務(wù),同一層次的構(gòu)件不存在相互依賴(lài)關(guān)系,不能相互調(diào)用。2.易用性原則:函數(shù)名簡(jiǎn)潔且達(dá)意;接口參數(shù)清晰,范圍明確;使用說(shuō)明語(yǔ)言精煉規(guī)范,避免二義性。3.魯棒性原則:在明確函數(shù)輸入輸出的取值范圍、提供清晰接口描述的同時(shí),在函數(shù)實(shí)現(xiàn)的內(nèi)部要有對(duì)輸入?yún)?shù)檢測(cè),對(duì)超出合法范圍的輸入?yún)?shù)進(jìn)行必要的處理。4.內(nèi)存可靠使用原則:優(yōu)先使用靜態(tài)分配內(nèi)存、謹(jǐn)慎地使用變量、檢測(cè)空指針、檢測(cè)緩沖區(qū)溢出,并為內(nèi)存中的緩沖區(qū)預(yù)留不小于20%的冗余、對(duì)內(nèi)存的使用情況進(jìn)行評(píng)估。第8頁(yè)共38頁(yè)RTOS5.2.2基礎(chǔ)構(gòu)件設(shè)計(jì)要點(diǎn)分析(重點(diǎn))

以通用輸入輸出GPIO驅(qū)動(dòng)構(gòu)件為例,簡(jiǎn)要闡述基礎(chǔ)構(gòu)件的設(shè)計(jì)方法。前提條件是,必須理解什么是GPIO。GPIO引腳可以被定義成輸入、輸出兩種情況:若是輸入,程序需要獲得引腳的狀態(tài)(邏輯1或0);若是輸出,程序可以設(shè)置引腳狀態(tài)(邏輯1或0)。

GPIO驅(qū)動(dòng)構(gòu)件可以實(shí)現(xiàn)對(duì)所有GPIO引腳統(tǒng)一編程,GPIO驅(qū)動(dòng)構(gòu)件由gpio.h、gpio.c兩個(gè)文件組成。第9頁(yè)共38頁(yè)RTOS5.2.2基礎(chǔ)構(gòu)件設(shè)計(jì)要點(diǎn)分析1.模塊初始化(gpio_init)由于芯片引腳具有復(fù)用特性,應(yīng)把引腳設(shè)置成GPIO功能;同時(shí)定義成輸入或輸出;若是輸出,還要給出初始狀態(tài)。Voidgpio_init(uint_16port_pin,uint_8dir,uint_8state)2.設(shè)置引腳狀態(tài)(gpio_set)對(duì)于輸出,希望通過(guò)函數(shù)設(shè)置引腳是高電平(邏輯1)還是低電平(邏輯0),入口參數(shù)應(yīng)該是哪個(gè)引腳,輸出其狀態(tài)是什么,函數(shù)不必有返回值。voidgpio_set(uint_16port_pin,uint_8state)第10頁(yè)共38頁(yè)RTOS5.2.2基礎(chǔ)構(gòu)件設(shè)計(jì)要點(diǎn)分析3.獲得引腳狀態(tài)(gpio_get)對(duì)于輸入,希望通過(guò)函數(shù)獲得引腳的狀態(tài)是高電平(邏輯1)還是低電平(邏輯0),入口參數(shù)應(yīng)該是哪個(gè)引腳,函數(shù)需要返回值引腳狀態(tài)。uint_8gpio_get(uint_16port_pin)4.引腳狀態(tài)反轉(zhuǎn)(voidgpio_reverse)類(lèi)似的分析,可以設(shè)計(jì)引腳狀態(tài)反轉(zhuǎn)函數(shù)的原型為:voidgpio_reverse(uint_16port_pin)第11頁(yè)共38頁(yè)RTOS5.2.2基礎(chǔ)構(gòu)件設(shè)計(jì)要點(diǎn)分析5.引腳上下拉使能函數(shù)(voidgpio_pull)若引腳被設(shè)置成輸入,還可以設(shè)定內(nèi)部上下拉,KL36內(nèi)部上下拉電阻大小為20~50K?。引腳上下拉使能函數(shù)的原型為:voidgpio_pull(uint_16port_pin,uint_8pullselect)

要實(shí)現(xiàn)GPIO驅(qū)動(dòng)構(gòu)件的這幾個(gè)函數(shù),除了要給出清晰的接口、良好的封裝、簡(jiǎn)潔的說(shuō)明與注釋、規(guī)范的編程風(fēng)格等之外,還需要一些基本規(guī)范與準(zhǔn)備工作,下面兩小節(jié)分別給出構(gòu)件封裝規(guī)范與前期準(zhǔn)備。第12頁(yè)共38頁(yè)RTOS5.2.3基礎(chǔ)構(gòu)件封裝規(guī)范概要1.基礎(chǔ)構(gòu)件的組成、存放位置與內(nèi)容:每個(gè)構(gòu)件由頭文件(.h)與源文件(.c)兩個(gè)獨(dú)立文件組成,放在以構(gòu)件名命名的文件夾中。2.設(shè)計(jì)構(gòu)件的最基本要求:1)考慮使用與移植方便。要對(duì)構(gòu)件的共性與個(gè)性進(jìn)行分析,抽取出構(gòu)件的屬性和對(duì)外接口函數(shù)。2)要有統(tǒng)一、規(guī)范的編碼風(fēng)格與注釋。3)宏的使用限制。4)不使用全局變量。第13頁(yè)共38頁(yè)RTOS5.2.4封裝的前期準(zhǔn)備:公共要素

可以一些公用的宏定義放在cpu.h文件中,因?yàn)樗鼛缀醣凰形募褂?,如位操作宏函?shù)、不優(yōu)化類(lèi)型的簡(jiǎn)短別名宏定義等,方便公用。1.位操作宏函數(shù):在編程時(shí)經(jīng)常需要對(duì)寄存器的某一位進(jìn)行操作,即對(duì)寄存器的置位、清位及獲得寄存器某一位狀態(tài)的操作,可以將這些操作定義成宏函數(shù)。2.不優(yōu)化類(lèi)型的簡(jiǎn)短別名:不同的編譯器為基本整型數(shù)據(jù)類(lèi)型分配的位數(shù)存在不同,但在編寫(xiě)嵌入式程序是要明確使用變量的字長(zhǎng),特別是不優(yōu)化類(lèi)型,為方便書(shū)寫(xiě),給出簡(jiǎn)短別名。第14頁(yè)共38頁(yè)RTOS5.3.1GPIO構(gòu)件5.3基礎(chǔ)構(gòu)件設(shè)計(jì)舉例

1.GPIO知識(shí)要素:通用輸入輸出(GeneralPurposeInput/Output,GPIO),是I/O最基本形式,是幾乎所有計(jì)算機(jī)均使用到的部件。GPIO的輸出是以計(jì)算機(jī)內(nèi)部程序通過(guò)單個(gè)引腳來(lái)控制開(kāi)關(guān)量設(shè)備,達(dá)到自動(dòng)控制開(kāi)關(guān)狀態(tài)之目的。GPIO的輸入是以計(jì)算機(jī)內(nèi)部程序獲取單個(gè)引腳狀態(tài),達(dá)到獲得外界開(kāi)關(guān)狀態(tài)之目的。第15頁(yè)共38頁(yè)RTOS5.3.1GPIO構(gòu)件2.GPIO構(gòu)件API,具體參數(shù)可見(jiàn)RT-Thread實(shí)例演示。序號(hào)函數(shù)名簡(jiǎn)明功能描述1gpio_init初始化引腳復(fù)用為GPIO功能;定義其為輸入或輸出;若為輸出,還給出其初始狀態(tài)2gpio_set設(shè)定引腳狀態(tài)在GPIO輸出情況下,設(shè)定引腳狀態(tài)(高/低電平)3gpio_get獲取引腳狀態(tài)在GPIO輸入情況下,獲取引腳狀態(tài)(1/0)4gpio_reverse反轉(zhuǎn)引腳狀態(tài)在GPIO輸出情況下,反轉(zhuǎn)引腳狀態(tài)5gpio_pull設(shè)置引腳上/下拉當(dāng)GPIO輸入情況下,設(shè)置引腳上/下拉6gpio_enable_int使能中斷當(dāng)GPIO輸入情況下,使能引腳中斷7gpio_disable_int關(guān)閉中斷當(dāng)GPIO輸入情況下,關(guān)閉引腳中斷8gpio_get_int獲取中斷標(biāo)志當(dāng)GPIO輸入情況下,用來(lái)獲取引腳中斷狀況9gpio_clear_int清除中斷標(biāo)志當(dāng)GPIO輸入情況下,清除中斷標(biāo)志10gpio_clear_allint清除所有引腳中斷當(dāng)GPIO輸入情況下,清除所有端口的GPIO中斷第16頁(yè)共38頁(yè)RTOS5.3.1GPIO構(gòu)件3.GPIO構(gòu)件的輸出測(cè)試方法:在AHL-STM32L431-RT-Thread開(kāi)發(fā)套件的底板上,有紅綠藍(lán)三色燈(合為一體的),若使用GPIO構(gòu)件實(shí)現(xiàn)紅燈閃爍,具體實(shí)例可參考“..\03-Software\CH05-Hard-component\GPIO-Output(Light)”,步驟如下:(1)給燈命名//指示燈端口及引腳定義#defineLIGHT_RED(PTB_NUM|7)//紅燈所在引腳,實(shí)際應(yīng)用要根據(jù)具體引腳修改注:RT-Thread實(shí)例演示(CH6.3.1-GPIO_INPUT(Interrupt))第17頁(yè)共38頁(yè)RTOS5.3.1GPIO構(gòu)件(2)對(duì)燈的狀態(tài)進(jìn)行宏定義//燈狀態(tài)宏定義(燈的亮暗對(duì)應(yīng)的邏輯電平,由物理硬件接法決定)#defineLIGHT_ON0//燈亮#defineLIGHT_OFF1//燈暗(3)初始化紅燈gpio_init(LIGHT_RED,GPIO_OUTPUT,LIGHT_OFF);//初始化紅燈,輸出,暗第18頁(yè)共38頁(yè)RTOS5.3.1GPIO構(gòu)件(4)改變紅燈亮暗狀態(tài)在main函數(shù)的主循環(huán)中,利用GPIO構(gòu)件中的gpio_reverse函數(shù),可實(shí)現(xiàn)紅燈狀態(tài)切換。工程編譯生成可執(zhí)行文件后,寫(xiě)入目標(biāo)板,可觀察實(shí)際紅燈閃爍情況。gpio_reverse(LIGHT_RED);//紅燈狀態(tài)切換第19頁(yè)共38頁(yè)RTOS5.3.1GPIO構(gòu)件(5)紅燈運(yùn)行情況經(jīng)過(guò)編譯生成機(jī)器碼,通過(guò)AHL-GEC-IDE軟件將hex文件下載到目標(biāo)板中,可觀察板載紅燈每秒閃爍一次,也可在AHL-GEC-IDE界面看到紅燈狀態(tài)改變的信息,如圖所示。由此可體會(huì),使用printf語(yǔ)句進(jìn)行調(diào)試的好處。第20頁(yè)共38頁(yè)RTOS5.3.1GPIO構(gòu)件4.GPIO構(gòu)件的輸入測(cè)試方法:中斷獲取開(kāi)關(guān)狀態(tài)首先初始化具有中斷功能的引腳的引腳方向?yàn)檩斎耄缓蟠蜷_(kāi)其中斷并設(shè)置其觸發(fā)中斷的電平變化方式,隨后每當(dāng)輸入引腳的電平變化為預(yù)設(shè)的電平變化時(shí),將觸發(fā)GPIO中斷??梢詫⑾鄳?yīng)的GPIO引腳接地,便可觸發(fā)一次中斷。在相應(yīng)的GPIO中斷服務(wù)程序中加入去除抖動(dòng)并統(tǒng)計(jì)GPIO中斷次數(shù)的功能,則觸發(fā)中斷時(shí)可累計(jì)GPIO中斷次數(shù)。具體實(shí)例可參考:“..\03-Software\CH05-Hard-component\GPIO-Input(Interrupt)”第21頁(yè)共38頁(yè)RTOS5.3.2UART構(gòu)件1.UART知識(shí)要素:串行通信接口(SerialCommunicationInterface,SCI)最常見(jiàn)的提法是通用異步收發(fā)器(UniversalAsynchronousReceiver-Transmitters,UART),簡(jiǎn)稱(chēng)“串口”。MCU中的串口在硬件上一般只需要三線,分別稱(chēng)為發(fā)送線(TxD)、接收線(RxD)和地線(GND)根。在通信方式上,屬于單字節(jié)通信,是嵌入式開(kāi)發(fā)中重要的打樁調(diào)試手段。UART的主要知識(shí)要素有:通信格式、波特率、硬件電平信號(hào)。第22頁(yè)共38頁(yè)RTOS5.3.2UART構(gòu)件(1)通信格式:(2)串行通信的波特率:每秒內(nèi)傳送的位數(shù)叫做波特率(BaudRate),單位是:位/秒,記為bps。bps是英文bitpersecond的縮寫(xiě),習(xí)慣上這個(gè)縮寫(xiě)不用大寫(xiě),而用小寫(xiě)。通常情況下,波特率的單位可以省略。第23頁(yè)共38頁(yè)RTOS5.3.2UART構(gòu)件(3)硬件電平信號(hào)UART通信在硬件上有TTL電平、RS232電平、RS485差分信號(hào)方式。TTL電平是最基本的,可使用專(zhuān)門(mén)芯片將TTL電平轉(zhuǎn)為RS232或RS485,RS232與RS485也可相互轉(zhuǎn)換。采用RS232與RS485硬件電路,只是電平信號(hào)之間的轉(zhuǎn)換,與MCU編程無(wú)關(guān)。第24頁(yè)共38頁(yè)RTOS5.3.2UART構(gòu)件2.UART構(gòu)件API,具體參數(shù)可見(jiàn)RT-Thread實(shí)例演示。注:RT-Thread實(shí)例演示(CH6.3.2-UART)第25頁(yè)共38頁(yè)RTOS5.3.2UART構(gòu)件3.UART構(gòu)件API的測(cè)試方法(1)重命名串口:將串口模塊用宏定義方式,起個(gè)標(biāo)識(shí)名供用戶(hù)使用(如UART_User),以辨別該串口模塊的用途,同時(shí),將串口中斷服務(wù)程序也通過(guò)宏定義進(jìn)行重命名,這些宏定義應(yīng)該寫(xiě)在工程的05_UserBoard\user.h文件中。//UART模塊定義#defineUART_UserUART_2//實(shí)際應(yīng)用要根據(jù)具體芯片所接引腳修改//重命名串口中斷服務(wù)程序#defineUART_User_HandlerUSART2_IRQHandler第26頁(yè)共38頁(yè)RTOS5.3.2UART構(gòu)件voidUART_User_Handler(void){

uint8_tch,flag; DISABLE_INTERRUPTS; //關(guān)總中斷

ch=uart_re1(UART_User,&flag); //接收一個(gè)字節(jié)的數(shù)據(jù) //調(diào)用接收一個(gè)字節(jié)的函數(shù),清接收中斷位

if(flag){//有數(shù)據(jù)

uart_send1(UART_User,ch); //回發(fā)接收到的字節(jié)

}ENABLE_INTERRUPTS; //開(kāi)總中斷}(2)UART模塊接收中斷處理程序:第27頁(yè)共38頁(yè)RTOS5.3.2UART構(gòu)件第一步,UART_User串口模塊初始化在07_AppPrg\main.c文件中,對(duì)UART_User串口模塊初始化,其中波特率設(shè)置為115200,在“用戶(hù)外設(shè)模塊初始化”處增加下列語(yǔ)句:uart_init(UART_User,115200);第二步,使能串口模塊中斷在“使能模塊中斷”處增加下列語(yǔ)句:uart_enable_re_int(UART_User);(3)main函數(shù)的線程第28頁(yè)共38頁(yè)RTOS5.3.2UART構(gòu)件在AHL-GEC-IDE的串口調(diào)試工具中選擇好串口,設(shè)置好波特率為115200,點(diǎn)擊“打開(kāi)串口”,選擇發(fā)送方式為“字符串方式(String)”,在文本框內(nèi)輸入字符串內(nèi)容“SumcuUartComponentTestCase.”,點(diǎn)擊“發(fā)送數(shù)據(jù)按鈕”。(4)下載機(jī)器碼并觀察運(yùn)行情況注:RT-Thread實(shí)例演示(CH6.3.2-UART)第29頁(yè)共38頁(yè)RTOS5.3.2UART構(gòu)件同時(shí),在接收數(shù)據(jù)窗口中會(huì)顯示該字符串,這是由于開(kāi)發(fā)套件的串口模塊接收到字符串的同時(shí)也回發(fā)給上位機(jī)該字符串,如圖所示。第30頁(yè)共38頁(yè)RTOS5.4.1printf構(gòu)件使用格式1.printf構(gòu)件使用格式:printf函數(shù)調(diào)用的一般形式為:printf(“格式控制字符串”,輸出表列)。其中格式控制字符串用于指定輸出格式。格式控制串可由格式字符串和非格式字符串兩種組成。格式字符串是以%開(kāi)頭的字符串,在%后面跟有各種格式字符,以說(shuō)明輸出數(shù)據(jù)的類(lèi)型、形式、長(zhǎng)度、小數(shù)位數(shù)等。如:”%d”表示按十進(jìn)制整型輸出。5.4應(yīng)用構(gòu)件設(shè)計(jì)實(shí)例第31頁(yè)共38頁(yè)RTOS5.4.2嵌入式printf構(gòu)件說(shuō)明2.printf構(gòu)件說(shuō)明在printf構(gòu)件頭文件printf.h中,給出了對(duì)外接口函數(shù)API的使用聲明。特別注意的是要根據(jù)實(shí)際使用的串口修改其中的宏定義(見(jiàn)下述代碼中的黑體字),僅更改該構(gòu)件頭文件這一處,其他不必更改。printf構(gòu)件的實(shí)現(xiàn)是一個(gè)比較復(fù)雜的過(guò)程,希望深入了解的讀者,可以閱讀分析源代碼,一般情況下,使用即可。注:RT-Thread實(shí)例演示(CH6.5.1-printf)第32頁(yè)共38頁(yè)RTOS5.4.3printf構(gòu)件編程實(shí)例

使用printf函數(shù),在串口工具中打印出測(cè)試函數(shù)所打印的字符串。具體實(shí)現(xiàn)過(guò)程如下:1.包含文件:在05_UserBoard\user.h文件中添加對(duì)printf.h的包含#include“printf.h”。2.在main.c文件中添加printf輸出,具體程序可見(jiàn)RT-Thread實(shí)例演示。注:RT-Thread實(shí)例演示(CH6.5.1-printf)第33頁(yè)共38頁(yè)RTOS5.5軟件構(gòu)件設(shè)計(jì)實(shí)例1.冒泡排序算法描述:冒泡排序(BubbleSort)是一種典型的交換排序算法,其基本思想是:每次通過(guò)比較相鄰兩元素大小進(jìn)行交換位置,選出剩余無(wú)序序列里最大(?。┑臄?shù)據(jù)元素放到隊(duì)尾。2.在冒泡排序算法構(gòu)件頭文件bubbleSort.h中,給出了對(duì)外接口函數(shù)(API)的使用聲明。3.在冒泡排序算法構(gòu)件源程序bubbleSort.c中,給出了各個(gè)對(duì)外接口函數(shù)(API)的具體實(shí)現(xiàn)代碼。注:RT-Thread實(shí)例演示(..\03-Software\CH05-Hard-component\BubbleSort)5.5.1冒泡排序算法構(gòu)件第34頁(yè)共38頁(yè)RTOS4.測(cè)試程序設(shè)計(jì)

下面將舉例說(shuō)明bubbleSort構(gòu)件的具體用法,實(shí)現(xiàn)的功能為:傳入一組數(shù)據(jù),通過(guò)冒泡升序、降序的方式實(shí)現(xiàn)對(duì)數(shù)組元素的全排列,具體例程可參考“CH6.5.1-User_bubbleSort”文件夾。具體實(shí)現(xiàn)過(guò)程參見(jiàn)源程序。運(yùn)行結(jié)果如下:第35頁(yè)共38頁(yè)RTOS

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論