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

下載本文檔

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

文檔簡介

1、1會(huì)計(jì)學(xué)uCOSII程序設(shè)計(jì)示例程序設(shè)計(jì)示例 工程模板簡介1 2示例實(shí)現(xiàn)工程模板應(yīng)用工程模板應(yīng)用| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)目錄目錄工程模板應(yīng)用工程模板應(yīng)用| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)摸板結(jié)構(gòu)摸板結(jié)構(gòu)頭文件組頭文件組內(nèi)核文件組內(nèi)核文件組用戶文件組用戶文件組ARM文件組文件組主函數(shù)主函數(shù)模板結(jié)構(gòu)模板結(jié)構(gòu) 頭文件組:主要是包含頭文件和配置信息1ARM文件組: 主要是包含操作系統(tǒng)和開發(fā)板硬件相關(guān)的配置信息23內(nèi)核文件組:主要是包含UC/OS操作系統(tǒng)源文件5用戶文件組:主要包含用戶需要配置的.H文件和除主函數(shù)外的.C文件4主函數(shù):即用戶編寫的MAIN.C函數(shù)工程模板應(yīng)用工程模板應(yīng)用| C/

2、OS-II程序設(shè)計(jì)程序設(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)行修改在工程摸板中主要包含六個(gè)頭文件,具體描述如下表所示:工程模板應(yīng)用工程模板應(yīng)用| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)ARM文件組文件組 ARM文件組主要包含配置文件和iniARM22

3、00加載和配置文件主要包含六個(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)板的硬件配置文件工程模板應(yīng)用工程模板應(yīng)用| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)用戶文件組用戶文件組用戶文件組主要包含main.h,main.c和os_cfg.h三個(gè)文件前兩個(gè)文件有用戶自己編寫 os_cfg.h文件主要是實(shí)現(xiàn)操作系統(tǒng)的配置,用戶可以根據(jù)實(shí)際需要進(jìn)行裁剪具體描述如下表所示:參數(shù)名

4、功能描述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ù)的頻率工程模板應(yīng)用工程模板應(yīng)用| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)摸板使用步驟摸板使用步驟拷貝工程摸板拷貝工程摸板使用摸板建立新工程分為四個(gè)步驟主要操作如下:用戶將光盤中的“ARM EXECUTABLE IMAGE FOR UCOS LPC2200“文件拷貝到”.ARMADSV1.2STATI

5、ONERY工程模板應(yīng)用工程模板應(yīng)用| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)摸板使用步驟摸板使用步驟將光盤摸板文件放進(jìn)Stationary目錄:打開打開ADS,選擇選擇”新建新建”操作操作拷貝工程摸板拷貝工程摸板 在ADS1.2的集成開發(fā)環(huán)境中選擇”新建”操作用戶將光盤中的“ARM EXECUTABLE IMAGE FOR UCOS LPC2200 “文件拷貝到”.ARMADSV1.2STATIONERY工程模板應(yīng)用工程模板應(yīng)用| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)摸板使用步驟摸板使用步驟使用摸板建立新工程分為四個(gè)步驟主要操作如下:工程模板應(yīng)用工程模板應(yīng)用| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)摸板使用步驟摸板

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

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

8、驟按照摸板生成新工程: 工程模板簡介1 2示例實(shí)現(xiàn)工程模板應(yīng)用工程模板應(yīng)用| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)目錄目錄工程模板應(yīng)用工程模板應(yīng)用| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)硬件連接硬件連接 摸板應(yīng)用示例是蜂鳴器控制,硬件連接如下圖所示:蜂鳴器控制電路跳線連接工程模板應(yīng)用工程模板應(yīng)用| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)任務(wù)創(chuàng)建任務(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)系如下圖所

9、示:工程模板應(yīng)用工程模板應(yīng)用| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)任務(wù)創(chuàng)建任務(wù)創(chuàng)建工程模板應(yīng)用工程模板應(yīng)用| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)任務(wù)流程任務(wù)流程示例中主函數(shù)和個(gè)任務(wù)的控制流程如下:工程模板應(yīng)用工程模板應(yīng)用| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)ISR任務(wù)示例任務(wù)示例中斷示例中先按上面流程創(chuàng)建新工程Timer1_int.mcp,再在主函數(shù)中創(chuàng)建任務(wù)TASK0和TASKBEEP,TASK0完成硬件初始化.TASKBEEP完成蜂鳴器信號(hào)量等待和操作.程序流程如下: 下面以示例來說明如何現(xiàn)實(shí)ISR與任務(wù)間同步。假設(shè)定時(shí)器1中斷服務(wù)程序發(fā)送信號(hào)量,任務(wù)完成了信號(hào)量的創(chuàng)建并在接收到信號(hào)量后讓蜂鳴器響一聲

10、。處理流程如下。工程模板應(yīng)用工程模板應(yīng)用| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)ISR任務(wù)示例任務(wù)示例void Timer1_Exception (void) T1IR = 0 x01; VICVectAddr = 0; OSSemPost (sem);更新中斷優(yōu)先級(jí)清除中斷標(biāo)志發(fā)送信號(hào)量 中斷服務(wù)程序ISR示例代碼如下。工程模板應(yīng)用工程模板應(yīng)用| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)ISR任務(wù)示例任務(wù)示例void TaskBeep (void *pdata) sem = OSSemCreate(0); OS_ENTER_CRITICAL(); /* 初始化VIC(省略) */ /* 初始化定時(shí)器1(省略

11、) */ /* 目標(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)用工程模板應(yīng)用| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)ISR任務(wù)示例任務(wù)示例21工程模板介紹工程模板介紹萬年歷萬年歷 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)UAR

12、T中間件中間件 I2C中間件中間件345uC/OS-II目目 錄錄 ISR和任務(wù)之間的同步和通信2 任務(wù)間的同步與通信1數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)目錄目錄一、任務(wù)的同步 在實(shí)時(shí)操作系統(tǒng)中,任務(wù)和任務(wù)之間往往需要協(xié)調(diào)運(yùn)行,這種協(xié)調(diào)關(guān)系,在日常生活里也是屢見不鮮的。為了說明這種協(xié)調(diào)關(guān)系,請(qǐng)看下面的演示:司機(jī)司機(jī)售票員售票員啟動(dòng)車輛關(guān) 車 門行 駛售 票 1、什么是任務(wù)的同步? 停 車開 車 門 、啟動(dòng)車輛,踩油門就可以了;但實(shí)際上,你必須等車門關(guān)上了才可以啟動(dòng)車輛。啟動(dòng)車輛,踩油門就可以了;但實(shí)際上,你必須等車門關(guān)上了才可以啟動(dòng)車輛。 、行駛和售票的行動(dòng)互不干涉、彼

13、此獨(dú)立,此時(shí)不存在協(xié)調(diào)關(guān)系。行駛和售票的行動(dòng)互不干涉、彼此獨(dú)立,此時(shí)不存在協(xié)調(diào)關(guān)系。 、開車門只要按下開關(guān)就可以了;但實(shí)際上,你得等司機(jī)停車才能開車門,否則就開車門只要按下開關(guān)就可以了;但實(shí)際上,你得等司機(jī)停車才能開車門,否則就出事故了。出事故了。 由該演示可知,任務(wù)的同步,就是任務(wù)的協(xié)調(diào)運(yùn)行,你一步、我一步地緊密協(xié)作:任務(wù)的同步和通信任務(wù)的同步和通信| 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)任務(wù)的同步任務(wù)的同步一、任務(wù)的同步 在實(shí)時(shí)操作系統(tǒng)中,任務(wù)和任務(wù)之間往往需要協(xié)調(diào)運(yùn)行,這種協(xié)調(diào)關(guān)系,在日常生活里也是屢見不鮮的。為了說明這種協(xié)調(diào)關(guān)系,請(qǐng)看下面的演示:任務(wù)任務(wù)A 任務(wù)任務(wù)B 1、什么是任務(wù)的同步? 、任

14、務(wù)、任務(wù)B運(yùn)行一段時(shí)間后,發(fā)送信息讓運(yùn)行一段時(shí)間后,發(fā)送信息讓任務(wù)任務(wù)A A啟動(dòng)啟動(dòng),與此同時(shí),與此同時(shí),任務(wù)任務(wù)B B掛起掛起。 、任務(wù)任務(wù)A獲得允許運(yùn)行的信息后,立即啟動(dòng);完成操作后,發(fā)送信息告知獲得允許運(yùn)行的信息后,立即啟動(dòng);完成操作后,發(fā)送信息告知任務(wù)任務(wù)B,任務(wù),任務(wù)B可以啟動(dòng)并執(zhí)行接下來的操作。可以啟動(dòng)并執(zhí)行接下來的操作。 在理解了“任務(wù)同步”的概念后,再來看看C/OS-II實(shí)時(shí)操作系統(tǒng)所提供的用于實(shí)現(xiàn)“任務(wù)同步”的通信手段。任務(wù)的同步和通信任務(wù)的同步和通信| 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)任務(wù)的同步任務(wù)的同步 C/OS-II實(shí)時(shí)操作系統(tǒng)提供了以下通信手段,使某一任務(wù)得以向另一任務(wù)發(fā)送同

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

16、現(xiàn)真正意義的通信。任務(wù)的同步和通信任務(wù)的同步和通信| 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)任務(wù)的同步任務(wù)的同步 在嵌入式系統(tǒng)的運(yùn)行過程中,任務(wù)與任務(wù)之間必然伴隨著數(shù)據(jù)通信,這種通信可以采用多種方法來實(shí)現(xiàn): 二、任務(wù)的通信 全局變量; 內(nèi)存數(shù)據(jù)塊; 消息郵箱; 消息隊(duì)列。 靈活運(yùn)用這些不同的方法,可滿足不同的數(shù)據(jù)通信要求,請(qǐng)看表2:任務(wù)的同步和通信任務(wù)的同步和通信| 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)任務(wù)的通信任務(wù)的通信任務(wù)同步的通信手段應(yīng)用場合全局變量無行為同步要求時(shí)的少量數(shù)據(jù)通信。但需注意資源同步內(nèi)存數(shù)據(jù)塊無行為同步要求時(shí)的大量數(shù)據(jù)通信。但需注意資源同步消息郵箱有行為同步要求時(shí)的少量數(shù)據(jù)通信消息隊(duì)列有行為同步要求

17、時(shí)的大量數(shù)據(jù)通信表表2 不同通信手段的應(yīng)用場合不同通信手段的應(yīng)用場合 二、任務(wù)的通信 介紹完行為同步和通信的基本知識(shí)后,接下來再給出實(shí)例,以加深理解。任務(wù)的同步和通信任務(wù)的同步和通信| 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)任務(wù)的通信任務(wù)的通信 三、操作示例 1、示例簡介 利用LPC2000系列ARM相關(guān)開發(fā)板上已有的資源,可以構(gòu)筑一個(gè)小型的數(shù)據(jù)采集系統(tǒng),如下所示:LPC2000系列系列ARM相關(guān)開發(fā)板相關(guān)開發(fā)板串口線串口線上位機(jī)上位機(jī) 示例的內(nèi)容是:按下開發(fā)板上的按鍵、令A(yù)RM芯片啟動(dòng)A/D采樣;采樣結(jié)束后,再將采樣結(jié)果通過串口線發(fā)送到上位機(jī)顯示。任務(wù)的同步和通信任務(wù)的同步和通信| 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系

18、統(tǒng)操作示例操作示例 2、示例里的任務(wù) 在本示例內(nèi),劃分出了3個(gè)用戶任務(wù),相關(guān)信息如表3所示。任務(wù)的名稱任務(wù)的優(yōu)先級(jí)按鍵任務(wù)高采樣任務(wù)中顯示任務(wù)低表表3 任務(wù)信息任務(wù)信息 接下來,將以動(dòng)畫的形式演示該數(shù)據(jù)采集系統(tǒng)的運(yùn)轉(zhuǎn)流程,并在每一個(gè)運(yùn)行階段加以講解。任務(wù)的同步和通信任務(wù)的同步和通信| 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)操作示例操作示例 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ù)顯示任務(wù)顯示任務(wù)掛起掛起掛起掛起不斷掃描不

19、斷掃描任務(wù)的同步和通信任務(wù)的同步和通信| 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)操作示例操作示例 2、示例演示(2) 啟動(dòng)采樣 按鍵任務(wù)掃描到有按鍵按下,發(fā)出信號(hào)量。按鍵任務(wù)按鍵任務(wù)采樣任務(wù)采樣任務(wù)顯示任務(wù)顯示任務(wù)掛起掛起掛起掛起掃描到按鍵掃描到按鍵 采樣任務(wù)得到了信號(hào)量從而就緒,然后在接下來的任務(wù)調(diào)度中進(jìn)入運(yùn)行狀態(tài),開始采樣。開始采樣開始采樣 顯示任務(wù)仍在等待采樣任務(wù)發(fā)送啟動(dòng)信號(hào)和采樣結(jié)果。任務(wù)的同步和通信任務(wù)的同步和通信| 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)操作示例操作示例 2、示例演示(3) 發(fā)送采樣結(jié)果 按鍵任務(wù)繼續(xù)掃描按鍵。(此時(shí)若掃描到按鍵,將在下一輪處理)。采樣任務(wù)采樣任務(wù)顯示任務(wù)顯示任務(wù) 采樣完畢,可

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

21、信2 任務(wù)間的同步與通信1任務(wù)的同步和通信任務(wù)的同步和通信| 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)目錄目錄 ISR主要被用于響應(yīng)異步事件,在ISR里可觸發(fā)其它任務(wù)的運(yùn)行,實(shí)現(xiàn)ISR和任務(wù)的同步。 ISR和任務(wù)間的同步關(guā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ù)的同步和通信任務(wù)的同步和通信| 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)ISR和任務(wù)的同步和任務(wù)的同步 ISR和任務(wù)間的通信手

22、段包括信號(hào)型和數(shù)據(jù)型,兩種手段的應(yī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)行信息采集,然后通過消息郵箱或消息隊(duì)列,將數(shù)據(jù)信息發(fā)送給關(guān)聯(lián)任務(wù),并啟動(dòng)關(guān)聯(lián)任務(wù)來處理后續(xù)數(shù)據(jù)表表4 信號(hào)型通信和數(shù)據(jù)型通信的對(duì)比信號(hào)型通信和數(shù)據(jù)型通信的對(duì)比 為了進(jìn)一步說明,接下來請(qǐng)看下面的實(shí)例演示。任務(wù)的同步和通信任務(wù)的同步和通信| 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)ISR和任務(wù)的通信和任務(wù)的通信三、實(shí)例演示 1、示例簡介 示例的內(nèi)容是:示例進(jìn)行時(shí),蜂鳴器一直在間歇鳴叫;用戶按下板上的按鍵、觸發(fā)外部中斷

23、;外部中斷再觸發(fā)“讀取ADC然后將采樣結(jié)果發(fā)送至上位機(jī)”的操作。串口線串口線上位機(jī)上位機(jī) 利用LPC2000系列ARM相關(guān)開發(fā)板上已有的資源,可以構(gòu)筑一個(gè)小型的數(shù)據(jù)采集系統(tǒng),如下所示:LPC2000系列系列ARM相關(guān)開發(fā)板相關(guān)開發(fā)板任務(wù)的同步和通信任務(wù)的同步和通信| 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)ISR和任務(wù)的通信和任務(wù)的通信 2、示例里的任務(wù) 在本示例內(nèi),劃分出了2個(gè)用戶任務(wù),相關(guān)信息如表5所示。任務(wù)的名稱任務(wù)的優(yōu)先級(jí)蜂鳴任務(wù)中采樣和顯示任務(wù)高表表5 任務(wù)信任務(wù)信息息 接下來,將以動(dòng)畫的形式演示該實(shí)例的運(yùn)轉(zhuǎn)流程,并在每一個(gè)運(yùn)行階段加以講解。任務(wù)的同步和通信任務(wù)的同步和通信| 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系

24、統(tǒng)操作示例操作示例3、示例演示 這是外部中斷未發(fā)生時(shí),用戶任務(wù)執(zhí)行的情況:采樣和顯示任務(wù) 初始化硬件 等待信號(hào)量蜂鳴器任務(wù)、系統(tǒng)初始化 系統(tǒng)初始化時(shí),先運(yùn)行“采樣和顯示”任務(wù)。、等待信號(hào)量有效 由于此時(shí)信號(hào)量無效,采樣和發(fā)送任務(wù)掛起,CPU控制權(quán)交給其它就緒任務(wù)。、蜂鳴器任務(wù)啟動(dòng) 此時(shí)優(yōu)先級(jí)最高的就緒任務(wù)是蜂鳴器任務(wù),于是蜂鳴器任務(wù)啟動(dòng)。蜂鳴器間歇鳴叫任務(wù)的同步和通信任務(wù)的同步和通信| 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)操作示例操作示例3、示例演示 這是外部中斷發(fā)生時(shí),用戶任務(wù)執(zhí)行的情況:采樣和顯示任務(wù) 初始化硬件 等待信號(hào)量蜂鳴器任務(wù)、發(fā)生外部中斷 外部中斷發(fā)生。蜂鳴器任務(wù)被中斷。、ISR發(fā)送信號(hào)量

25、“采樣和顯示任務(wù)”獲得了信號(hào)量,立即進(jìn)入就緒狀態(tài),由于該任務(wù)優(yōu)先級(jí)最高,于是立即運(yùn)行。、回復(fù)到初始狀態(tài) 發(fā)送完采樣結(jié)果后,繼續(xù)等待下一個(gè)外部中斷,蜂鳴器任務(wù)又開始運(yùn)行。蜂鳴器間歇鳴叫發(fā)生外部中斷 發(fā)送采樣結(jié)果任務(wù)的同步和通信任務(wù)的同步和通信| 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)操作示例操作示例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è)外部中斷,

26、蜂鳴器任務(wù)又開始運(yùn)行。蜂鳴器間歇鳴叫發(fā)生外部中斷 發(fā)送采樣結(jié)果任務(wù)的同步和通信任務(wù)的同步和通信| 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)操作示例操作示例21工程模板介紹工程模板介紹萬年歷萬年歷 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)UART中間件中間件 I2C中間件中間件345uC/OS-II目目 錄錄 示例簡介1 2示例的實(shí)現(xiàn)萬年歷萬年歷| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)目錄目錄一、示例簡介 在這里,通過一個(gè)萬年歷的設(shè)計(jì),來說明C/OS-II下程序設(shè)計(jì)的方法: 利用LPC2000系列ARM相關(guān)的開發(fā)板和EasyARM串口調(diào)試軟件(自帶一個(gè)萬年歷界面)來實(shí)現(xiàn)一個(gè)具有以下功能的萬年歷: 實(shí)時(shí)顯示:不斷顯示當(dāng)前的年月日星期、

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

28、的實(shí)現(xiàn)1、功能劃分控 制顯示時(shí)間信息產(chǎn)生時(shí)間信息從功能來劃分,可把示例分成3個(gè)模塊,請(qǐng)看下圖: “控 制”通過操作開發(fā)板上的按鍵,實(shí)現(xiàn):l“實(shí)時(shí)顯示”和“時(shí)間設(shè)置”功能的切換;l“時(shí)間設(shè)置”。萬年歷萬年歷| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)示例的實(shí)現(xiàn)示例的實(shí)現(xiàn)二、示例的實(shí)現(xiàn)1、功能劃分控 制顯示時(shí)間信息產(chǎn)生時(shí)間信息從功能來劃分,可把示例分成3個(gè)模塊,請(qǐng)看下圖:“產(chǎn)生時(shí)間信息”操作開發(fā)板上LPC2000系列ARM芯片自帶的RTC,即可產(chǎn)生時(shí)間信息,用于填充萬年歷。萬年歷萬年歷| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)示例的實(shí)現(xiàn)示例的實(shí)現(xiàn)二、示例的實(shí)現(xiàn)1、功能劃分控 制顯示時(shí)間信息產(chǎn)生時(shí)間信息從功能來劃分,

29、可把示例分成3個(gè)模塊,請(qǐng)看下圖:“顯示時(shí)間”通過板上的UART,按照協(xié)議將信息發(fā)送至EasyARM串口調(diào)試軟件,軟件上的萬年歷即可顯示出此時(shí)的時(shí)間信息。不斷發(fā)送實(shí)時(shí)時(shí)間信息,則萬年歷會(huì)不斷顯示。萬年歷萬年歷| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)示例的實(shí)現(xiàn)示例的實(shí)現(xiàn)二、示例的實(shí)現(xiàn)2、任務(wù)設(shè)計(jì) 根據(jù)上面劃分出的功能模塊實(shí)現(xiàn)需求,任務(wù)可以劃分為: 設(shè)置任務(wù); 鍵盤任務(wù); 顯示任務(wù)。 周期性地執(zhí)行。完成目標(biāo)板和RTC的初始化操作,之后創(chuàng)建“設(shè)置任務(wù)”和“顯示任務(wù)”,隨后周期性地查詢鍵盤輸入,當(dāng)有鍵按下,則進(jìn)行按鍵處理。萬年歷萬年歷| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)示例的實(shí)現(xiàn)示例的實(shí)現(xiàn)二、示例的實(shí)現(xiàn)2、任務(wù)

30、設(shè)計(jì) 根據(jù)上面劃分出的功能模塊實(shí)現(xiàn)需求,任務(wù)可以劃分為: 設(shè)置任務(wù); 鍵盤任務(wù); 顯示任務(wù)。 周期性地執(zhí)行。完成目標(biāo)板和RTC的初始化操作,之后創(chuàng)建“設(shè)置任務(wù)”和“顯示任務(wù)”,隨后周期性地查詢鍵盤輸入,當(dāng)有鍵按下,則進(jìn)行按鍵處理。 接收到按鍵消息后才運(yùn)行。啟動(dòng)后,根據(jù)收到的按鍵信息設(shè)置時(shí)間,并閃爍顯示待設(shè)置位,未收到消息則掛起。萬年歷萬年歷| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)示例的實(shí)現(xiàn)示例的實(shí)現(xiàn)二、示例的實(shí)現(xiàn)2、任務(wù)設(shè)計(jì) 根據(jù)上面劃分出的功能模塊實(shí)現(xiàn)需求,任務(wù)可以劃分為: 設(shè)置任務(wù); 鍵盤任務(wù); 顯示任務(wù)。 周期性地執(zhí)行。完成目標(biāo)板和RTC的初始化操作,之后創(chuàng)建“設(shè)置任務(wù)”和“顯示任務(wù)”,隨后周

31、期性地查詢鍵盤輸入,當(dāng)有鍵按下,則進(jìn)行按鍵處理。 接收到按鍵消息后才運(yùn)行。啟動(dòng)后,根據(jù)收到的按鍵信息設(shè)置時(shí)間,并閃爍顯示待設(shè)置位,未收到消息則掛起。 每過1秒,由RTC秒中斷觸發(fā)該任務(wù)的運(yùn)行。該任務(wù)啟動(dòng)后便將當(dāng)前的RTC數(shù)據(jù)通過UART發(fā)送至上位機(jī)的萬年歷界面進(jìn)行實(shí)時(shí)顯示。萬年歷萬年歷| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)示例的實(shí)現(xiàn)示例的實(shí)現(xiàn)鍵盤任務(wù)3、任務(wù)運(yùn)行演示 為了說明三個(gè)任務(wù)的狀態(tài)轉(zhuǎn)換過程,設(shè)計(jì)了兩個(gè)動(dòng)畫演示。演示分為兩部分。第一部分,是按鍵未按下時(shí),三大任務(wù)的狀態(tài)轉(zhuǎn)換過程按鍵未按下時(shí),三大任務(wù)的狀態(tài)轉(zhuǎn)換過程:初始化目標(biāo)板和RTC; 0%100%萬年歷萬年歷| C/OS-II程序設(shè)計(jì)程序設(shè)

32、計(jì)示例的實(shí)現(xiàn)示例的實(shí)現(xiàn)3、任務(wù)運(yùn)行演示 為了說明三個(gè)任務(wù)的狀態(tài)轉(zhuǎn)換過程,設(shè)計(jì)了兩個(gè)動(dòng)畫演示。演示分為兩部分。第一部分,是按鍵未按下時(shí),三大任務(wù)的狀態(tài)轉(zhuǎn)換過程:是按鍵未按下時(shí),三大任務(wù)的狀態(tài)轉(zhuǎn)換過程:鍵盤任務(wù)初始化目標(biāo)板和RTC;創(chuàng)建設(shè)置任務(wù)和顯示任務(wù);鍵盤任務(wù)設(shè)置任務(wù)顯示任務(wù)萬年歷萬年歷| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)示例的實(shí)現(xiàn)示例的實(shí)現(xiàn)3、任務(wù)運(yùn)行演示 為了說明三個(gè)任務(wù)的狀態(tài)轉(zhuǎn)換過程,設(shè)計(jì)了兩個(gè)動(dòng)畫演示。演示分為兩部分。第一部分,是按鍵未按下時(shí),三大任務(wù)的狀態(tài)轉(zhuǎn)換過程:是按鍵未按下時(shí),三大任務(wù)的狀態(tài)轉(zhuǎn)換過程:鍵盤任務(wù)初始化目標(biāo)板和RTC;創(chuàng)建設(shè)置任務(wù)和顯示任務(wù);鍵盤任務(wù)設(shè)置任務(wù)顯示任務(wù)查詢

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

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

35、示任務(wù);鍵盤任務(wù)設(shè)置任務(wù)顯示任務(wù)查詢是否有按鍵輸入;、初始化部分變量后,檢查是否收到鍵盤消息。、等待信號(hào)量,掛起。查到有按鍵輸入,發(fā)送按鍵消息。、根據(jù)鍵盤消息進(jìn)行處理。 令被設(shè)置位閃爍顯示;同時(shí),根據(jù)消息內(nèi)的設(shè)置信息設(shè)定新的時(shí)間。之后,在秒中斷發(fā)生時(shí),更新的時(shí)間信息被發(fā)送到上位機(jī)。發(fā)生秒中斷、發(fā)送時(shí)間信息。萬年歷萬年歷| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)示例的實(shí)現(xiàn)示例的實(shí)現(xiàn)21工程模板介紹工程模板介紹萬年歷萬年歷 數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)UART中間件中間件 I2C中間件中間件345uC/OS-II目目 錄錄2 簡介1 3中間件機(jī)理 使用導(dǎo)論UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)

36、目錄目錄 一、UART中間件簡介 嵌入式應(yīng)用中,UART十分常見,大多數(shù)CPU都集成了UART。LPC2000系列ARM UART中間件是UART驅(qū)動(dòng)軟件包,用戶可用它在C/OS-II下輕松、便利地完成LPC2000系列ARM上的UART操作而無須了解UART寄存器的細(xì)節(jié)。 關(guān)于UART中間件帶來的操作便利性,請(qǐng)看下面的一個(gè)演示,該演示展示了在“使用UART中間件”和“不使用UART中間件”這兩種情況下,用戶的開發(fā)流程,借此展示使用UART中間件編程帶來的好處。請(qǐng)點(diǎn)擊UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)UART中間件簡介中間件簡介開始開始翻閱用戶手冊(cè),閱讀UART的寄存器結(jié)構(gòu)

37、確定本次操作所需涉及的寄存器閱讀涉及寄存器的位功能說明寫程序,試探程序思路是否可靠、正確反復(fù)調(diào)試、摸索獲得初始版本,完成操作(以后可能還會(huì)出問題)結(jié)束瀏覽PPT,迅速理解概況和基本知識(shí)閱讀中間件的API說明,了解API的用法用中間件API編程直接調(diào)試程序,無須考慮底層細(xì)節(jié)結(jié)束自己編寫自己編寫UART驅(qū)動(dòng)驅(qū)動(dòng)直接用中間件編程直接用中間件編程UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)UART中間件簡介中間件簡介小結(jié): 由上面的演示可以看出,使用UART中間件,有助于大大加快開發(fā)速度,提高編程效率,同時(shí)令用戶程序更穩(wěn)定可靠、更容易調(diào)試。UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)

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

39、配置配置UART中間件中間件功能類型函數(shù)名稱函數(shù)功能 UART 隊(duì)列操作相關(guān)uartFifoStatus獲取UART的隊(duì)列狀態(tài)uartFifoFlush清空UART的發(fā)送或接收隊(duì)列UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)UART中間件簡介中間件簡介隊(duì)列操作隊(duì)列操作UART讀寫讀寫UART中斷入口中斷入口UART中間件結(jié)構(gòu): 按照API功能的不同,UART中間件的結(jié)構(gòu)可顯示如下:UARTUART配置配置UART中間件中間件功能類型函數(shù)名稱函數(shù)功能 UART 讀寫操作相關(guān)uartRead從串口設(shè)備讀數(shù)據(jù)uartWrite/uartDirectWrite向串口設(shè)備寫數(shù)據(jù)/不經(jīng)軟件緩沖區(qū)

40、而直接向串口設(shè)備寫數(shù)據(jù)UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)UART中間件簡介中間件簡介隊(duì)列操作隊(duì)列操作UART讀寫讀寫UART中斷入口中斷入口UART中間件結(jié)構(gòu): 按照API功能的不同,UART中間件的結(jié)構(gòu)可顯示如下:UARTUART設(shè)置設(shè)置UART中間件中間件功能類型函數(shù)名稱函數(shù)功能UART 中斷入口函數(shù)uart0Isr/uart1Isr/uart2Isr/uart3Isr各個(gè)UART的中斷入口UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)UART中間件簡介中間件簡介小結(jié): UART中間件有四大功能模塊,由一共12個(gè)API組成。詳細(xì)的API信息,請(qǐng)用戶閱讀隨機(jī)贈(zèng)送的

41、參考書及光盤。UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)UART中間件簡介中間件簡介2 簡介1 3中間件機(jī)理 使用導(dǎo)論UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)目錄目錄二、使用導(dǎo)論 在使用UART中間件進(jìn)行編程前,有必要知道一些預(yù)備知識(shí)。本小節(jié)即對(duì)這些預(yù)備知識(shí)進(jìn)行介紹: 裝載裝載UART中間件須知中間件須知 UART中間件的重要使用細(xì)節(jié)幾則中間件的重要使用細(xì)節(jié)幾則 UART中間件的一般應(yīng)用流程中間件的一般應(yīng)用流程 UART中間件的文件組成; UART中間件所需的其它軟件包; 隊(duì)列在UART中間件里的應(yīng)用; UART中間件API的參數(shù)輸入; 使用UART中間件配置UART

42、中斷; UART中間件的應(yīng)用流程。UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)使用導(dǎo)論使用導(dǎo)論 UART中間件的文件組成UART中間件是由2個(gè)文件組成,請(qǐng)看下表:驅(qū)動(dòng)文件說明uart.c該文件包含所有的UART API源碼,用戶請(qǐng)不要修改此文件uart.hUART驅(qū)動(dòng)頭文件,用戶在此文件里完成對(duì)軟件/硬件緩沖區(qū)的配置和中斷服務(wù)程序的撰寫 在使用UART中間件時(shí),須將這兩個(gè)文件加入工程,請(qǐng)看下圖:UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)使用導(dǎo)論使用導(dǎo)論 UART中間件所需的其它軟件包 UART中間件要發(fā)揮作用,還需要其它軟件包的支持,即隊(duì)列和字符串處理軟件包QueueSt

43、ring,請(qǐng)看左下的圖示: 為什么需要這個(gè)軟件包呢? UART中間件用到了隊(duì)列來收發(fā)數(shù)據(jù),所以需要隊(duì)列軟件來支持; UART中間件的API參數(shù)設(shè)置是通過分析用戶輸入的字符串來實(shí)現(xiàn)的,所以需要字符串處理軟件。UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)使用導(dǎo)論使用導(dǎo)論 UART中間件API的參數(shù)輸入 在使用UART中間件所包含的部分API時(shí),用戶需以字符串形式輸入函數(shù)的入口參數(shù),參數(shù)都包含在字符串里。請(qǐng)看下面的示例:UART0初始化初始化(波特率波特率9600bps、8位數(shù)據(jù)位、位數(shù)據(jù)位、1位停止位、無校驗(yàn),無硬件流位停止位、無校驗(yàn),無硬件流)char cUartArg = “Baud

44、Rate=9600 DataBits=8 StopBits=1 Parity=0 RtsControl=0”;/* 定義參數(shù)字符串 */* 將參數(shù)字符串填入API */uartInit (UART0, cUartArg, NULL);、用戶根據(jù)“=”號(hào)前的關(guān)鍵字關(guān)鍵字,在“=”號(hào)后填寫對(duì)應(yīng)的數(shù)值數(shù)值;char cUartArg = “BaudRate=9600 DataBits=8 StopBits=1 Parity=0 RtsControl=0”;char cUartArg = “BaudRate=9600 DataBits=8 StopBits=1 Parity=0 RtsControl=

45、0”;UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)使用導(dǎo)論使用導(dǎo)論 UART中間件API的參數(shù)輸入 在使用UART中間件所包含的部分API時(shí),用戶需以字符串形式輸入函數(shù)的入口參數(shù),參數(shù)都包含在字符串里。請(qǐng)看下面的示例:UART0初始化初始化(波特率波特率9600bps、8位數(shù)據(jù)位、位數(shù)據(jù)位、1位停止位、無校驗(yàn),無硬件流位停止位、無校驗(yàn),無硬件流)char cUartArg = “BaudRate=9600 DataBits=8 StopBits=1 Parity=0 RtsControl=0”;/* 定義參數(shù)字符串 */* 將參數(shù)字符串填入API */uartInit (UART0,

46、 cUartArg, NULL);、用戶根據(jù)“=”號(hào)前的關(guān)鍵字關(guān)鍵字,在“=”號(hào)后填寫對(duì)應(yīng)的數(shù)值數(shù)值;char cUartArg = “BaudRate=9600 DataBits=8 StopBits=1 Parity=0 RtsControl=0”;、每一個(gè)API的對(duì)應(yīng)關(guān)鍵字關(guān)鍵字都不同,用戶需要參考該函數(shù)的說明;此外,關(guān)鍵字是大小寫敏感的。、所以,小結(jié)一下。用戶根據(jù)函數(shù)說明,將填好參數(shù)的對(duì)應(yīng)將填好參數(shù)的對(duì)應(yīng)參數(shù)字符串送入函數(shù)參數(shù)字符串送入函數(shù)即可完成函數(shù)的參數(shù)配置了。這種配置方法大大提高了函數(shù)的兼容性和易用性。uartInit (UART0, cUartArg, NULL);UART中間

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

48、序設(shè)計(jì)使用導(dǎo)論使用導(dǎo)論 使用UART中間件配置UART中斷 用戶可能會(huì)需要利用UART中斷來完成自己的事務(wù)處理。為了滿足該需求,UART中間件提供了讓用戶自行添加中斷處理代碼的機(jī)制。用戶只要在uart.h里找到相應(yīng)的uart中斷服務(wù)函數(shù),在函數(shù)里添加自己的代碼即可。 以設(shè)置uart0的中斷服務(wù)函數(shù)為例,請(qǐng)看下圖: 由于接收中斷和發(fā)送中斷都是使用同一個(gè)中斷入口,所以用戶添加自定義中斷處理代碼時(shí)要注意添加的位置。UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)使用導(dǎo)論使用導(dǎo)論 UART中間件的應(yīng)用流程 現(xiàn)在已將應(yīng)用UART中間件前的預(yù)備知識(shí)介紹完畢,這里再給出UART中間件的應(yīng)用流程,給用戶

49、一個(gè)該軟件包應(yīng)用的整體印象。開始設(shè)置UART管腳配置中斷用中間件API編程用戶程序結(jié)束 使用UART前,須對(duì)管腳作設(shè)置,這部分的工作并沒有包括到中間件里; 由于UART中間件是使用中斷來進(jìn)行收發(fā),所以用戶需要初始化UART中斷,這部分的工作并沒有包括到中間件里;在作好相關(guān)的初始化工作后,用戶即可直接使用中間件里的API“組裝”應(yīng)用程序了。UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)使用導(dǎo)論使用導(dǎo)論2 簡介1 3中間件機(jī)理 使用導(dǎo)論UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)目錄目錄三、使用機(jī)理 為令用戶深入理解UART中間件的機(jī)制,此處對(duì)該中間件的幾個(gè)重要機(jī)制作一闡述: 數(shù)

50、據(jù)緩沖機(jī)制; 數(shù)據(jù)收發(fā)機(jī)制; UART中斷和UART任務(wù)的通訊。三個(gè)機(jī)制間的關(guān)系,可用下圖揭示:數(shù)據(jù)收發(fā)數(shù)據(jù)緩沖UART中斷p數(shù)據(jù)收發(fā)是在UART中斷里進(jìn)行的;p待收發(fā)的數(shù)據(jù)都先送到數(shù)據(jù)緩沖區(qū);這個(gè)過程也是在UART中斷里完成;UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)使用機(jī)理使用機(jī)理三、使用機(jī)理 為令用戶深入理解UART中間件的機(jī)制,此處對(duì)該中間件的幾個(gè)重要機(jī)制作一闡述: 數(shù)據(jù)緩沖機(jī)制; 數(shù)據(jù)收發(fā)機(jī)制; UART中斷和UART任務(wù)的通訊。三個(gè)機(jī)制間的關(guān)系,可用下圖揭示: UART中 斷p數(shù)據(jù)收發(fā)是在UART中斷里進(jìn)行的;p待收發(fā)的數(shù)據(jù)都先送到數(shù)據(jù)緩沖區(qū);這個(gè)過程也是在UART中斷

51、里完成; UART任 務(wù) 發(fā)送信號(hào)量p數(shù)據(jù)收發(fā)和數(shù)據(jù)緩沖處理都在中斷里進(jìn)行,當(dāng)這些工作處理完畢后,UART中斷須發(fā)送信號(hào)量通知UART任務(wù),相關(guān)工作已完成。UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)使用機(jī)理使用機(jī)理接下來,分別對(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ū)軟件緩沖

52、區(qū)UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)使用機(jī)理使用機(jī)理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ì)程序設(shè)計(jì)使用機(jī)理使用機(jī)理1、數(shù)據(jù)緩沖機(jī)制用戶也可以根據(jù)實(shí)際情況對(duì)數(shù)據(jù)緩沖區(qū)進(jìn)行配置: 軟件緩沖區(qū)的配置 用戶還可以配置軟件緩沖區(qū)內(nèi)接收/發(fā)送緩沖區(qū)的大小,以配置UART0為例,請(qǐng)看下面的演示: 直接修改這兩個(gè)數(shù)值的大小即可。但是,軟件接收緩沖區(qū)的大小建議配

53、置為接收FIFO觸發(fā)深度的整數(shù)倍。UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)使用機(jī)理使用機(jī)理2、數(shù)據(jù)收發(fā)機(jī)制 如前所述,在本中間件里,UART的數(shù)據(jù)收發(fā)皆是在UART中斷里進(jìn)行。下面分別介紹一下數(shù)據(jù)收發(fā)的過程: 數(shù)據(jù)接收 當(dāng)產(chǎn)生接收中斷或超時(shí)中斷時(shí),CPU通過查詢狀態(tài)寄存器,將所收到的數(shù)據(jù)全部轉(zhuǎn)移至軟件接收緩沖區(qū)。請(qǐng)看下圖:軟件FIFO硬件FIFO 接收數(shù)據(jù) 產(chǎn)生中斷 處理接收數(shù)據(jù)UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)使用機(jī)理使用機(jī)理 數(shù)據(jù)發(fā)送 先把要發(fā)送的所有數(shù)據(jù)放入軟件發(fā)送緩沖區(qū),然后再取出其中的第一個(gè)數(shù)據(jù)用查詢方式發(fā)送,從而觸發(fā)發(fā)送中斷;接下來,在發(fā)送中斷里,

54、軟件發(fā)送緩沖區(qū)內(nèi)剩余的數(shù)據(jù)也全部被發(fā)送完。相關(guān)的過程,請(qǐng)看下圖:軟件FIFO硬件FIFO 發(fā)送完一個(gè)字節(jié)后產(chǎn)生中斷,之后一直發(fā)送直至發(fā)送完畢 將待發(fā)送數(shù)據(jù)送入軟件FIFOUART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)使用機(jī)理使用機(jī)理3、UART中斷和任務(wù) 在UART中間件里,由于對(duì)軟件緩沖區(qū)的操作乃至數(shù)據(jù)的收發(fā)都是在UART中斷內(nèi)完成,所以必然面臨著UART中斷和任務(wù)間的協(xié)調(diào)問題。 前文已述及,UART中斷和UART任務(wù)是單向同步的關(guān)系,它們倆也各有分工: UART中斷負(fù)責(zé)完成底層的收發(fā)操作,并在收發(fā)操作完成時(shí),通知UART任務(wù); UART任務(wù)則根據(jù)UART中斷發(fā)送的信號(hào)量直接調(diào)用中間

55、件里的API完成應(yīng)用操作。所以,用戶可以不用了解底層操作細(xì)節(jié),而直接完成UART操作。UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)使用機(jī)理使用機(jī)理3、UART中斷和任務(wù) 以1個(gè)最簡單的UART收發(fā)操作為例,展示UART中斷和UART任務(wù)間的關(guān)系: 相關(guān)的初始化工作都已經(jīng)做好,令UART0收到上位機(jī)發(fā)來的數(shù)據(jù),然后再發(fā)送回去。這樣一個(gè)過程,是怎樣的?UART中斷UART任務(wù)、初始化后,等待信號(hào)量;、發(fā)生中斷;、發(fā)出信號(hào)量;、獲得信號(hào)量;、中斷返回;、讀取收到的數(shù)據(jù),然后發(fā)送。UART中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)使用機(jī)理使用機(jī)理21工程模板介紹工程模板介紹萬年歷萬年歷

56、數(shù)據(jù)采集系統(tǒng)數(shù)據(jù)采集系統(tǒng)UART中間件中間件 I2C中間件中間件345uC/OS-II目目 錄錄3 使用示例 4 小結(jié)2 使用導(dǎo)論I2C中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)目錄目錄 簡介1 I2C 總線 (Inter IC BUS)是Philips推出的芯片間串行傳輸總線,它以2根連線實(shí)現(xiàn)了完善的雙向數(shù)據(jù)傳送;并且,由于是通過軟件來尋址器件,I2C總線上的器件擴(kuò)展是靈活而方便的。 本I2C中間件支持C/OS-II操作系統(tǒng)和前后臺(tái)系統(tǒng)下,對(duì)LPC2000系列ARM的I2C總線進(jìn)行操作。 接下來,對(duì)I2C中間件的文件組成作一介紹:驅(qū)動(dòng)文件說 明I2c.cI2C中間件的實(shí)體。I2C中間件里

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

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

59、字節(jié)未發(fā)送或接收調(diào)用該函數(shù),將指定緩存內(nèi)指定長度的數(shù)據(jù)寫入指定地址中斷服務(wù)i2c0IRQi2c1IRQi2c2IRQ I2C0中斷服務(wù)函數(shù) I2C1中斷服務(wù)函數(shù) I2C2中斷服務(wù)函數(shù)。這些中斷服務(wù)函數(shù)都不支持中斷嵌套由上表可見,I2C中間件共包含三大功能模塊、9個(gè)API。I2C中間件中間件| C/OS-II程序設(shè)計(jì)程序設(shè)計(jì)簡介簡介接下來,介紹I2C中間件包括哪些API:功能函數(shù)名稱說 明參數(shù)設(shè)置i2cIniti2cSetMode用戶可調(diào)用該函數(shù),指定哪一個(gè)I2C設(shè)備要初始化,并指定該I2C設(shè)備的速率。指定I2C設(shè)備、初始化其速率;和i2cInit函數(shù)不同的是它不影響其它參數(shù)讀寫操作i2cRea

60、di2cGetFlagi2cGetRemainBytesi2cWrite調(diào)用該函數(shù),讀取指定地址內(nèi)指定長度的數(shù)據(jù)到指定緩存調(diào)用該函數(shù),讀取指定I2C設(shè)備的工作狀態(tài)調(diào)用該函數(shù),將指定緩存內(nèi)指定長度的數(shù)據(jù)寫入指定地址中斷服務(wù)i2c0IRQi2c1IRQi2c2IRQ I2C0中斷服務(wù)函數(shù) I2C1中斷服務(wù)函數(shù) I2C2中斷服務(wù)函數(shù)由上表可見,I2C中間件共包含三大功能模塊、9個(gè)API。使用I2C中間件也有一定的流程: I2C中間件只針對(duì)I2C部件進(jìn)行了操作,其它與系統(tǒng)相關(guān)的地方如管腳連接和中斷向量都需要單獨(dú)設(shè)置。中間件的一般使用流程,如下圖所示:開始選擇應(yīng)用環(huán)境,設(shè)置I2C管腳配置中斷用中間件API編程用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論