uCOS-II程序設(shè)計(jì)示例_第1頁(yè)
uCOS-II程序設(shè)計(jì)示例_第2頁(yè)
uCOS-II程序設(shè)計(jì)示例_第3頁(yè)
uCOS-II程序設(shè)計(jì)示例_第4頁(yè)
uCOS-II程序設(shè)計(jì)示例_第5頁(yè)
已閱讀5頁(yè),還剩107頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

μC/OS-II程序設(shè)計(jì)實(shí)例——基于SmartARM2200平臺(tái)1.21工程模板介紹萬(wàn)年歷數(shù)據(jù)采集系統(tǒng)UART中間件I2C中間件345uC/OS-II目錄2.

工程模板簡(jiǎn)介1

2示例實(shí)現(xiàn)工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)目錄3.工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)摸板結(jié)構(gòu)頭文件組內(nèi)核文件組用戶文件組ARM文件組主函數(shù)模板結(jié)構(gòu)

頭文件組:主要是包含頭文件和配置信息1ARM文件組:主要是包含操作系統(tǒng)和開(kāi)發(fā)板硬件相關(guān)的配置信息23內(nèi)核文件組:主要是包含UC/OS操作系統(tǒng)源文件5用戶文件組:主要包含用戶需要配置的.H文件和除主函數(shù)外的.C文件4主函數(shù):即用戶編寫(xiě)的MAIN.C函數(shù)4.工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)頭文件組文件名功能Config.h總頭文件,摸板要求INCLUDES.H總頭文件,UC/OS要求os_cpu.h操作系統(tǒng)移植頭文件Target.h目標(biāo)頭文件LPC22XX.h定義處理器相關(guān)寄存器VIC_Control.h中斷向量控制機(jī)制頭文件

頭文件主要包含一些宏定義和文件包含操作.這些文件一般是為了提高摸板的通用性和方便系統(tǒng)移植而定義的.用戶在使用時(shí)可以根據(jù)自己的系統(tǒng)硬件配置和喜好進(jìn)行修改.在UC/OS工程摸板中主要包含六個(gè)頭文件,具體描述如下表所示:5.工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)ARM文件組

ARM文件組主要包含UC/OS配置文件和MiniARM2200加載和配置文件.主要包含六個(gè)文件,具體描述如下表所示:文件名功能Os_cpu_a.hUC/OS移植硬件配置文件Os_cpu_c.hUC/OS移植軟件配置文件Inchip.scf分散加載文件Startup.sLPC2200啟動(dòng)代碼VIC_Control.s中斷向量控制機(jī)制文件Target.cLPC2200目標(biāo)板的硬件配置文件6.工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)用戶文件組用戶文件組主要包含main.h,main.c和os_cfg.h三個(gè)文件.前兩個(gè)文件有用戶自己編寫(xiě).os_cfg.h文件主要是實(shí)現(xiàn)操作系統(tǒng)的配置,用戶可以根據(jù)實(shí)際需要進(jìn)行裁剪.具體描述如下表所示:參數(shù)名功能描述OS_MAX_EVENTS最大事件控制塊個(gè)數(shù)OS_MAX_MEM_PART系統(tǒng)中內(nèi)存塊最大數(shù)目OS_MAX_QS消息隊(duì)列中最大隊(duì)列塊的數(shù)目OS_MAX_TASKS用戶程序中可以使用的最多任務(wù)數(shù)目OS_LOWEST_PRIO系統(tǒng)中要使用的最低任務(wù)的優(yōu)先級(jí)OS_TICKS_PER_SEC調(diào)用時(shí)間延時(shí)函數(shù)的頻率7.工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)摸板使用步驟拷貝工程摸板使用摸板建立新工程分為四個(gè)步驟.主要操作如下:用戶將光盤(pán)中的“ARMEXECUTABLEIMAGEFORUCOSLPC2200“文件拷貝到〞..\ARM\ADSV1.2\STATIONERY8.工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)摸板使用步驟將光盤(pán)摸板文件放進(jìn)Stationary目錄:9.打開(kāi)ADS,選擇”新建”操作拷貝工程摸板

在ADS1.2的集成開(kāi)發(fā)環(huán)境中選擇〞新建〞操作用戶將光盤(pán)中的“ARMEXECUTABLEIMAGEFORUCOSLPC2200“文件拷貝到〞..\ARM\ADSV1.2\STATIONERY工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)摸板使用步驟使用摸板建立新工程分為四個(gè)步驟.主要操作如下:10.工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)摸板使用步驟在ADS集成環(huán)境中選擇〞新建〞操作:11.打開(kāi)ADS,選擇”新建”操作拷貝工程摸板選擇工程摸板建立新工程

在ADS1.2的集成開(kāi)發(fā)環(huán)境中選擇〞新建〞操作用戶將光盤(pán)中的“ARMEXECUTABLEIMAGEFORUCOSLPC2200“文件拷貝到〞..\ARM\ADSV1.2\STATIONERY選擇工程摸板建立新工程工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)摸板使用步驟使用摸板建立新工程分為四個(gè)步驟.主要操作如下:12.工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)摸板使用步驟選擇工程摸板建立新工程:13.按照摸板生成新工程打開(kāi)ADS,選擇”新建”操作拷貝工程摸板選擇工程摸板建立新工程

在ADS1.2的集成開(kāi)發(fā)環(huán)境中選擇〞新建〞操作用戶將光盤(pán)中的“ARMEXECUTABLEIMAGEFORUCOSLPC2200“文件拷貝到〞..\ARM\ADSV1.2\STATIONERY選擇工程摸板建立新工程按照摸板生成一個(gè)新工程工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)摸板使用步驟使用摸板建立新工程分為四個(gè)步驟.主要操作如下:14.工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)摸板使用步驟按照摸板生成新工程:15.

工程模板簡(jiǎn)介1

2示例實(shí)現(xiàn)工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)目錄16.工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)硬件連接摸板應(yīng)用例如是蜂鳴器控制,硬件連接如以下圖所示:蜂鳴器控制電路跳線連接17.工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)任務(wù)創(chuàng)立在應(yīng)用例如中,先按上面的流程建立工程TEST1.MCP.再在工程的主函數(shù)MAIN中建立任務(wù)TASK0,TASK0任務(wù)是初始化硬件.接著創(chuàng)立TASK1,TASK2,TASK3.TASK1,TASK2只是將任務(wù)掛起延時(shí).TASK3任務(wù)實(shí)現(xiàn)蜂鳴器控制.任務(wù)之間聯(lián)系如以下圖所示:18.工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)任務(wù)創(chuàng)立MAIN函數(shù)TASK0TASK3TASK1TASK219.工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)任務(wù)流程例如中主函數(shù)和個(gè)任務(wù)的控制流程如下:20.工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)ISR任務(wù)例如中斷例如中先按上面流程創(chuàng)立新工程Timer1_int.mcp,再在主函數(shù)中創(chuàng)立任務(wù)TASK0和TASKBEEP,TASK0完成硬件初始化.TASKBEEP完成蜂鳴器信號(hào)量等待和操作.程序流程如下:21.下面以例如來(lái)說(shuō)明如何現(xiàn)實(shí)ISR與任務(wù)間同步。假設(shè)定時(shí)器1中斷效勞程序發(fā)送信號(hào)量,任務(wù)完成了信號(hào)量的創(chuàng)立并在接收到信號(hào)量后讓蜂鳴器響一聲。處理流程如下。工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)ISR任務(wù)例如22.voidTimer1_Exception(void){T1IR=0x01;VICVectAddr=0;OSSemPost(sem);}更新中斷優(yōu)先級(jí)清除中斷標(biāo)志發(fā)送信號(hào)量中斷效勞程序ISR例如代碼如下。工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)ISR任務(wù)例如23.voidTaskBeep(void*pdata){……sem=OSSemCreate(0);OS_ENTER_CRITICAL(); /*初始化VIC(省略) *//*初始化定時(shí)器1(省略) *//*目標(biāo)板初始化TargeInit()(省略)*/OS_EXIT_CRITICAL();while(1){OSSemPend(sem,0,&err);IO0CLR=BEEP;OSTimeDly(60);IO0SET=BEEP;OSTimeDly(60); }}創(chuàng)建信號(hào)量初始化工作蜂鳴器響延時(shí)60個(gè)節(jié)拍蜂鳴器滅延時(shí)60個(gè)節(jié)拍進(jìn)入臨界段退出臨界段等待信號(hào)量讀者補(bǔ)出相應(yīng)的代碼蜂鳴器報(bào)警任務(wù)例如代碼如下。工程模板應(yīng)用|μC/OS-II程序設(shè)計(jì)ISR任務(wù)例如24.21工程模板介紹萬(wàn)年歷數(shù)據(jù)采集系統(tǒng)UART中間件I2C中間件345uC/OS-II目錄25.ISR和任務(wù)之間的同步和通信2

任務(wù)間的同步與通信1數(shù)據(jù)采集系統(tǒng)|μC/OS-II程序設(shè)計(jì)目錄26.一、任務(wù)的同步

在實(shí)時(shí)操作系統(tǒng)中,任務(wù)和任務(wù)之間往往需要協(xié)調(diào)運(yùn)行,這種協(xié)調(diào)關(guān)系,在日常生活里也是屢見(jiàn)不鮮的。為了說(shuō)明這種協(xié)調(diào)關(guān)系,請(qǐng)看下面的演示:司機(jī)售票員啟動(dòng)車輛關(guān)車門(mén)行駛售票1、什么是任務(wù)的同步?①

停車開(kāi)車門(mén)③②

①、啟動(dòng)車輛,踩油門(mén)就可以了;但實(shí)際上,你必須等車門(mén)關(guān)上了才可以啟動(dòng)車輛。②、行駛和售票的行動(dòng)互不干預(yù)、彼此獨(dú)立,此時(shí)不存在協(xié)調(diào)關(guān)系。③、開(kāi)車門(mén)只要按下開(kāi)關(guān)就可以了;但實(shí)際上,你得等司機(jī)停車才能開(kāi)車門(mén),否那么就出事故了。

由該演示可知,任務(wù)的同步,就是任務(wù)的協(xié)調(diào)運(yùn)行,你一步、我一步地緊密協(xié)作:任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)任務(wù)的同步27.一、任務(wù)的同步

在實(shí)時(shí)操作系統(tǒng)中,任務(wù)和任務(wù)之間往往需要協(xié)調(diào)運(yùn)行,這種協(xié)調(diào)關(guān)系,在日常生活里也是屢見(jiàn)不鮮的。為了說(shuō)明這種協(xié)調(diào)關(guān)系,請(qǐng)看下面的演示:任務(wù)A

任務(wù)B1、什么是任務(wù)的同步?①、任務(wù)B運(yùn)行一段時(shí)間后,發(fā)送信息讓任務(wù)A啟動(dòng),與此同時(shí),任務(wù)B掛起。②、任務(wù)A獲得允許運(yùn)行的信息后,立即啟動(dòng);完成操作后,發(fā)送信息告知任務(wù)B,任務(wù)B可以啟動(dòng)并執(zhí)行接下來(lái)的操作。

在理解了“任務(wù)同步”的概念后,再來(lái)看看μC/OS-II實(shí)時(shí)操作系統(tǒng)所提供的用于實(shí)現(xiàn)“任務(wù)同步”的通信手段。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)任務(wù)的同步28.

μC/OS-II實(shí)時(shí)操作系統(tǒng)提供了以下通信手段,使某一任務(wù)得以向另一任務(wù)發(fā)送同步信息,從而實(shí)現(xiàn)任務(wù)同步:2、任務(wù)同步的通信手段

計(jì)數(shù)信號(hào)量;事件標(biāo)志組;消息郵箱;消息隊(duì)列。

靈活運(yùn)用這些通信手段,可滿足不同的任務(wù)同步需求,請(qǐng)看表1:任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)任務(wù)的同步29.2、任務(wù)同步的通信手段任務(wù)同步的通信手段應(yīng)用場(chǎng)合計(jì)數(shù)信號(hào)量?jī)蓚€(gè)任務(wù)的同步事件標(biāo)志組多個(gè)任務(wù)和一個(gè)任務(wù)間的同步消息郵箱兩個(gè)任務(wù)不但要同步;彼此間還要傳輸一份數(shù)據(jù)消息隊(duì)列兩個(gè)任務(wù)間不但要同步;彼此間還要傳輸大量數(shù)據(jù)表1不同同步手段的應(yīng)用場(chǎng)合由上表可知,任務(wù)和任務(wù)之間不僅可以發(fā)送用于協(xié)調(diào)步伐的“同步〞信息,也可以發(fā)送有效的數(shù)據(jù),實(shí)現(xiàn)真正意義的通信。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)任務(wù)的同步30.

在嵌入式系統(tǒng)的運(yùn)行過(guò)程中,任務(wù)與任務(wù)之間必然伴隨著數(shù)據(jù)通信,這種通信可以采用多種方法來(lái)實(shí)現(xiàn):

二、任務(wù)的通信

全局變量;內(nèi)存數(shù)據(jù)塊;消息郵箱;消息隊(duì)列。

靈活運(yùn)用這些不同的方法,可滿足不同的數(shù)據(jù)通信要求,請(qǐng)看表2:任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)任務(wù)的通信31.任務(wù)同步的通信手段應(yīng)用場(chǎng)合全局變量無(wú)行為同步要求時(shí)的少量數(shù)據(jù)通信。但需注意資源同步內(nèi)存數(shù)據(jù)塊無(wú)行為同步要求時(shí)的大量數(shù)據(jù)通信。但需注意資源同步消息郵箱有行為同步要求時(shí)的少量數(shù)據(jù)通信消息隊(duì)列有行為同步要求時(shí)的大量數(shù)據(jù)通信表2不同通信手段的應(yīng)用場(chǎng)合

二、任務(wù)的通信介紹完行為同步和通信的根本知識(shí)后,接下來(lái)再給出實(shí)例,以加深理解。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)任務(wù)的通信32.三、操作例如1、例如簡(jiǎn)介

利用LPC2000系列ARM相關(guān)開(kāi)發(fā)板上已有的資源,可以構(gòu)筑一個(gè)小型的數(shù)據(jù)采集系統(tǒng),如下所示:LPC2000系列ARM相關(guān)開(kāi)發(fā)板串口線上位機(jī)例如的內(nèi)容是:按下開(kāi)發(fā)板上的按鍵、令A(yù)RM芯片啟動(dòng)A/D采樣;采樣結(jié)束后,再將采樣結(jié)果通過(guò)串口線發(fā)送到上位機(jī)顯示。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如33.2、例如里的任務(wù)在本例如內(nèi),劃分出了3個(gè)用戶任務(wù),相關(guān)信息如表3所示。任務(wù)的名稱任務(wù)的優(yōu)先級(jí)按鍵任務(wù)高采樣任務(wù)中顯示任務(wù)低表3任務(wù)信息

接下來(lái),將以動(dòng)畫(huà)的形式演示該數(shù)據(jù)采集系統(tǒng)的運(yùn)轉(zhuǎn)流程,并在每一個(gè)運(yùn)行階段加以講解。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如34.2、例如演示(1)初始階段三個(gè)任務(wù)的狀態(tài):按鍵任務(wù)在不停掃描按鍵,查詢是否有鍵按下;采樣任務(wù)完成一局部工作后掛起,等待按鍵任務(wù)發(fā)出啟動(dòng)信號(hào);顯示任務(wù)掛起,等待采樣任務(wù)發(fā)出啟動(dòng)信號(hào)和顯示數(shù)據(jù)。按鍵任務(wù)采樣任務(wù)顯示任務(wù)掛起掛起不斷掃描任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如35.2、例如演示(2)啟動(dòng)采樣

按鍵任務(wù)掃描到有按鍵按下,發(fā)出信號(hào)量。按鍵任務(wù)采樣任務(wù)顯示任務(wù)掛起掛起掃描到按鍵

采樣任務(wù)得到了信號(hào)量從而就緒,然后在接下來(lái)的任務(wù)調(diào)度中進(jìn)入運(yùn)行狀態(tài),開(kāi)始采樣。開(kāi)始采樣

顯示任務(wù)仍在等待采樣任務(wù)發(fā)送啟動(dòng)信號(hào)和采樣結(jié)果。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如36.2、例如演示(3)發(fā)送采樣結(jié)果按鍵任務(wù)繼續(xù)掃描按鍵。(此時(shí)假設(shè)掃描到按鍵,將在下一輪處理)。采樣任務(wù)顯示任務(wù)

采樣完畢,可以發(fā)送采樣結(jié)果了,于是發(fā)送消息到消息郵箱。顯示任務(wù)獲得了消息進(jìn)入就緒狀態(tài),然后在任務(wù)調(diào)度下獲得運(yùn)行時(shí)機(jī),將收到的采樣結(jié)果發(fā)送到上位機(jī)。按鍵任務(wù)不斷掃描采樣結(jié)束啟動(dòng)顯示開(kāi)始采樣將采樣結(jié)果發(fā)送至上位機(jī)任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如37.2、例如演示(1)初始階段

回到了初始階段。進(jìn)行下一輪的數(shù)據(jù)采集、發(fā)送工作。按鍵任務(wù)采樣任務(wù)顯示任務(wù)掛起掛起不斷掃描任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如38.ISR和任務(wù)之間的同步和通信2

任務(wù)間的同步與通信1任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)目錄39.ISR主要被用于響應(yīng)異步事件,在ISR里可觸發(fā)其它任務(wù)的運(yùn)行,實(shí)現(xiàn)ISR和任務(wù)的同步。ISR和任務(wù)間的同步關(guān)系比較簡(jiǎn)單,它們之間的關(guān)系是單向的。任務(wù)間的同步就不同了,可是單向亦可是雙向的。一、ISR和任務(wù)的同步ISR關(guān)聯(lián)任務(wù)同步信號(hào)發(fā)送任務(wù)同步信號(hào)發(fā)送任務(wù)同步信號(hào)發(fā)送、可以看出,ISR始終是控制者,關(guān)聯(lián)任務(wù)只能被控制;、可以看出,任務(wù)之間的同步里,某一任務(wù)可以是被控制者也可以是控制者。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)ISR和任務(wù)的同步40.ISR和任務(wù)間的通信手段包括信號(hào)型和數(shù)據(jù)型,兩種手段的應(yīng)用場(chǎng)合是不同的,請(qǐng)看表4。二、ISR和任務(wù)的通信通信方式特點(diǎn)信號(hào)型ISR發(fā)送信號(hào)量,指示事件已發(fā)生,觸發(fā)關(guān)聯(lián)任務(wù)的啟動(dòng),具體工作由關(guān)聯(lián)任務(wù)完成數(shù)據(jù)型ISR內(nèi)部還要進(jìn)行信息采集,然后通過(guò)消息郵箱或消息隊(duì)列,將數(shù)據(jù)信息發(fā)送給關(guān)聯(lián)任務(wù),并啟動(dòng)關(guān)聯(lián)任務(wù)來(lái)處理后續(xù)數(shù)據(jù)表4信號(hào)型通信和數(shù)據(jù)型通信的比照

為了進(jìn)一步說(shuō)明,接下來(lái)請(qǐng)看下面的實(shí)例演示。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)ISR和任務(wù)的通信41.三、實(shí)例演示1、例如簡(jiǎn)介例如的內(nèi)容是:例如進(jìn)行時(shí),蜂鳴器一直在間歇鳴叫;用戶按下板上的按鍵、觸發(fā)外部中斷;外部中斷再觸發(fā)“讀取ADC然后將采樣結(jié)果發(fā)送至上位機(jī)〞的操作。串口線上位機(jī)

利用LPC2000系列ARM相關(guān)開(kāi)發(fā)板上已有的資源,可以構(gòu)筑一個(gè)小型的數(shù)據(jù)采集系統(tǒng),如下所示:LPC2000系列ARM相關(guān)開(kāi)發(fā)板任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)ISR和任務(wù)的通信42.2、例如里的任務(wù)在本例如內(nèi),劃分出了2個(gè)用戶任務(wù),相關(guān)信息如表5所示。任務(wù)的名稱任務(wù)的優(yōu)先級(jí)蜂鳴任務(wù)中采樣和顯示任務(wù)高表5任務(wù)信息

接下來(lái),將以動(dòng)畫(huà)的形式演示該實(shí)例的運(yùn)轉(zhuǎn)流程,并在每一個(gè)運(yùn)行階段加以講解。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如43.3、例如演示

這是外部中斷未發(fā)生時(shí),用戶任務(wù)執(zhí)行的情況:采樣和顯示任務(wù)

初始化硬件

等待信號(hào)量蜂鳴器任務(wù)①、系統(tǒng)初始化

系統(tǒng)初始化時(shí),先運(yùn)行“采樣和顯示”任務(wù)。、等待信號(hào)量有效

由于此時(shí)信號(hào)量無(wú)效,采樣和發(fā)送任務(wù)掛起,CPU控制權(quán)交給其它就緒任務(wù)。、蜂鳴器任務(wù)啟動(dòng)

此時(shí)優(yōu)先級(jí)最高的就緒任務(wù)是蜂鳴器任務(wù),于是蜂鳴器任務(wù)啟動(dòng)。③蜂鳴器間歇鳴叫任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如44.3、例如演示

這是外部中斷發(fā)生時(shí),用戶任務(wù)執(zhí)行的情況:采樣和顯示任務(wù)

初始化硬件

等待信號(hào)量蜂鳴器任務(wù)、發(fā)生外部中斷

外部中斷發(fā)生。蜂鳴器任務(wù)被中斷。、ISR發(fā)送信號(hào)量“采樣和顯示任務(wù)”獲得了信號(hào)量,立即進(jìn)入就緒狀態(tài),由于該任務(wù)優(yōu)先級(jí)最高,于是立即運(yùn)行。、回復(fù)到初始狀態(tài)

發(fā)送完采樣結(jié)果后,繼續(xù)等待下一個(gè)外部中斷,蜂鳴器任務(wù)又開(kāi)始運(yùn)行。蜂鳴器間歇鳴叫③發(fā)生外部中斷

發(fā)送采樣結(jié)果任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如45.3、例如演示

這是外部中斷發(fā)生時(shí),用戶任務(wù)執(zhí)行的情況:采樣和顯示任務(wù)

初始化硬件

等待信號(hào)量蜂鳴器任務(wù)、發(fā)生外部中斷

外部中斷發(fā)生。蜂鳴器任務(wù)被中斷。、ISR發(fā)送信號(hào)量“采樣和顯示任務(wù)”獲得了信號(hào)量,立即進(jìn)入就緒狀態(tài),由于該任務(wù)優(yōu)先級(jí)最高,于是立即運(yùn)行。、回復(fù)到初始狀態(tài)

發(fā)送完采樣結(jié)果后,繼續(xù)等待下一個(gè)外部中斷,蜂鳴器任務(wù)又開(kāi)始運(yùn)行。蜂鳴器間歇鳴叫③發(fā)生外部中斷

發(fā)送采樣結(jié)果任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如46.21工程模板介紹萬(wàn)年歷數(shù)據(jù)采集系統(tǒng)UART中間件I2C中間件345uC/OS-II目錄47.例如簡(jiǎn)介1

2示例的實(shí)現(xiàn)萬(wàn)年歷|μC/OS-II程序設(shè)計(jì)目錄48.一、例如簡(jiǎn)介

在這里,通過(guò)一個(gè)萬(wàn)年歷的設(shè)計(jì),來(lái)說(shuō)明μC/OS-II下程序設(shè)計(jì)的方法:

利用LPC2000系列ARM相關(guān)的開(kāi)發(fā)板和EasyARM串口調(diào)試軟件(自帶一個(gè)萬(wàn)年歷界面)來(lái)實(shí)現(xiàn)一個(gè)具有以下功能的萬(wàn)年歷:

實(shí)時(shí)顯示:不斷顯示當(dāng)前的年月日星期、時(shí)間信息;時(shí)間設(shè)置:可設(shè)置萬(wàn)年歷的時(shí)鐘和年月日信息(星期信息自動(dòng)調(diào)整),完成設(shè)置后,可更新顯示。、開(kāi)始重設(shè)年份;、設(shè)置完后,恢復(fù)顯示。、2007年被重設(shè)為3007年,此時(shí)星期自動(dòng)完成了調(diào)整;EasyARM串口調(diào)試軟件自帶的萬(wàn)年歷界面接下來(lái),是一個(gè)動(dòng)畫(huà)演示。它直接表現(xiàn)了最終的萬(wàn)年歷效果,這有助于讓讀者迅速理解例如須達(dá)成的任務(wù)。萬(wàn)年歷|μC/OS-II程序設(shè)計(jì)例如簡(jiǎn)介49.

示例簡(jiǎn)介1

2示例的實(shí)現(xiàn)萬(wàn)年歷|μC/OS-II程序設(shè)計(jì)目錄50.二、例如的實(shí)現(xiàn)1、功能劃分控制顯示時(shí)間信息產(chǎn)生時(shí)間信息從功能來(lái)劃分,可把例如分成3個(gè)模塊,請(qǐng)看以下圖:“控制〞通過(guò)操作開(kāi)發(fā)板上的按鍵,實(shí)現(xiàn):“實(shí)時(shí)顯示〞和“時(shí)間設(shè)置〞功能的切換;“時(shí)間設(shè)置〞。萬(wàn)年歷|μC/OS-II程序設(shè)計(jì)例如的實(shí)現(xiàn)51.二、例如的實(shí)現(xiàn)1、功能劃分控制顯示時(shí)間信息產(chǎn)生時(shí)間信息從功能來(lái)劃分,可把例如分成3個(gè)模塊,請(qǐng)看以下圖:“產(chǎn)生時(shí)間信息〞操作開(kāi)發(fā)板上LPC2000系列ARM芯片自帶的RTC,即可產(chǎn)生時(shí)間信息,用于填充萬(wàn)年歷。萬(wàn)年歷|μC/OS-II程序設(shè)計(jì)例如的實(shí)現(xiàn)52.二、例如的實(shí)現(xiàn)1、功能劃分控制顯示時(shí)間信息產(chǎn)生時(shí)間信息從功能來(lái)劃分,可把例如分成3個(gè)模塊,請(qǐng)看以下圖:“顯示時(shí)間〞通過(guò)板上的UART,按照協(xié)議將信息發(fā)送至EasyARM串口調(diào)試軟件,軟件上的萬(wàn)年歷即可顯示出此時(shí)的時(shí)間信息。不斷發(fā)送實(shí)時(shí)時(shí)間信息,那么萬(wàn)年歷會(huì)不斷顯示。萬(wàn)年歷|μC/OS-II程序設(shè)計(jì)例如的實(shí)現(xiàn)53.二、例如的實(shí)現(xiàn)2、任務(wù)設(shè)計(jì)

根據(jù)上面劃分出的功能模塊實(shí)現(xiàn)需求,任務(wù)可以劃分為:

設(shè)置任務(wù);

鍵盤(pán)任務(wù);

顯示任務(wù)。周期性地執(zhí)行。完成目標(biāo)板和RTC的初始化操作,之后創(chuàng)立“設(shè)置任務(wù)〞和“顯示任務(wù)〞,隨后周期性地查詢鍵盤(pán)輸入,當(dāng)有鍵按下,那么進(jìn)行按鍵處理。萬(wàn)年歷|μC/OS-II程序設(shè)計(jì)例如的實(shí)現(xiàn)54.二、例如的實(shí)現(xiàn)2、任務(wù)設(shè)計(jì)

根據(jù)上面劃分出的功能模塊實(shí)現(xiàn)需求,任務(wù)可以劃分為:

設(shè)置任務(wù);

鍵盤(pán)任務(wù);

顯示任務(wù)。周期性地執(zhí)行。完成目標(biāo)板和RTC的初始化操作,之后創(chuàng)立“設(shè)置任務(wù)〞和“顯示任務(wù)〞,隨后周期性地查詢鍵盤(pán)輸入,當(dāng)有鍵按下,那么進(jìn)行按鍵處理。接收到按鍵消息后才運(yùn)行。啟動(dòng)后,根據(jù)收到的按鍵信息設(shè)置時(shí)間,并閃爍顯示待設(shè)置位,未收到消息那么掛起。萬(wàn)年歷|μC/OS-II程序設(shè)計(jì)例如的實(shí)現(xiàn)55.二、例如的實(shí)現(xiàn)2、任務(wù)設(shè)計(jì)

根據(jù)上面劃分出的功能模塊實(shí)現(xiàn)需求,任務(wù)可以劃分為:

設(shè)置任務(wù);

鍵盤(pán)任務(wù);

顯示任務(wù)。周期性地執(zhí)行。完成目標(biāo)板和RTC的初始化操作,之后創(chuàng)立“設(shè)置任務(wù)〞和“顯示任務(wù)〞,隨后周期性地查詢鍵盤(pán)輸入,當(dāng)有鍵按下,那么進(jìn)行按鍵處理。接收到按鍵消息后才運(yùn)行。啟動(dòng)后,根據(jù)收到的按鍵信息設(shè)置時(shí)間,并閃爍顯示待設(shè)置位,未收到消息那么掛起。

每過(guò)1秒,由RTC秒中斷觸發(fā)該任務(wù)的運(yùn)行。該任務(wù)啟動(dòng)后便將當(dāng)前的RTC數(shù)據(jù)通過(guò)UART發(fā)送至上位機(jī)的萬(wàn)年歷界面進(jìn)行實(shí)時(shí)顯示。萬(wàn)年歷|μC/OS-II程序設(shè)計(jì)例如的實(shí)現(xiàn)56.鍵盤(pán)任務(wù)3、任務(wù)運(yùn)行演示為了說(shuō)明三個(gè)任務(wù)的狀態(tài)轉(zhuǎn)換過(guò)程,設(shè)計(jì)了兩個(gè)動(dòng)畫(huà)演示。演示分為兩局部。第一局部,是按鍵未按下時(shí),三大任務(wù)的狀態(tài)轉(zhuǎn)換過(guò)程:初始化目標(biāo)板和RTC;

0%100%萬(wàn)年歷|μC/OS-II程序設(shè)計(jì)例如的實(shí)現(xiàn)57.3、任務(wù)運(yùn)行演示為了說(shuō)明三個(gè)任務(wù)的狀態(tài)轉(zhuǎn)換過(guò)程,設(shè)計(jì)了兩個(gè)動(dòng)畫(huà)演示。演示分為兩局部。第一局部,是按鍵未按下時(shí),三大任務(wù)的狀態(tài)轉(zhuǎn)換過(guò)程:鍵盤(pán)任務(wù)初始化目標(biāo)板和RTC;創(chuàng)立設(shè)置任務(wù)和顯示任務(wù);鍵盤(pán)任務(wù)設(shè)置任務(wù)顯示任務(wù)萬(wàn)年歷|μC/OS-II程序設(shè)計(jì)例如的實(shí)現(xiàn)58.3、任務(wù)運(yùn)行演示為了說(shuō)明三個(gè)任務(wù)的狀態(tài)轉(zhuǎn)換過(guò)程,設(shè)計(jì)了兩個(gè)動(dòng)畫(huà)演示。演示分為兩局部。第一局部,是按鍵未按下時(shí),三大任務(wù)的狀態(tài)轉(zhuǎn)換過(guò)程:鍵盤(pán)任務(wù)初始化目標(biāo)板和RTC;創(chuàng)立設(shè)置任務(wù)和顯示任務(wù);鍵盤(pán)任務(wù)設(shè)置任務(wù)顯示任務(wù)查詢是否有按鍵輸入;在查詢按鍵輸入期間,設(shè)置任務(wù)和顯示任務(wù)都可以得到運(yùn)行時(shí)機(jī),完成局部工作。、初始化局部變量后,檢查是否收到鍵盤(pán)消息。、等待信號(hào)量,掛起。萬(wàn)年歷|μC/OS-II程序設(shè)計(jì)例如的實(shí)現(xiàn)59.3、任務(wù)運(yùn)行演示為了說(shuō)明三個(gè)任務(wù)的狀態(tài)轉(zhuǎn)換過(guò)程,設(shè)計(jì)了兩個(gè)動(dòng)畫(huà)演示。演示分為兩局部。第一局部,是按鍵未按下時(shí),三大任務(wù)的狀態(tài)轉(zhuǎn)換過(guò)程:鍵盤(pán)任務(wù)初始化目標(biāo)板和RTC;創(chuàng)立設(shè)置任務(wù)和顯示任務(wù);鍵盤(pán)任務(wù)設(shè)置任務(wù)顯示任務(wù)查詢是否有按鍵輸入;、初始化局部變量后,檢查是否收到鍵盤(pán)消息。、等待信號(hào)量,掛起。發(fā)生秒中斷在中斷里發(fā)送信號(hào)量給顯示任務(wù),顯示任務(wù)就緒,開(kāi)始發(fā)送時(shí)間信息到上位機(jī),更新萬(wàn)年歷的顯示。、發(fā)送時(shí)間信息。萬(wàn)年歷|μC/OS-II程序設(shè)計(jì)例如的實(shí)現(xiàn)60.3、任務(wù)運(yùn)行演示

按鍵按下時(shí),任務(wù)的轉(zhuǎn)換過(guò)程如下所示:鍵盤(pán)任務(wù)初始化目標(biāo)板和RTC;創(chuàng)立設(shè)置任務(wù)和顯示任務(wù);鍵盤(pán)任務(wù)設(shè)置任務(wù)顯示任務(wù)查詢是否有按鍵輸入;、初始化局部變量后,檢查是否收到鍵盤(pán)消息。、等待信號(hào)量,掛起。查到有按鍵輸入,發(fā)送按鍵消息。萬(wàn)年歷|μC/OS-II程序設(shè)計(jì)例如的實(shí)現(xiàn)61.3、任務(wù)運(yùn)行演示

按鍵按下時(shí),任務(wù)的轉(zhuǎn)換過(guò)程如下所示:鍵盤(pán)任務(wù)初始化目標(biāo)板和RTC;創(chuàng)立設(shè)置任務(wù)和顯示任務(wù);鍵盤(pán)任務(wù)設(shè)置任務(wù)顯示任務(wù)查詢是否有按鍵輸入;、初始化局部變量后,檢查是否收到鍵盤(pán)消息。、等待信號(hào)量,掛起。查到有按鍵輸入,發(fā)送按鍵消息。、根據(jù)鍵盤(pán)消息進(jìn)行處理。

令被設(shè)置位閃爍顯示;同時(shí),根據(jù)消息內(nèi)的設(shè)置信息設(shè)定新的時(shí)間。之后,在秒中斷發(fā)生時(shí),更新的時(shí)間信息被發(fā)送到上位機(jī)。發(fā)生秒中斷、發(fā)送時(shí)間信息。萬(wàn)年歷|μC/OS-II程序設(shè)計(jì)例如的實(shí)現(xiàn)62.21工程模板介紹萬(wàn)年歷數(shù)據(jù)采集系統(tǒng)UART中間件I2C中間件345uC/OS-II目錄63.2

簡(jiǎn)介1

3中間件機(jī)理

使用導(dǎo)論UART中間件|μC/OS-II程序設(shè)計(jì)目錄64.

一、UART中間件簡(jiǎn)介嵌入式應(yīng)用中,UART十分常見(jiàn),大多數(shù)CPU都集成了UART。LPC2000系列ARMUART中間件是UART驅(qū)動(dòng)軟件包,用戶可用它在μC/OS-II下輕松、便利地完成LPC2000系列ARM上的UART操作而無(wú)須了解UART存放器的細(xì)節(jié)。關(guān)于UART中間件帶來(lái)的操作便利性,請(qǐng)看下面的一個(gè)演示,該演示展示了在“使用UART中間件〞和“不使用UART中間件〞這兩種情況下,用戶的開(kāi)發(fā)流程,借此展示使用UART中間件編程帶來(lái)的好處。開(kāi)始播放請(qǐng)點(diǎn)擊UART中間件|μC/OS-II程序設(shè)計(jì)UART中間件簡(jiǎn)介65.開(kāi)始開(kāi)始翻閱用戶手冊(cè),閱讀UART的存放器結(jié)構(gòu)確定本次操作所需涉及的存放器閱讀涉及存放器的位功能說(shuō)明寫(xiě)程序,試探程序思路是否可靠、正確反復(fù)調(diào)試、摸索獲得初始版本,完成操作(以后可能還會(huì)出問(wèn)題)結(jié)束瀏覽PPT,迅速理解概況和根本知識(shí)閱讀中間件的API說(shuō)明,了解API的用法用中間件API編程直接調(diào)試程序,無(wú)須考慮底層細(xì)節(jié)結(jié)束自己編寫(xiě)UART驅(qū)動(dòng)直接用中間件編程UART中間件|μC/OS-II程序設(shè)計(jì)UART中間件簡(jiǎn)介66.小結(jié):

由上面的演示可以看出,使用UART中間件,有助于大大加快開(kāi)發(fā)速度,提高編程效率,同時(shí)令用戶程序更穩(wěn)定可靠、更容易調(diào)試。UART中間件|μC/OS-II程序設(shè)計(jì)UART中間件簡(jiǎn)介67.UART中間件結(jié)構(gòu):

按照API功能的不同,UART中間件的結(jié)構(gòu)可顯示如下:隊(duì)列操作UART讀寫(xiě)UART配置UART中斷入口UART中間件功能類型函數(shù)名稱函數(shù)功能UART配置相關(guān)uartInitUART初始化uartSetMode/uartGetState配置UART的參數(shù)/讀取UART當(dāng)前的配置信息UART中間件|μC/OS-II程序設(shè)計(jì)UART中間件簡(jiǎn)介68.隊(duì)列操作UART讀寫(xiě)UART中斷入口UART中間件結(jié)構(gòu):

按照API功能的不同,UART中間件的結(jié)構(gòu)可顯示如下:UART配置UART中間件功能類型函數(shù)名稱函數(shù)功能

UART

隊(duì)列操作相關(guān)uartFifoStatus獲取UART的隊(duì)列狀態(tài)uartFifoFlush清空UART的發(fā)送或接收隊(duì)列UART中間件|μC/OS-II程序設(shè)計(jì)UART中間件簡(jiǎn)介69.隊(duì)列操作UART讀寫(xiě)UART中斷入口UART中間件結(jié)構(gòu):

按照API功能的不同,UART中間件的結(jié)構(gòu)可顯示如下:UART配置UART中間件功能類型函數(shù)名稱函數(shù)功能

UART

讀寫(xiě)操作相關(guān)uartRead從串口設(shè)備讀數(shù)據(jù)uartWrite/uartDirectWrite向串口設(shè)備寫(xiě)數(shù)據(jù)/不經(jīng)軟件緩沖區(qū)而直接向串口設(shè)備寫(xiě)數(shù)據(jù)UART中間件|μC/OS-II程序設(shè)計(jì)UART中間件簡(jiǎn)介70.隊(duì)列操作UART讀寫(xiě)UART中斷入口UART中間件結(jié)構(gòu):

按照API功能的不同,UART中間件的結(jié)構(gòu)可顯示如下:UART設(shè)置UART中間件功能類型函數(shù)名稱函數(shù)功能UART

中斷入口函數(shù)uart0Isr/uart1Isr/uart2Isr/uart3Isr各個(gè)UART的中斷入口UART中間件|μC/OS-II程序設(shè)計(jì)UART中間件簡(jiǎn)介71.小結(jié):

UART中間件有四大功能模塊,由一共12個(gè)API組成。詳細(xì)的API信息,請(qǐng)用戶閱讀隨機(jī)贈(zèng)送的參考書(shū)及光盤(pán)。UART中間件|μC/OS-II程序設(shè)計(jì)UART中間件簡(jiǎn)介72.2

簡(jiǎn)介1

3中間件機(jī)理

使用導(dǎo)論UART中間件|μC/OS-II程序設(shè)計(jì)目錄73.二、使用導(dǎo)論

在使用UART中間件進(jìn)行編程前,有必要知道一些預(yù)備知識(shí)。本小節(jié)即對(duì)這些預(yù)備知識(shí)進(jìn)行介紹:

裝載UART中間件須知UART中間件的重要使用細(xì)節(jié)幾那么UART中間件的一般應(yīng)用流程UART中間件的文件組成;UART中間件所需的其它軟件包;

隊(duì)列在UART中間件里的應(yīng)用;UART中間件API的參數(shù)輸入;

使用UART中間件配置UART中斷;UART中間件的應(yīng)用流程。UART中間件|μC/OS-II程序設(shè)計(jì)使用導(dǎo)論74.UART中間件的文件組成UART中間件是由2個(gè)文件組成,請(qǐng)看下表:驅(qū)動(dòng)文件說(shuō)明uart.c該文件包含所有的UARTAPI源碼,用戶請(qǐng)不要修改此文件uart.hUART驅(qū)動(dòng)頭文件,用戶在此文件里完成對(duì)軟件/硬件緩沖區(qū)的配置和中斷服務(wù)程序的撰寫(xiě)

在使用UART中間件時(shí),須將這兩個(gè)文件加入工程,請(qǐng)看下圖:UART中間件|μC/OS-II程序設(shè)計(jì)使用導(dǎo)論75.UART中間件所需的其它軟件包UART中間件要發(fā)揮作用,還需要其它軟件包的支持,即隊(duì)列和字符串處理軟件包QueueString,請(qǐng)看左下的圖示:

為什么需要這個(gè)軟件包呢?UART中間件用到了隊(duì)列來(lái)收發(fā)數(shù)據(jù),所以需要隊(duì)列軟件來(lái)支持;

UART中間件的API參數(shù)設(shè)置是通過(guò)分析用戶輸入的字符串來(lái)實(shí)現(xiàn)的,所以需要字符串處理軟件。UART中間件|μC/OS-II程序設(shè)計(jì)使用導(dǎo)論76.UART中間件API的參數(shù)輸入在使用UART中間件所包含的局部API時(shí),用戶需以字符串形式輸入函數(shù)的入口參數(shù),參數(shù)都包含在字符串里。請(qǐng)看下面的例如:UART0初始化(波特率9600bps、8位數(shù)據(jù)位、1位停止位、無(wú)校驗(yàn),無(wú)硬件流)charcUartArg[]=“BaudRate=9600DataBits=8StopBits=1Parity=0RtsControl=0〞;/*定義參數(shù)字符串*//*將參數(shù)字符串填入API*/uartInit(UART0,cUartArg,NULL);、用戶根據(jù)“=〞號(hào)前的關(guān)鍵字,在“=〞號(hào)后填寫(xiě)對(duì)應(yīng)的數(shù)值;charcUartArg[]=“BaudRate=9600DataBits=8StopBits=1Parity=0RtsControl=0〞;charcUartArg[]=“BaudRate=9600DataBits=8StopBits=1Parity=0RtsControl=0〞;UART中間件|μC/OS-II程序設(shè)計(jì)使用導(dǎo)論77.UART中間件API的參數(shù)輸入在使用UART中間件所包含的局部API時(shí),用戶需以字符串形式輸入函數(shù)的入口參數(shù),參數(shù)都包含在字符串里。請(qǐng)看下面的例如:UART0初始化(波特率9600bps、8位數(shù)據(jù)位、1位停止位、無(wú)校驗(yàn),無(wú)硬件流)charcUartArg[]=“BaudRate=9600DataBits=8StopBits=1Parity=0RtsControl=0〞;/*定義參數(shù)字符串*//*將參數(shù)字符串填入API*/uartInit(UART0,cUartArg,NULL);、用戶根據(jù)“=〞號(hào)前的關(guān)鍵字,在“=〞號(hào)后填寫(xiě)對(duì)應(yīng)的數(shù)值;charcUartArg[]=“BaudRate=9600DataBits=8StopBits=1Parity=0RtsControl=0〞;、每一個(gè)API的對(duì)應(yīng)關(guān)鍵字都不同,用戶需要參考該函數(shù)的說(shuō)明;此外,關(guān)鍵字是大小寫(xiě)敏感的。、所以,小結(jié)一下。用戶根據(jù)函數(shù)說(shuō)明,將填好參數(shù)的對(duì)應(yīng)參數(shù)字符串送入函數(shù)即可完成函數(shù)的參數(shù)配置了。這種配置方法大大提高了函數(shù)的兼容性和易用性。uartInit(UART0,cUartArg,NULL);UART中間件|μC/OS-II程序設(shè)計(jì)使用導(dǎo)論78.

隊(duì)列在UART中間件里的應(yīng)用UART中間件可對(duì)硬件緩沖區(qū)和軟件緩沖區(qū)進(jìn)行操作。其中,軟件緩沖區(qū)是通過(guò)中間件里的隊(duì)列軟件包,抽取處理器自身的局部RAM資源進(jìn)行管理而實(shí)現(xiàn)的。通過(guò)隊(duì)列軟件包管理的軟件緩沖區(qū),可以大大提高UART通訊的可靠性。當(dāng)OS有更重要的任務(wù)要處理,那么UART須收發(fā)的數(shù)據(jù)可暫時(shí)保存在軟件緩沖區(qū)里,這樣就不會(huì)造成數(shù)據(jù)喪失。請(qǐng)看演示:其它事務(wù)軟件緩沖區(qū)_接收緩存開(kāi)始處理數(shù)據(jù)在處理其它事務(wù)時(shí),UART仍通過(guò)中斷將接收的數(shù)據(jù)轉(zhuǎn)移至緩沖區(qū)等待處理UART中間件|μC/OS-II程序設(shè)計(jì)使用導(dǎo)論79.

使用UART中間件配置UART中斷用戶可能會(huì)需要利用UART中斷來(lái)完成自己的事務(wù)處理。為了滿足該需求,UART中間件提供了讓用戶自行添加中斷處理代碼的機(jī)制。用戶只要在uart.h里找到相應(yīng)的uart中斷效勞函數(shù),在函數(shù)里添加自己的代碼即可。以設(shè)置uart0的中斷效勞函數(shù)為例,請(qǐng)看以下圖:

由于接收中斷和發(fā)送中斷都是使用同一個(gè)中斷入口,所以用戶添加自定義中斷處理代碼時(shí)要注意添加的位置。UART中間件|μC/OS-II程序設(shè)計(jì)使用導(dǎo)論80.UART中間件的應(yīng)用流程

現(xiàn)在已將應(yīng)用UART中間件前的預(yù)備知識(shí)介紹完畢,這里再給出UART中間件的應(yīng)用流程,給用戶一個(gè)該軟件包應(yīng)用的整體印象。開(kāi)始設(shè)置UART管腳配置中斷用中間件API編程用戶程序結(jié)束使用UART前,須對(duì)管腳作設(shè)置,這局部的工作并沒(méi)有包括到中間件里;由于UART中間件是使用中斷來(lái)進(jìn)行收發(fā),所以用戶需要初始化UART中斷,這局部的工作并沒(méi)有包括到中間件里;在作好相關(guān)的初始化工作后,用戶即可直接使用中間件里的API“組裝〞應(yīng)用程序了。UART中間件|μC/OS-II程序設(shè)計(jì)使用導(dǎo)論81.2

簡(jiǎn)介1

3中間件機(jī)理

使用導(dǎo)論UART中間件|μC/OS-II程序設(shè)計(jì)目錄82.三、使用機(jī)理

為令用戶深入理解UART中間件的機(jī)制,此處對(duì)該中間件的幾個(gè)重要機(jī)制作一闡述:

數(shù)據(jù)緩沖機(jī)制;

數(shù)據(jù)收發(fā)機(jī)制;UART中斷和UART任務(wù)的通訊。三個(gè)機(jī)制間的關(guān)系,可用以下圖揭示:數(shù)據(jù)收發(fā)數(shù)據(jù)緩沖UART中斷數(shù)據(jù)收發(fā)是在UART中斷里進(jìn)行的;待收發(fā)的數(shù)據(jù)都先送到數(shù)據(jù)緩沖區(qū);這個(gè)過(guò)程也是在UART中斷里完成;UART中間件|μC/OS-II程序設(shè)計(jì)使用機(jī)理83.三、使用機(jī)理

為令用戶深入理解UART中間件的機(jī)制,此處對(duì)該中間件的幾個(gè)重要機(jī)制作一闡述:

數(shù)據(jù)緩沖機(jī)制;

數(shù)據(jù)收發(fā)機(jī)制;UART中斷和UART任務(wù)的通訊。三個(gè)機(jī)制間的關(guān)系,可用以下圖揭示:UART中斷數(shù)據(jù)收發(fā)是在UART中斷里進(jìn)行的;待收發(fā)的數(shù)據(jù)都先送到數(shù)據(jù)緩沖區(qū);這個(gè)過(guò)程也是在UART中斷里完成;

UART任務(wù)

發(fā)送信號(hào)量數(shù)據(jù)收發(fā)和數(shù)據(jù)緩沖處理都在中斷里進(jìn)行,當(dāng)這些工作處理完畢后,UART中斷須發(fā)送信號(hào)量通知UART任務(wù),相關(guān)工作已完成。UART中間件|μC/OS-II程序設(shè)計(jì)使用機(jī)理84.接下來(lái),分別對(duì)各機(jī)制作一些詳細(xì)的介紹:1、數(shù)據(jù)緩沖機(jī)制在UART中間件的使用中,存在著硬件緩沖區(qū)和軟件緩沖區(qū)兩個(gè)概念。硬件緩沖區(qū)是UART自身所配備的FIFO存放器,而軟件緩沖區(qū)占用的是處理器的內(nèi)部RAM資源。

軟件緩沖區(qū)的存在,構(gòu)成了對(duì)硬件緩沖區(qū)的擴(kuò)展,有助于UART通訊可靠性的進(jìn)一步提高。LPC2xxx系列ARMUART……片內(nèi)RAMFIFO寄存器硬件緩沖區(qū)軟件緩沖區(qū)UART中間件|μC/OS-II程序設(shè)計(jì)使用機(jī)理85.1、數(shù)據(jù)緩沖機(jī)制用戶也可以根據(jù)實(shí)際情況對(duì)數(shù)據(jù)緩沖區(qū)進(jìn)行配置:

硬件緩沖區(qū)的配置

用戶可以配置接收FIFO的觸發(fā)深度,以配置UART0接收FIFO的觸發(fā)深度為8為例,請(qǐng)看下面的演示:★設(shè)置UART0的接收FIFO觸發(fā)深度為8個(gè)字節(jié)UART中間件|μC/OS-II程序設(shè)計(jì)使用機(jī)理86.1、數(shù)據(jù)緩沖機(jī)制用戶也可以根據(jù)實(shí)際情況對(duì)數(shù)據(jù)緩沖區(qū)進(jìn)行配置:

軟件緩沖區(qū)的配置

用戶還可以配置軟件緩沖區(qū)內(nèi)接收/發(fā)送緩沖區(qū)的大小,以配置UART0為例,請(qǐng)看下面的演示:

直接修改這兩個(gè)數(shù)值的大小即可。但是,軟件接收緩沖區(qū)的大小建議配置為接收FIFO觸發(fā)深度的整數(shù)倍。UART中間件|μC/OS-II程序設(shè)計(jì)使用機(jī)理87.2、數(shù)據(jù)收發(fā)機(jī)制

如前所述,在本中間件里,UART的數(shù)據(jù)收發(fā)皆是在UART中斷里進(jìn)行。下面分別介紹一下數(shù)據(jù)收發(fā)的過(guò)程:

數(shù)據(jù)接收當(dāng)產(chǎn)生接收中斷或超時(shí)中斷時(shí),CPU通過(guò)查詢狀態(tài)存放器,將所收到的數(shù)據(jù)全部轉(zhuǎn)移至軟件接收緩沖區(qū)。請(qǐng)看以下圖:軟件FIFO硬件FIFO

接收數(shù)據(jù)

產(chǎn)生中斷

處理接收數(shù)據(jù)UART中間件|μC/OS-II程序設(shè)計(jì)使用機(jī)理88.

數(shù)據(jù)發(fā)送先把要發(fā)送的所有數(shù)據(jù)放入軟件發(fā)送緩沖區(qū),然后再取出其中的第一個(gè)數(shù)據(jù)用查詢方式發(fā)送,從而觸發(fā)發(fā)送中斷;接下來(lái),在發(fā)送中斷里,軟件發(fā)送緩沖區(qū)內(nèi)剩余的數(shù)據(jù)也全部被發(fā)送完。相關(guān)的過(guò)程,請(qǐng)看以下圖:軟件FIFO硬件FIFO

發(fā)送完一個(gè)字節(jié)后產(chǎn)生中斷,之后一直發(fā)送直至發(fā)送完畢

將待發(fā)送數(shù)據(jù)送入軟件FIFOUART中間件|μC/OS-II程序設(shè)計(jì)使用機(jī)理89.3、UART中斷和任務(wù)

在UART中間件里,由于對(duì)軟件緩沖區(qū)的操作乃至數(shù)據(jù)的收發(fā)都是在UART中斷內(nèi)完成,所以必然面臨著UART中斷和任務(wù)間的協(xié)調(diào)問(wèn)題。

前文已述及,UART中斷和UART任務(wù)是單向同步的關(guān)系,它們倆也各有分工:UART中斷負(fù)責(zé)完成底層的收發(fā)操作,并在收發(fā)操作完成時(shí),通知UART任務(wù);UART任務(wù)那么根據(jù)UART中斷發(fā)送的信號(hào)量直接調(diào)用中間件里的API完成應(yīng)用操作。所以,用戶可以不用了解底層操作細(xì)節(jié),而直接完成UART操作。UART中間件|μC/OS-II程序設(shè)計(jì)使用機(jī)理90.3、UART中斷和任務(wù)

以1個(gè)最簡(jiǎn)單的UART收發(fā)操作為例,展示UART中斷和UART任務(wù)間的關(guān)系:

相關(guān)的初始化工作都已經(jīng)做好,令UART0收到上位機(jī)發(fā)來(lái)的數(shù)據(jù),然后再發(fā)送回去。這樣一個(gè)過(guò)程,是怎樣的?UART中斷UART任務(wù)、初始化后,等待信號(hào)量;、發(fā)生中斷;、發(fā)出信號(hào)量;、獲得信號(hào)量;、中斷返回;、讀取收到的數(shù)據(jù),然后發(fā)送。UART中間件|μC/OS-II程序設(shè)計(jì)使用機(jī)理91.21工程模板介紹萬(wàn)年歷數(shù)據(jù)采集系統(tǒng)UART中間件I2C中間件345uC/OS-II目錄92.3

使用示例

4

小結(jié)2

使用導(dǎo)論I2C中間件|μC/OS-II程序設(shè)計(jì)目錄

簡(jiǎn)介193.I2C總線(InterICBUS)是Philips推出的芯片間串行傳輸總線,它以2根連線實(shí)現(xiàn)了完善的雙向數(shù)據(jù)傳送;并且,由于是通過(guò)軟件來(lái)尋址器件,I2C總線上的器件擴(kuò)展是靈活而方便的。

本I2C中間件支持μC/OS-II操作系統(tǒng)和前后臺(tái)系統(tǒng)下,對(duì)LPC2000系列ARM的I2C總線進(jìn)行操作。

接下來(lái),對(duì)I2C中間件的文件組成作一介紹:驅(qū)動(dòng)文件說(shuō)明I2c.cI2C中間件的實(shí)體。I2C中間件里各API的源碼都在該文件內(nèi)I2c.hI2C中間件的用戶接口I2cPrivate.hI2c.c的私有頭文件。也是中間件的又一個(gè)用戶接口,可在內(nèi)部選擇驅(qū)動(dòng)的應(yīng)用環(huán)境I2cHook.c鉤子函數(shù)文件。I2CISR會(huì)調(diào)用該文件內(nèi)的函數(shù),而這些函數(shù)的函數(shù)體可由用戶自定I2cHook.hI2cHook.c的頭文件。被I2c.c包含,用戶無(wú)須關(guān)注I2C中間件|μC/OS-II程序設(shè)計(jì)簡(jiǎn)介94.I2C總線(InterICBUS)是Philips推出的芯片間串行傳輸總線,它以2根連線實(shí)現(xiàn)了完善的全雙工同步數(shù)據(jù)傳送;并且,由于是通過(guò)軟件來(lái)尋址器件,I2C總線上的器件擴(kuò)展是靈活而方便的。

本I2C中間件支持μC/OS-II操作系統(tǒng)和前后臺(tái)系統(tǒng)下,對(duì)LPC2000系列ARM的I2C總線進(jìn)行操作。各頭文件的包含關(guān)系那么如下所示:接下來(lái),介紹I2C中間件包括哪些API:功能函數(shù)名稱說(shuō)明參數(shù)設(shè)置i2cIniti2cSetMode用戶可調(diào)用該函數(shù),指定哪一個(gè)I2C設(shè)備要初始化,并指定該I2C設(shè)備的速率。指定I2C設(shè)備、初始化其速率;和i2cInit函數(shù)不同的是它不影響其它參數(shù)讀寫(xiě)操作i2cReadi2cGetFlagi2cGetRemainBytesi2cWrite調(diào)用該函數(shù),讀取指定地址內(nèi)指定長(zhǎng)度的數(shù)據(jù)到指定緩存調(diào)用該函數(shù),讀取指定I2C設(shè)備的工作狀態(tài)調(diào)用該函數(shù),了解當(dāng)前I2C設(shè)備還有多少字節(jié)未發(fā)送或接收調(diào)用該函數(shù),將指定緩存內(nèi)指定長(zhǎng)度的數(shù)據(jù)寫(xiě)入指定地址中斷服務(wù)i2c0IRQi2c1IRQi2c2IRQI2C0中斷服務(wù)函數(shù)

I2C1中斷服務(wù)函數(shù)

I2C2中斷服務(wù)函數(shù)。這些中斷服務(wù)函數(shù)都不支持中斷嵌套由上表可見(jiàn),I2C中間件共包含三大功能模塊、9個(gè)API。I2C中間件|μC/OS-II程序設(shè)計(jì)簡(jiǎn)介95.接下來(lái),介紹I2C中間件包括哪些API:功能函數(shù)名稱說(shuō)明參數(shù)設(shè)置i2cIniti2cSetMode用戶可調(diào)用該函數(shù),指定哪一個(gè)I2C設(shè)備要初始化,并指定該I2C設(shè)備的速率。指定I2C設(shè)備、初始化其速率;和i2cInit函數(shù)不同的是它不影響其它參數(shù)讀寫(xiě)操作i2cReadi2cGetFlagi2cGetRemainBytesi2cWrite調(diào)用該函數(shù),讀取指定地址內(nèi)指定長(zhǎng)度的數(shù)據(jù)到指定緩存調(diào)用該函數(shù),讀取指定I2C設(shè)備的工作狀態(tài)調(diào)用該函數(shù),將指定緩存內(nèi)指定長(zhǎng)度的數(shù)據(jù)寫(xiě)入指定地址中斷服務(wù)i2c0IRQi2c1IRQi2c2IRQI2C0中斷服務(wù)函數(shù)

I2C1中斷服務(wù)函數(shù)

I2C2中斷服務(wù)函數(shù)由上表可見(jiàn),I2C中間件共包含三大功能模塊、9個(gè)API。使用I2C中間件也有一定的流程:I2C中間件只針對(duì)I2C部件進(jìn)行了操作,其它與系統(tǒng)相關(guān)的地方如管腳連接和中斷向量都需要單獨(dú)設(shè)置。中間件的一般使用流程,如以下圖所示:開(kāi)始選擇應(yīng)用環(huán)境,設(shè)置I2C管腳配置中斷用中間件API編程用戶程序結(jié)束

使用I2C中間件前,須設(shè)置管腳;此外還要選擇應(yīng)用環(huán)境,一般默認(rèn)為在μC/OS-II下;

由于I2C中間件是使用中斷來(lái)進(jìn)行收發(fā),所以用戶需要初始化I2C中斷,這部分的工作并沒(méi)有包括到中間件里;在作好相關(guān)的初始化工作后,用戶即可直接使用中間件里的API“組裝”應(yīng)用程序了。I2C中間件|μC/OS-II程序設(shè)計(jì)簡(jiǎn)介96.小結(jié):開(kāi)始文件組成API簡(jiǎn)介中間件應(yīng)用流程結(jié)束

介紹了I2C中間件的用途和應(yīng)用范圍;

介紹了I2C中間件的文件組成及各自的作用;

概述了I2C中間件內(nèi)API的全貌;中間件概述

為了讓讀者形成應(yīng)用I2C中間件的整體印象而介紹了中間件的一般應(yīng)用流程。用下面的演示對(duì)本小節(jié)所表達(dá)的內(nèi)容作一回憶:小節(jié)的表達(dá)軌跡I2C中間件|μC/OS-II程序設(shè)計(jì)簡(jiǎn)介97.I2C中間件|μC/OS-II程序設(shè)計(jì)目錄3

使用示例

4

小結(jié)2

使用導(dǎo)論

簡(jiǎn)介198.用戶在使用中間件進(jìn)行編程之前,有必要理解一些重要細(xì)節(jié)。本小節(jié)將對(duì)以下幾個(gè)方面展開(kāi)表達(dá):參數(shù)設(shè)置鉤子函數(shù)阻塞-釋放在本中間件里,使用字符串來(lái)給API提供入口參數(shù)。在此處介紹鉤子函數(shù)、也即回調(diào)函數(shù)的概念。由于對(duì)I2C設(shè)備進(jìn)行讀寫(xiě)時(shí)要求獨(dú)占,所以存在阻塞-釋放機(jī)制。I2C中間件|μC/OS-II程序設(shè)計(jì)使用導(dǎo)論99.參數(shù)設(shè)置中間件里的局部API,是采用字符串來(lái)輸入入口參數(shù)的,字符串的格式如下所述:

關(guān)鍵字0=值0[空格]關(guān)鍵字1=值1[空格]關(guān)鍵字2=值2[空格]……

具體的例子如下所示:/*設(shè)置I2C0器件為主機(jī),速率為200K*/CharI2cSet[]={“Speed=200000”};I2cInit(0,I2cSet,NULL);I2C中間件|μC/OS-II程序設(shè)計(jì)使用導(dǎo)論100.鉤子函數(shù)鉤子函數(shù),顧名思義,它“倚靠〞在某一個(gè)函數(shù)內(nèi)(墻壁),但又可“掛上〞其它代碼(鉤子可掛各種物件)。請(qǐng)看下面的圖示:voidi2c0IRQ(void){……}i2c0Hook();voidi2c0Hook(void){/*自定義代碼*/}……“墻壁〞“鉤子〞“所掛物件〞I2C中間件|μC/OS-II程序設(shè)計(jì)使用導(dǎo)論101.鉤子函數(shù)實(shí)際情況里,鉤子函數(shù)所“掛〞的自定義代碼如何運(yùn)行呢?請(qǐng)看演示:voidi2c0IRQ(void){……}i2c0Hook();voidi2c0Hook(void){/*自定義代碼*/}……I2C中間件|μC/OS-II程序設(shè)計(jì)使用導(dǎo)論102.阻塞-釋放1、阻塞

對(duì)于同一個(gè)I2C接口

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論