版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
μC/OS-II程序設(shè)計實例——基于SmartARM2200平臺1.21工程模板介紹萬年歷數(shù)據(jù)采集系統(tǒng)UART中間件I2C中間件345uC/OS-II目錄2.
工程模板簡介1
2示例實現(xiàn)工程模板應(yīng)用|μC/OS-II程序設(shè)計目錄3.工程模板應(yīng)用|μC/OS-II程序設(shè)計摸板結(jié)構(gòu)頭文件組內(nèi)核文件組用戶文件組ARM文件組主函數(shù)模板結(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ù)4.工程模板應(yīng)用|μC/OS-II程序設(shè)計頭文件組文件名功能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)移植而定義的.用戶在使用時可以根據(jù)自己的系統(tǒng)硬件配置和喜好進(jìn)行修改.在UC/OS工程摸板中主要包含六個頭文件,具體描述如下表所示:5.工程模板應(yīng)用|μC/OS-II程序設(shè)計ARM文件組
ARM文件組主要包含UC/OS配置文件和MiniARM2200加載和配置文件.主要包含六個文件,具體描述如下表所示:文件名功能Os_cpu_a.hUC/OS移植硬件配置文件Os_cpu_c.hUC/OS移植軟件配置文件Inchip.scf分散加載文件Startup.sLPC2200啟動代碼VIC_Control.s中斷向量控制機(jī)制文件Target.cLPC2200目標(biāo)板的硬件配置文件6.工程模板應(yīng)用|μC/OS-II程序設(shè)計用戶文件組用戶文件組主要包含main.h,main.c和os_cfg.h三個文件.前兩個文件有用戶自己編寫.os_cfg.h文件主要是實現(xiàn)操作系統(tǒng)的配置,用戶可以根據(jù)實際需要進(jìn)行裁剪.具體描述如下表所示:參數(shù)名功能描述OS_MAX_EVENTS最大事件控制塊個數(shù)OS_MAX_MEM_PART系統(tǒng)中內(nèi)存塊最大數(shù)目OS_MAX_QS消息隊列中最大隊列塊的數(shù)目OS_MAX_TASKS用戶程序中可以使用的最多任務(wù)數(shù)目OS_LOWEST_PRIO系統(tǒng)中要使用的最低任務(wù)的優(yōu)先級OS_TICKS_PER_SEC調(diào)用時間延時函數(shù)的頻率7.工程模板應(yīng)用|μC/OS-II程序設(shè)計摸板使用步驟拷貝工程摸板使用摸板建立新工程分為四個步驟.主要操作如下:用戶將光盤中的“ARMEXECUTABLEIMAGEFORUCOSLPC2200“文件拷貝到〞..\ARM\ADSV1.2\STATIONERY8.工程模板應(yīng)用|μC/OS-II程序設(shè)計摸板使用步驟將光盤摸板文件放進(jìn)Stationary目錄:9.打開ADS,選擇”新建”操作拷貝工程摸板
在ADS1.2的集成開發(fā)環(huán)境中選擇〞新建〞操作用戶將光盤中的“ARMEXECUTABLEIMAGEFORUCOSLPC2200“文件拷貝到〞..\ARM\ADSV1.2\STATIONERY工程模板應(yīng)用|μC/OS-II程序設(shè)計摸板使用步驟使用摸板建立新工程分為四個步驟.主要操作如下:10.工程模板應(yīng)用|μC/OS-II程序設(shè)計摸板使用步驟在ADS集成環(huán)境中選擇〞新建〞操作:11.打開ADS,選擇”新建”操作拷貝工程摸板選擇工程摸板建立新工程
在ADS1.2的集成開發(fā)環(huán)境中選擇〞新建〞操作用戶將光盤中的“ARMEXECUTABLEIMAGEFORUCOSLPC2200“文件拷貝到〞..\ARM\ADSV1.2\STATIONERY選擇工程摸板建立新工程工程模板應(yīng)用|μC/OS-II程序設(shè)計摸板使用步驟使用摸板建立新工程分為四個步驟.主要操作如下:12.工程模板應(yīng)用|μC/OS-II程序設(shè)計摸板使用步驟選擇工程摸板建立新工程:13.按照摸板生成新工程打開ADS,選擇”新建”操作拷貝工程摸板選擇工程摸板建立新工程
在ADS1.2的集成開發(fā)環(huán)境中選擇〞新建〞操作用戶將光盤中的“ARMEXECUTABLEIMAGEFORUCOSLPC2200“文件拷貝到〞..\ARM\ADSV1.2\STATIONERY選擇工程摸板建立新工程按照摸板生成一個新工程工程模板應(yīng)用|μC/OS-II程序設(shè)計摸板使用步驟使用摸板建立新工程分為四個步驟.主要操作如下:14.工程模板應(yīng)用|μC/OS-II程序設(shè)計摸板使用步驟按照摸板生成新工程:15.
工程模板簡介1
2示例實現(xiàn)工程模板應(yīng)用|μC/OS-II程序設(shè)計目錄16.工程模板應(yīng)用|μC/OS-II程序設(shè)計硬件連接摸板應(yīng)用例如是蜂鳴器控制,硬件連接如以下圖所示:蜂鳴器控制電路跳線連接17.工程模板應(yīng)用|μC/OS-II程序設(shè)計任務(wù)創(chuàng)立在應(yīng)用例如中,先按上面的流程建立工程TEST1.MCP.再在工程的主函數(shù)MAIN中建立任務(wù)TASK0,TASK0任務(wù)是初始化硬件.接著創(chuàng)立TASK1,TASK2,TASK3.TASK1,TASK2只是將任務(wù)掛起延時.TASK3任務(wù)實現(xiàn)蜂鳴器控制.任務(wù)之間聯(lián)系如以下圖所示:18.工程模板應(yīng)用|μC/OS-II程序設(shè)計任務(wù)創(chuàng)立MAIN函數(shù)TASK0TASK3TASK1TASK219.工程模板應(yīng)用|μC/OS-II程序設(shè)計任務(wù)流程例如中主函數(shù)和個任務(wù)的控制流程如下:20.工程模板應(yīng)用|μC/OS-II程序設(shè)計ISR任務(wù)例如中斷例如中先按上面流程創(chuàng)立新工程Timer1_int.mcp,再在主函數(shù)中創(chuàng)立任務(wù)TASK0和TASKBEEP,TASK0完成硬件初始化.TASKBEEP完成蜂鳴器信號量等待和操作.程序流程如下:21.下面以例如來說明如何現(xiàn)實ISR與任務(wù)間同步。假設(shè)定時器1中斷效勞程序發(fā)送信號量,任務(wù)完成了信號量的創(chuàng)立并在接收到信號量后讓蜂鳴器響一聲。處理流程如下。工程模板應(yīng)用|μC/OS-II程序設(shè)計ISR任務(wù)例如22.voidTimer1_Exception(void){T1IR=0x01;VICVectAddr=0;OSSemPost(sem);}更新中斷優(yōu)先級清除中斷標(biāo)志發(fā)送信號量中斷效勞程序ISR例如代碼如下。工程模板應(yīng)用|μC/OS-II程序設(shè)計ISR任務(wù)例如23.voidTaskBeep(void*pdata){……sem=OSSemCreate(0);OS_ENTER_CRITICAL(); /*初始化VIC(省略) *//*初始化定時器1(省略) *//*目標(biāo)板初始化TargeInit()(省略)*/OS_EXIT_CRITICAL();while(1){OSSemPend(sem,0,&err);IO0CLR=BEEP;OSTimeDly(60);IO0SET=BEEP;OSTimeDly(60); }}創(chuàng)建信號量初始化工作蜂鳴器響延時60個節(jié)拍蜂鳴器滅延時60個節(jié)拍進(jìn)入臨界段退出臨界段等待信號量讀者補(bǔ)出相應(yīng)的代碼蜂鳴器報警任務(wù)例如代碼如下。工程模板應(yīng)用|μC/OS-II程序設(shè)計ISR任務(wù)例如24.21工程模板介紹萬年歷數(shù)據(jù)采集系統(tǒng)UART中間件I2C中間件345uC/OS-II目錄25.ISR和任務(wù)之間的同步和通信2
任務(wù)間的同步與通信1數(shù)據(jù)采集系統(tǒng)|μC/OS-II程序設(shè)計目錄26.一、任務(wù)的同步
在實時操作系統(tǒng)中,任務(wù)和任務(wù)之間往往需要協(xié)調(diào)運行,這種協(xié)調(diào)關(guān)系,在日常生活里也是屢見不鮮的。為了說明這種協(xié)調(diào)關(guān)系,請看下面的演示:司機(jī)售票員啟動車輛關(guān)車門行駛售票1、什么是任務(wù)的同步?①
停車開車門③②
①、啟動車輛,踩油門就可以了;但實際上,你必須等車門關(guān)上了才可以啟動車輛。②、行駛和售票的行動互不干預(yù)、彼此獨立,此時不存在協(xié)調(diào)關(guān)系。③、開車門只要按下開關(guān)就可以了;但實際上,你得等司機(jī)停車才能開車門,否那么就出事故了。
由該演示可知,任務(wù)的同步,就是任務(wù)的協(xié)調(diào)運行,你一步、我一步地緊密協(xié)作:任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)任務(wù)的同步27.一、任務(wù)的同步
在實時操作系統(tǒng)中,任務(wù)和任務(wù)之間往往需要協(xié)調(diào)運行,這種協(xié)調(diào)關(guān)系,在日常生活里也是屢見不鮮的。為了說明這種協(xié)調(diào)關(guān)系,請看下面的演示:任務(wù)A
任務(wù)B1、什么是任務(wù)的同步?①、任務(wù)B運行一段時間后,發(fā)送信息讓任務(wù)A啟動,與此同時,任務(wù)B掛起。②、任務(wù)A獲得允許運行的信息后,立即啟動;完成操作后,發(fā)送信息告知任務(wù)B,任務(wù)B可以啟動并執(zhí)行接下來的操作。
在理解了“任務(wù)同步”的概念后,再來看看μC/OS-II實時操作系統(tǒng)所提供的用于實現(xiàn)“任務(wù)同步”的通信手段。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)任務(wù)的同步28.
μC/OS-II實時操作系統(tǒng)提供了以下通信手段,使某一任務(wù)得以向另一任務(wù)發(fā)送同步信息,從而實現(xiàn)任務(wù)同步:2、任務(wù)同步的通信手段
計數(shù)信號量;事件標(biāo)志組;消息郵箱;消息隊列。
靈活運用這些通信手段,可滿足不同的任務(wù)同步需求,請看表1:任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)任務(wù)的同步29.2、任務(wù)同步的通信手段任務(wù)同步的通信手段應(yīng)用場合計數(shù)信號量兩個任務(wù)的同步事件標(biāo)志組多個任務(wù)和一個任務(wù)間的同步消息郵箱兩個任務(wù)不但要同步;彼此間還要傳輸一份數(shù)據(jù)消息隊列兩個任務(wù)間不但要同步;彼此間還要傳輸大量數(shù)據(jù)表1不同同步手段的應(yīng)用場合由上表可知,任務(wù)和任務(wù)之間不僅可以發(fā)送用于協(xié)調(diào)步伐的“同步〞信息,也可以發(fā)送有效的數(shù)據(jù),實現(xiàn)真正意義的通信。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)任務(wù)的同步30.
在嵌入式系統(tǒng)的運行過程中,任務(wù)與任務(wù)之間必然伴隨著數(shù)據(jù)通信,這種通信可以采用多種方法來實現(xiàn):
二、任務(wù)的通信
全局變量;內(nèi)存數(shù)據(jù)塊;消息郵箱;消息隊列。
靈活運用這些不同的方法,可滿足不同的數(shù)據(jù)通信要求,請看表2:任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)任務(wù)的通信31.任務(wù)同步的通信手段應(yīng)用場合全局變量無行為同步要求時的少量數(shù)據(jù)通信。但需注意資源同步內(nèi)存數(shù)據(jù)塊無行為同步要求時的大量數(shù)據(jù)通信。但需注意資源同步消息郵箱有行為同步要求時的少量數(shù)據(jù)通信消息隊列有行為同步要求時的大量數(shù)據(jù)通信表2不同通信手段的應(yīng)用場合
二、任務(wù)的通信介紹完行為同步和通信的根本知識后,接下來再給出實例,以加深理解。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)任務(wù)的通信32.三、操作例如1、例如簡介
利用LPC2000系列ARM相關(guān)開發(fā)板上已有的資源,可以構(gòu)筑一個小型的數(shù)據(jù)采集系統(tǒng),如下所示:LPC2000系列ARM相關(guān)開發(fā)板串口線上位機(jī)例如的內(nèi)容是:按下開發(fā)板上的按鍵、令A(yù)RM芯片啟動A/D采樣;采樣結(jié)束后,再將采樣結(jié)果通過串口線發(fā)送到上位機(jī)顯示。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如33.2、例如里的任務(wù)在本例如內(nèi),劃分出了3個用戶任務(wù),相關(guān)信息如表3所示。任務(wù)的名稱任務(wù)的優(yōu)先級按鍵任務(wù)高采樣任務(wù)中顯示任務(wù)低表3任務(wù)信息
接下來,將以動畫的形式演示該數(shù)據(jù)采集系統(tǒng)的運轉(zhuǎn)流程,并在每一個運行階段加以講解。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如34.2、例如演示(1)初始階段三個任務(wù)的狀態(tài):按鍵任務(wù)在不停掃描按鍵,查詢是否有鍵按下;采樣任務(wù)完成一局部工作后掛起,等待按鍵任務(wù)發(fā)出啟動信號;顯示任務(wù)掛起,等待采樣任務(wù)發(fā)出啟動信號和顯示數(shù)據(jù)。按鍵任務(wù)采樣任務(wù)顯示任務(wù)掛起掛起不斷掃描任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如35.2、例如演示(2)啟動采樣
按鍵任務(wù)掃描到有按鍵按下,發(fā)出信號量。按鍵任務(wù)采樣任務(wù)顯示任務(wù)掛起掛起掃描到按鍵
采樣任務(wù)得到了信號量從而就緒,然后在接下來的任務(wù)調(diào)度中進(jìn)入運行狀態(tài),開始采樣。開始采樣
顯示任務(wù)仍在等待采樣任務(wù)發(fā)送啟動信號和采樣結(jié)果。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如36.2、例如演示(3)發(fā)送采樣結(jié)果按鍵任務(wù)繼續(xù)掃描按鍵。(此時假設(shè)掃描到按鍵,將在下一輪處理)。采樣任務(wù)顯示任務(wù)
采樣完畢,可以發(fā)送采樣結(jié)果了,于是發(fā)送消息到消息郵箱。顯示任務(wù)獲得了消息進(jìn)入就緒狀態(tài),然后在任務(wù)調(diào)度下獲得運行時機(jī),將收到的采樣結(jié)果發(fā)送到上位機(jī)。按鍵任務(wù)不斷掃描采樣結(jié)束啟動顯示開始采樣將采樣結(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ù)的運行,實現(xiàn)ISR和任務(wù)的同步。ISR和任務(wù)間的同步關(guān)系比較簡單,它們之間的關(guān)系是單向的。任務(wù)間的同步就不同了,可是單向亦可是雙向的。一、ISR和任務(wù)的同步ISR關(guān)聯(lián)任務(wù)同步信號發(fā)送任務(wù)同步信號發(fā)送任務(wù)同步信號發(fā)送、可以看出,ISR始終是控制者,關(guān)聯(lián)任務(wù)只能被控制;、可以看出,任務(wù)之間的同步里,某一任務(wù)可以是被控制者也可以是控制者。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)ISR和任務(wù)的同步40.ISR和任務(wù)間的通信手段包括信號型和數(shù)據(jù)型,兩種手段的應(yīng)用場合是不同的,請看表4。二、ISR和任務(wù)的通信通信方式特點信號型ISR發(fā)送信號量,指示事件已發(fā)生,觸發(fā)關(guān)聯(lián)任務(wù)的啟動,具體工作由關(guān)聯(lián)任務(wù)完成數(shù)據(jù)型ISR內(nèi)部還要進(jìn)行信息采集,然后通過消息郵箱或消息隊列,將數(shù)據(jù)信息發(fā)送給關(guān)聯(lián)任務(wù),并啟動關(guān)聯(lián)任務(wù)來處理后續(xù)數(shù)據(jù)表4信號型通信和數(shù)據(jù)型通信的比照
為了進(jìn)一步說明,接下來請看下面的實例演示。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)ISR和任務(wù)的通信41.三、實例演示1、例如簡介例如的內(nèi)容是:例如進(jìn)行時,蜂鳴器一直在間歇鳴叫;用戶按下板上的按鍵、觸發(fā)外部中斷;外部中斷再觸發(fā)“讀取ADC然后將采樣結(jié)果發(fā)送至上位機(jī)〞的操作。串口線上位機(jī)
利用LPC2000系列ARM相關(guān)開發(fā)板上已有的資源,可以構(gòu)筑一個小型的數(shù)據(jù)采集系統(tǒng),如下所示:LPC2000系列ARM相關(guān)開發(fā)板任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)ISR和任務(wù)的通信42.2、例如里的任務(wù)在本例如內(nèi),劃分出了2個用戶任務(wù),相關(guān)信息如表5所示。任務(wù)的名稱任務(wù)的優(yōu)先級蜂鳴任務(wù)中采樣和顯示任務(wù)高表5任務(wù)信息
接下來,將以動畫的形式演示該實例的運轉(zhuǎn)流程,并在每一個運行階段加以講解。任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如43.3、例如演示
這是外部中斷未發(fā)生時,用戶任務(wù)執(zhí)行的情況:采樣和顯示任務(wù)
初始化硬件
等待信號量蜂鳴器任務(wù)①、系統(tǒng)初始化
系統(tǒng)初始化時,先運行“采樣和顯示”任務(wù)。、等待信號量有效
由于此時信號量無效,采樣和發(fā)送任務(wù)掛起,CPU控制權(quán)交給其它就緒任務(wù)。、蜂鳴器任務(wù)啟動
此時優(yōu)先級最高的就緒任務(wù)是蜂鳴器任務(wù),于是蜂鳴器任務(wù)啟動。③蜂鳴器間歇鳴叫任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如44.3、例如演示
這是外部中斷發(fā)生時,用戶任務(wù)執(zhí)行的情況:采樣和顯示任務(wù)
初始化硬件
等待信號量蜂鳴器任務(wù)、發(fā)生外部中斷
外部中斷發(fā)生。蜂鳴器任務(wù)被中斷。、ISR發(fā)送信號量“采樣和顯示任務(wù)”獲得了信號量,立即進(jìn)入就緒狀態(tài),由于該任務(wù)優(yōu)先級最高,于是立即運行。、回復(fù)到初始狀態(tài)
發(fā)送完采樣結(jié)果后,繼續(xù)等待下一個外部中斷,蜂鳴器任務(wù)又開始運行。蜂鳴器間歇鳴叫③發(fā)生外部中斷
發(fā)送采樣結(jié)果任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如45.3、例如演示
這是外部中斷發(fā)生時,用戶任務(wù)執(zhí)行的情況:采樣和顯示任務(wù)
初始化硬件
等待信號量蜂鳴器任務(wù)、發(fā)生外部中斷
外部中斷發(fā)生。蜂鳴器任務(wù)被中斷。、ISR發(fā)送信號量“采樣和顯示任務(wù)”獲得了信號量,立即進(jìn)入就緒狀態(tài),由于該任務(wù)優(yōu)先級最高,于是立即運行。、回復(fù)到初始狀態(tài)
發(fā)送完采樣結(jié)果后,繼續(xù)等待下一個外部中斷,蜂鳴器任務(wù)又開始運行。蜂鳴器間歇鳴叫③發(fā)生外部中斷
發(fā)送采樣結(jié)果任務(wù)的同步和通信|數(shù)據(jù)采集系統(tǒng)操作例如46.21工程模板介紹萬年歷數(shù)據(jù)采集系統(tǒng)UART中間件I2C中間件345uC/OS-II目錄47.例如簡介1
2示例的實現(xiàn)萬年歷|μC/OS-II程序設(shè)計目錄48.一、例如簡介
在這里,通過一個萬年歷的設(shè)計,來說明μC/OS-II下程序設(shè)計的方法:
利用LPC2000系列ARM相關(guān)的開發(fā)板和EasyARM串口調(diào)試軟件(自帶一個萬年歷界面)來實現(xiàn)一個具有以下功能的萬年歷:
實時顯示:不斷顯示當(dāng)前的年月日星期、時間信息;時間設(shè)置:可設(shè)置萬年歷的時鐘和年月日信息(星期信息自動調(diào)整),完成設(shè)置后,可更新顯示。、開始重設(shè)年份;、設(shè)置完后,恢復(fù)顯示。、2007年被重設(shè)為3007年,此時星期自動完成了調(diào)整;EasyARM串口調(diào)試軟件自帶的萬年歷界面接下來,是一個動畫演示。它直接表現(xiàn)了最終的萬年歷效果,這有助于讓讀者迅速理解例如須達(dá)成的任務(wù)。萬年歷|μC/OS-II程序設(shè)計例如簡介49.
示例簡介1
2示例的實現(xiàn)萬年歷|μC/OS-II程序設(shè)計目錄50.二、例如的實現(xiàn)1、功能劃分控制顯示時間信息產(chǎn)生時間信息從功能來劃分,可把例如分成3個模塊,請看以下圖:“控制〞通過操作開發(fā)板上的按鍵,實現(xiàn):“實時顯示〞和“時間設(shè)置〞功能的切換;“時間設(shè)置〞。萬年歷|μC/OS-II程序設(shè)計例如的實現(xiàn)51.二、例如的實現(xiàn)1、功能劃分控制顯示時間信息產(chǎn)生時間信息從功能來劃分,可把例如分成3個模塊,請看以下圖:“產(chǎn)生時間信息〞操作開發(fā)板上LPC2000系列ARM芯片自帶的RTC,即可產(chǎn)生時間信息,用于填充萬年歷。萬年歷|μC/OS-II程序設(shè)計例如的實現(xiàn)52.二、例如的實現(xiàn)1、功能劃分控制顯示時間信息產(chǎn)生時間信息從功能來劃分,可把例如分成3個模塊,請看以下圖:“顯示時間〞通過板上的UART,按照協(xié)議將信息發(fā)送至EasyARM串口調(diào)試軟件,軟件上的萬年歷即可顯示出此時的時間信息。不斷發(fā)送實時時間信息,那么萬年歷會不斷顯示。萬年歷|μC/OS-II程序設(shè)計例如的實現(xiàn)53.二、例如的實現(xiàn)2、任務(wù)設(shè)計
根據(jù)上面劃分出的功能模塊實現(xiàn)需求,任務(wù)可以劃分為:
設(shè)置任務(wù);
鍵盤任務(wù);
顯示任務(wù)。周期性地執(zhí)行。完成目標(biāo)板和RTC的初始化操作,之后創(chuàng)立“設(shè)置任務(wù)〞和“顯示任務(wù)〞,隨后周期性地查詢鍵盤輸入,當(dāng)有鍵按下,那么進(jìn)行按鍵處理。萬年歷|μC/OS-II程序設(shè)計例如的實現(xiàn)54.二、例如的實現(xiàn)2、任務(wù)設(shè)計
根據(jù)上面劃分出的功能模塊實現(xiàn)需求,任務(wù)可以劃分為:
設(shè)置任務(wù);
鍵盤任務(wù);
顯示任務(wù)。周期性地執(zhí)行。完成目標(biāo)板和RTC的初始化操作,之后創(chuàng)立“設(shè)置任務(wù)〞和“顯示任務(wù)〞,隨后周期性地查詢鍵盤輸入,當(dāng)有鍵按下,那么進(jìn)行按鍵處理。接收到按鍵消息后才運行。啟動后,根據(jù)收到的按鍵信息設(shè)置時間,并閃爍顯示待設(shè)置位,未收到消息那么掛起。萬年歷|μC/OS-II程序設(shè)計例如的實現(xiàn)55.二、例如的實現(xiàn)2、任務(wù)設(shè)計
根據(jù)上面劃分出的功能模塊實現(xiàn)需求,任務(wù)可以劃分為:
設(shè)置任務(wù);
鍵盤任務(wù);
顯示任務(wù)。周期性地執(zhí)行。完成目標(biāo)板和RTC的初始化操作,之后創(chuàng)立“設(shè)置任務(wù)〞和“顯示任務(wù)〞,隨后周期性地查詢鍵盤輸入,當(dāng)有鍵按下,那么進(jìn)行按鍵處理。接收到按鍵消息后才運行。啟動后,根據(jù)收到的按鍵信息設(shè)置時間,并閃爍顯示待設(shè)置位,未收到消息那么掛起。
每過1秒,由RTC秒中斷觸發(fā)該任務(wù)的運行。該任務(wù)啟動后便將當(dāng)前的RTC數(shù)據(jù)通過UART發(fā)送至上位機(jī)的萬年歷界面進(jìn)行實時顯示。萬年歷|μC/OS-II程序設(shè)計例如的實現(xiàn)56.鍵盤任務(wù)3、任務(wù)運行演示為了說明三個任務(wù)的狀態(tài)轉(zhuǎn)換過程,設(shè)計了兩個動畫演示。演示分為兩局部。第一局部,是按鍵未按下時,三大任務(wù)的狀態(tài)轉(zhuǎn)換過程:初始化目標(biāo)板和RTC;
0%100%萬年歷|μC/OS-II程序設(shè)計例如的實現(xiàn)57.3、任務(wù)運行演示為了說明三個任務(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è)計例如的實現(xiàn)58.3、任務(wù)運行演示為了說明三個任務(wù)的狀態(tài)轉(zhuǎn)換過程,設(shè)計了兩個動畫演示。演示分為兩局部。第一局部,是按鍵未按下時,三大任務(wù)的狀態(tài)轉(zhuǎn)換過程:鍵盤任務(wù)初始化目標(biāo)板和RTC;創(chuàng)立設(shè)置任務(wù)和顯示任務(wù);鍵盤任務(wù)設(shè)置任務(wù)顯示任務(wù)查詢是否有按鍵輸入;在查詢按鍵輸入期間,設(shè)置任務(wù)和顯示任務(wù)都可以得到運行時機(jī),完成局部工作。、初始化局部變量后,檢查是否收到鍵盤消息。、等待信號量,掛起。萬年歷|μC/OS-II程序設(shè)計例如的實現(xiàn)59.3、任務(wù)運行演示為了說明三個任務(wù)的狀態(tài)轉(zhuǎn)換過程,設(shè)計了兩個動畫演示。演示分為兩局部。第一局部,是按鍵未按下時,三大任務(wù)的狀態(tài)轉(zhuǎn)換過程:鍵盤任務(wù)初始化目標(biāo)板和RTC;創(chuàng)立設(shè)置任務(wù)和顯示任務(wù);鍵盤任務(wù)設(shè)置任務(wù)顯示任務(wù)查詢是否有按鍵輸入;、初始化局部變量后,檢查是否收到鍵盤消息。、等待信號量,掛起。發(fā)生秒中斷在中斷里發(fā)送信號量給顯示任務(wù),顯示任務(wù)就緒,開始發(fā)送時間信息到上位機(jī),更新萬年歷的顯示。、發(fā)送時間信息。萬年歷|μC/OS-II程序設(shè)計例如的實現(xiàn)60.3、任務(wù)運行演示
按鍵按下時,任務(wù)的轉(zhuǎn)換過程如下所示:鍵盤任務(wù)初始化目標(biāo)板和RTC;創(chuàng)立設(shè)置任務(wù)和顯示任務(wù);鍵盤任務(wù)設(shè)置任務(wù)顯示任務(wù)查詢是否有按鍵輸入;、初始化局部變量后,檢查是否收到鍵盤消息。、等待信號量,掛起。查到有按鍵輸入,發(fā)送按鍵消息。萬年歷|μC/OS-II程序設(shè)計例如的實現(xiàn)61.3、任務(wù)運行演示
按鍵按下時,任務(wù)的轉(zhuǎn)換過程如下所示:鍵盤任務(wù)初始化目標(biāo)板和RTC;創(chuàng)立設(shè)置任務(wù)和顯示任務(wù);鍵盤任務(wù)設(shè)置任務(wù)顯示任務(wù)查詢是否有按鍵輸入;、初始化局部變量后,檢查是否收到鍵盤消息。、等待信號量,掛起。查到有按鍵輸入,發(fā)送按鍵消息。、根據(jù)鍵盤消息進(jìn)行處理。
令被設(shè)置位閃爍顯示;同時,根據(jù)消息內(nèi)的設(shè)置信息設(shè)定新的時間。之后,在秒中斷發(fā)生時,更新的時間信息被發(fā)送到上位機(jī)。發(fā)生秒中斷、發(fā)送時間信息。萬年歷|μC/OS-II程序設(shè)計例如的實現(xiàn)62.21工程模板介紹萬年歷數(shù)據(jù)采集系統(tǒng)UART中間件I2C中間件345uC/OS-II目錄63.2
簡介1
3中間件機(jī)理
使用導(dǎo)論UART中間件|μC/OS-II程序設(shè)計目錄64.
一、UART中間件簡介嵌入式應(yīng)用中,UART十分常見,大多數(shù)CPU都集成了UART。LPC2000系列ARMUART中間件是UART驅(qū)動軟件包,用戶可用它在μC/OS-II下輕松、便利地完成LPC2000系列ARM上的UART操作而無須了解UART存放器的細(xì)節(jié)。關(guān)于UART中間件帶來的操作便利性,請看下面的一個演示,該演示展示了在“使用UART中間件〞和“不使用UART中間件〞這兩種情況下,用戶的開發(fā)流程,借此展示使用UART中間件編程帶來的好處。開始播放請點擊UART中間件|μC/OS-II程序設(shè)計UART中間件簡介65.開始開始翻閱用戶手冊,閱讀UART的存放器結(jié)構(gòu)確定本次操作所需涉及的存放器閱讀涉及存放器的位功能說明寫程序,試探程序思路是否可靠、正確反復(fù)調(diào)試、摸索獲得初始版本,完成操作(以后可能還會出問題)結(jié)束瀏覽PPT,迅速理解概況和根本知識閱讀中間件的API說明,了解API的用法用中間件API編程直接調(diào)試程序,無須考慮底層細(xì)節(jié)結(jié)束自己編寫UART驅(qū)動直接用中間件編程UART中間件|μC/OS-II程序設(shè)計UART中間件簡介66.小結(jié):
由上面的演示可以看出,使用UART中間件,有助于大大加快開發(fā)速度,提高編程效率,同時令用戶程序更穩(wěn)定可靠、更容易調(diào)試。UART中間件|μC/OS-II程序設(shè)計UART中間件簡介67.UART中間件結(jié)構(gòu):
按照API功能的不同,UART中間件的結(jié)構(gòu)可顯示如下:隊列操作UART讀寫UART配置UART中斷入口UART中間件功能類型函數(shù)名稱函數(shù)功能UART配置相關(guān)uartInitUART初始化uartSetMode/uartGetState配置UART的參數(shù)/讀取UART當(dāng)前的配置信息UART中間件|μC/OS-II程序設(shè)計UART中間件簡介68.隊列操作UART讀寫UART中斷入口UART中間件結(jié)構(gòu):
按照API功能的不同,UART中間件的結(jié)構(gòu)可顯示如下:UART配置UART中間件功能類型函數(shù)名稱函數(shù)功能
UART
隊列操作相關(guān)uartFifoStatus獲取UART的隊列狀態(tài)uartFifoFlush清空UART的發(fā)送或接收隊列UART中間件|μC/OS-II程序設(shè)計UART中間件簡介69.隊列操作UART讀寫UART中斷入口UART中間件結(jié)構(gòu):
按照API功能的不同,UART中間件的結(jié)構(gòu)可顯示如下:UART配置UART中間件功能類型函數(shù)名稱函數(shù)功能
UART
讀寫操作相關(guān)uartRead從串口設(shè)備讀數(shù)據(jù)uartWrite/uartDirectWrite向串口設(shè)備寫數(shù)據(jù)/不經(jīng)軟件緩沖區(qū)而直接向串口設(shè)備寫數(shù)據(jù)UART中間件|μC/OS-II程序設(shè)計UART中間件簡介70.隊列操作UART讀寫UART中斷入口UART中間件結(jié)構(gòu):
按照API功能的不同,UART中間件的結(jié)構(gòu)可顯示如下:UART設(shè)置UART中間件功能類型函數(shù)名稱函數(shù)功能UART
中斷入口函數(shù)uart0Isr/uart1Isr/uart2Isr/uart3Isr各個UART的中斷入口UART中間件|μC/OS-II程序設(shè)計UART中間件簡介71.小結(jié):
UART中間件有四大功能模塊,由一共12個API組成。詳細(xì)的API信息,請用戶閱讀隨機(jī)贈送的參考書及光盤。UART中間件|μC/OS-II程序設(shè)計UART中間件簡介72.2
簡介1
3中間件機(jī)理
使用導(dǎo)論UART中間件|μC/OS-II程序設(shè)計目錄73.二、使用導(dǎo)論
在使用UART中間件進(jìn)行編程前,有必要知道一些預(yù)備知識。本小節(jié)即對這些預(yù)備知識進(jìn)行介紹:
裝載UART中間件須知UART中間件的重要使用細(xì)節(jié)幾那么UART中間件的一般應(yīng)用流程UART中間件的文件組成;UART中間件所需的其它軟件包;
隊列在UART中間件里的應(yīng)用;UART中間件API的參數(shù)輸入;
使用UART中間件配置UART中斷;UART中間件的應(yīng)用流程。UART中間件|μC/OS-II程序設(shè)計使用導(dǎo)論74.UART中間件的文件組成UART中間件是由2個文件組成,請看下表:驅(qū)動文件說明uart.c該文件包含所有的UARTAPI源碼,用戶請不要修改此文件uart.hUART驅(qū)動頭文件,用戶在此文件里完成對軟件/硬件緩沖區(qū)的配置和中斷服務(wù)程序的撰寫
在使用UART中間件時,須將這兩個文件加入工程,請看下圖:UART中間件|μC/OS-II程序設(shè)計使用導(dǎo)論75.UART中間件所需的其它軟件包UART中間件要發(fā)揮作用,還需要其它軟件包的支持,即隊列和字符串處理軟件包QueueString,請看左下的圖示:
為什么需要這個軟件包呢?UART中間件用到了隊列來收發(fā)數(shù)據(jù),所以需要隊列軟件來支持;
UART中間件的API參數(shù)設(shè)置是通過分析用戶輸入的字符串來實現(xiàn)的,所以需要字符串處理軟件。UART中間件|μC/OS-II程序設(shè)計使用導(dǎo)論76.UART中間件API的參數(shù)輸入在使用UART中間件所包含的局部API時,用戶需以字符串形式輸入函數(shù)的入口參數(shù),參數(shù)都包含在字符串里。請看下面的例如:UART0初始化(波特率9600bps、8位數(shù)據(jù)位、1位停止位、無校驗,無硬件流)charcUartArg[]=“BaudRate=9600DataBits=8StopBits=1Parity=0RtsControl=0〞;/*定義參數(shù)字符串*//*將參數(shù)字符串填入API*/uartInit(UART0,cUartArg,NULL);、用戶根據(jù)“=〞號前的關(guān)鍵字,在“=〞號后填寫對應(yīng)的數(shù)值;charcUartArg[]=“BaudRate=9600DataBits=8StopBits=1Parity=0RtsControl=0〞;charcUartArg[]=“BaudRate=9600DataBits=8StopBits=1Parity=0RtsControl=0〞;UART中間件|μC/OS-II程序設(shè)計使用導(dǎo)論77.UART中間件API的參數(shù)輸入在使用UART中間件所包含的局部API時,用戶需以字符串形式輸入函數(shù)的入口參數(shù),參數(shù)都包含在字符串里。請看下面的例如:UART0初始化(波特率9600bps、8位數(shù)據(jù)位、1位停止位、無校驗,無硬件流)charcUartArg[]=“BaudRate=9600DataBits=8StopBits=1Parity=0RtsControl=0〞;/*定義參數(shù)字符串*//*將參數(shù)字符串填入API*/uartInit(UART0,cUartArg,NULL);、用戶根據(jù)“=〞號前的關(guān)鍵字,在“=〞號后填寫對應(yīng)的數(shù)值;charcUartArg[]=“BaudRate=9600DataBits=8StopBits=1Parity=0RtsControl=0〞;、每一個API的對應(yīng)關(guān)鍵字都不同,用戶需要參考該函數(shù)的說明;此外,關(guān)鍵字是大小寫敏感的。、所以,小結(jié)一下。用戶根據(jù)函數(shù)說明,將填好參數(shù)的對應(yīng)參數(shù)字符串送入函數(shù)即可完成函數(shù)的參數(shù)配置了。這種配置方法大大提高了函數(shù)的兼容性和易用性。uartInit(UART0,cUartArg,NULL);UART中間件|μC/OS-II程序設(shè)計使用導(dǎo)論78.
隊列在UART中間件里的應(yīng)用UART中間件可對硬件緩沖區(qū)和軟件緩沖區(qū)進(jìn)行操作。其中,軟件緩沖區(qū)是通過中間件里的隊列軟件包,抽取處理器自身的局部RAM資源進(jìn)行管理而實現(xiàn)的。通過隊列軟件包管理的軟件緩沖區(qū),可以大大提高UART通訊的可靠性。當(dāng)OS有更重要的任務(wù)要處理,那么UART須收發(fā)的數(shù)據(jù)可暫時保存在軟件緩沖區(qū)里,這樣就不會造成數(shù)據(jù)喪失。請看演示:其它事務(wù)軟件緩沖區(qū)_接收緩存開始處理數(shù)據(jù)在處理其它事務(wù)時,UART仍通過中斷將接收的數(shù)據(jù)轉(zhuǎn)移至緩沖區(qū)等待處理UART中間件|μC/OS-II程序設(shè)計使用導(dǎo)論79.
使用UART中間件配置UART中斷用戶可能會需要利用UART中斷來完成自己的事務(wù)處理。為了滿足該需求,UART中間件提供了讓用戶自行添加中斷處理代碼的機(jī)制。用戶只要在uart.h里找到相應(yīng)的uart中斷效勞函數(shù),在函數(shù)里添加自己的代碼即可。以設(shè)置uart0的中斷效勞函數(shù)為例,請看以下圖:
由于接收中斷和發(fā)送中斷都是使用同一個中斷入口,所以用戶添加自定義中斷處理代碼時要注意添加的位置。UART中間件|μC/OS-II程序設(shè)計使用導(dǎo)論80.UART中間件的應(yīng)用流程
現(xiàn)在已將應(yīng)用UART中間件前的預(yù)備知識介紹完畢,這里再給出UART中間件的應(yīng)用流程,給用戶一個該軟件包應(yīng)用的整體印象。開始設(shè)置UART管腳配置中斷用中間件API編程用戶程序結(jié)束使用UART前,須對管腳作設(shè)置,這局部的工作并沒有包括到中間件里;由于UART中間件是使用中斷來進(jìn)行收發(fā),所以用戶需要初始化UART中斷,這局部的工作并沒有包括到中間件里;在作好相關(guān)的初始化工作后,用戶即可直接使用中間件里的API“組裝〞應(yīng)用程序了。UART中間件|μC/OS-II程序設(shè)計使用導(dǎo)論81.2
簡介1
3中間件機(jī)理
使用導(dǎo)論UART中間件|μC/OS-II程序設(shè)計目錄82.三、使用機(jī)理
為令用戶深入理解UART中間件的機(jī)制,此處對該中間件的幾個重要機(jī)制作一闡述:
數(shù)據(jù)緩沖機(jī)制;
數(shù)據(jù)收發(fā)機(jī)制;UART中斷和UART任務(wù)的通訊。三個機(jī)制間的關(guān)系,可用以下圖揭示:數(shù)據(jù)收發(fā)數(shù)據(jù)緩沖UART中斷數(shù)據(jù)收發(fā)是在UART中斷里進(jìn)行的;待收發(fā)的數(shù)據(jù)都先送到數(shù)據(jù)緩沖區(qū);這個過程也是在UART中斷里完成;UART中間件|μC/OS-II程序設(shè)計使用機(jī)理83.三、使用機(jī)理
為令用戶深入理解UART中間件的機(jī)制,此處對該中間件的幾個重要機(jī)制作一闡述:
數(shù)據(jù)緩沖機(jī)制;
數(shù)據(jù)收發(fā)機(jī)制;UART中斷和UART任務(wù)的通訊。三個機(jī)制間的關(guān)系,可用以下圖揭示:UART中斷數(shù)據(jù)收發(fā)是在UART中斷里進(jìn)行的;待收發(fā)的數(shù)據(jù)都先送到數(shù)據(jù)緩沖區(qū);這個過程也是在UART中斷里完成;
UART任務(wù)
發(fā)送信號量數(shù)據(jù)收發(fā)和數(shù)據(jù)緩沖處理都在中斷里進(jìn)行,當(dāng)這些工作處理完畢后,UART中斷須發(fā)送信號量通知UART任務(wù),相關(guān)工作已完成。UART中間件|μC/OS-II程序設(shè)計使用機(jī)理84.接下來,分別對各機(jī)制作一些詳細(xì)的介紹:1、數(shù)據(jù)緩沖機(jī)制在UART中間件的使用中,存在著硬件緩沖區(qū)和軟件緩沖區(qū)兩個概念。硬件緩沖區(qū)是UART自身所配備的FIFO存放器,而軟件緩沖區(qū)占用的是處理器的內(nèi)部RAM資源。
軟件緩沖區(qū)的存在,構(gòu)成了對硬件緩沖區(qū)的擴(kuò)展,有助于UART通訊可靠性的進(jìn)一步提高。LPC2xxx系列ARMUART……片內(nèi)RAMFIFO寄存器硬件緩沖區(qū)軟件緩沖區(qū)UART中間件|μC/OS-II程序設(shè)計使用機(jī)理85.1、數(shù)據(jù)緩沖機(jī)制用戶也可以根據(jù)實際情況對數(shù)據(jù)緩沖區(qū)進(jìn)行配置:
硬件緩沖區(qū)的配置
用戶可以配置接收FIFO的觸發(fā)深度,以配置UART0接收FIFO的觸發(fā)深度為8為例,請看下面的演示:★設(shè)置UART0的接收FIFO觸發(fā)深度為8個字節(jié)UART中間件|μC/OS-II程序設(shè)計使用機(jī)理86.1、數(shù)據(jù)緩沖機(jī)制用戶也可以根據(jù)實際情況對數(shù)據(jù)緩沖區(qū)進(jìn)行配置:
軟件緩沖區(qū)的配置
用戶還可以配置軟件緩沖區(qū)內(nèi)接收/發(fā)送緩沖區(qū)的大小,以配置UART0為例,請看下面的演示:
直接修改這兩個數(shù)值的大小即可。但是,軟件接收緩沖區(qū)的大小建議配置為接收FIFO觸發(fā)深度的整數(shù)倍。UART中間件|μC/OS-II程序設(shè)計使用機(jī)理87.2、數(shù)據(jù)收發(fā)機(jī)制
如前所述,在本中間件里,UART的數(shù)據(jù)收發(fā)皆是在UART中斷里進(jìn)行。下面分別介紹一下數(shù)據(jù)收發(fā)的過程:
數(shù)據(jù)接收當(dāng)產(chǎn)生接收中斷或超時中斷時,CPU通過查詢狀態(tài)存放器,將所收到的數(shù)據(jù)全部轉(zhuǎn)移至軟件接收緩沖區(qū)。請看以下圖:軟件FIFO硬件FIFO
接收數(shù)據(jù)
產(chǎn)生中斷
處理接收數(shù)據(jù)UART中間件|μC/OS-II程序設(shè)計使用機(jī)理88.
數(shù)據(jù)發(fā)送先把要發(fā)送的所有數(shù)據(jù)放入軟件發(fā)送緩沖區(qū),然后再取出其中的第一個數(shù)據(jù)用查詢方式發(fā)送,從而觸發(fā)發(fā)送中斷;接下來,在發(fā)送中斷里,軟件發(fā)送緩沖區(qū)內(nèi)剩余的數(shù)據(jù)也全部被發(fā)送完。相關(guān)的過程,請看以下圖:軟件FIFO硬件FIFO
發(fā)送完一個字節(jié)后產(chǎn)生中斷,之后一直發(fā)送直至發(fā)送完畢
將待發(fā)送數(shù)據(jù)送入軟件FIFOUART中間件|μC/OS-II程序設(shè)計使用機(jī)理89.3、UART中斷和任務(wù)
在UART中間件里,由于對軟件緩沖區(qū)的操作乃至數(shù)據(jù)的收發(fā)都是在UART中斷內(nèi)完成,所以必然面臨著UART中斷和任務(wù)間的協(xié)調(diào)問題。
前文已述及,UART中斷和UART任務(wù)是單向同步的關(guān)系,它們倆也各有分工:UART中斷負(fù)責(zé)完成底層的收發(fā)操作,并在收發(fā)操作完成時,通知UART任務(wù);UART任務(wù)那么根據(jù)UART中斷發(fā)送的信號量直接調(diào)用中間件里的API完成應(yīng)用操作。所以,用戶可以不用了解底層操作細(xì)節(jié),而直接完成UART操作。UART中間件|μC/OS-II程序設(shè)計使用機(jī)理90.3、UART中斷和任務(wù)
以1個最簡單的UART收發(fā)操作為例,展示UART中斷和UART任務(wù)間的關(guān)系:
相關(guān)的初始化工作都已經(jīng)做好,令UART0收到上位機(jī)發(fā)來的數(shù)據(jù),然后再發(fā)送回去。這樣一個過程,是怎樣的?UART中斷UART任務(wù)、初始化后,等待信號量;、發(fā)生中斷;、發(fā)出信號量;、獲得信號量;、中斷返回;、讀取收到的數(shù)據(jù),然后發(fā)送。UART中間件|μC/OS-II程序設(shè)計使用機(jī)理91.21工程模板介紹萬年歷數(shù)據(jù)采集系統(tǒng)UART中間件I2C中間件345uC/OS-II目錄92.3
使用示例
4
小結(jié)2
使用導(dǎo)論I2C中間件|μC/OS-II程序設(shè)計目錄
簡介193.I2C總線(InterICBUS)是Philips推出的芯片間串行傳輸總線,它以2根連線實現(xiàn)了完善的雙向數(shù)據(jù)傳送;并且,由于是通過軟件來尋址器件,I2C總線上的器件擴(kuò)展是靈活而方便的。
本I2C中間件支持μC/OS-II操作系統(tǒng)和前后臺系統(tǒng)下,對LPC2000系列ARM的I2C總線進(jìn)行操作。
接下來,對I2C中間件的文件組成作一介紹:驅(qū)動文件說明I2c.cI2C中間件的實體。I2C中間件里各API的源碼都在該文件內(nèi)I2c.hI2C中間件的用戶接口I2cPrivate.hI2c.c的私有頭文件。也是中間件的又一個用戶接口,可在內(nèi)部選擇驅(qū)動的應(yīng)用環(huán)境I2cHook.c鉤子函數(shù)文件。I2CISR會調(diào)用該文件內(nèi)的函數(shù),而這些函數(shù)的函數(shù)體可由用戶自定I2cHook.hI2cHook.c的頭文件。被I2c.c包含,用戶無須關(guān)注I2C中間件|μC/OS-II程序設(shè)計簡介94.I2C總線(InterICBUS)是Philips推出的芯片間串行傳輸總線,它以2根連線實現(xiàn)了完善的全雙工同步數(shù)據(jù)傳送;并且,由于是通過軟件來尋址器件,I2C總線上的器件擴(kuò)展是靈活而方便的。
本I2C中間件支持μC/OS-II操作系統(tǒng)和前后臺系統(tǒng)下,對LPC2000系列ARM的I2C總線進(jìn)行操作。各頭文件的包含關(guān)系那么如下所示:接下來,介紹I2C中間件包括哪些API:功能函數(shù)名稱說明參數(shù)設(shè)置i2cIniti2cSetMode用戶可調(diào)用該函數(shù),指定哪一個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è)備還有多少字節(jié)未發(fā)送或接收調(diào)用該函數(shù),將指定緩存內(nèi)指定長度的數(shù)據(jù)寫入指定地址中斷服務(wù)i2c0IRQi2c1IRQi2c2IRQI2C0中斷服務(wù)函數(shù)
I2C1中斷服務(wù)函數(shù)
I2C2中斷服務(wù)函數(shù)。這些中斷服務(wù)函數(shù)都不支持中斷嵌套由上表可見,I2C中間件共包含三大功能模塊、9個API。I2C中間件|μC/OS-II程序設(shè)計簡介95.接下來,介紹I2C中間件包括哪些API:功能函數(shù)名稱說明參數(shù)設(shè)置i2cIniti2cSetMode用戶可調(diào)用該函數(shù),指定哪一個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ù),將指定緩存內(nèi)指定長度的數(shù)據(jù)寫入指定地址中斷服務(wù)i2c0IRQi2c1IRQi2c2IRQI2C0中斷服務(wù)函數(shù)
I2C1中斷服務(wù)函數(shù)
I2C2中斷服務(wù)函數(shù)由上表可見,I2C中間件共包含三大功能模塊、9個API。使用I2C中間件也有一定的流程:I2C中間件只針對I2C部件進(jìn)行了操作,其它與系統(tǒng)相關(guān)的地方如管腳連接和中斷向量都需要單獨設(shè)置。中間件的一般使用流程,如以下圖所示:開始選擇應(yīng)用環(huán)境,設(shè)置I2C管腳配置中斷用中間件API編程用戶程序結(jié)束
使用I2C中間件前,須設(shè)置管腳;此外還要選擇應(yīng)用環(huán)境,一般默認(rèn)為在μC/OS-II下;
由于I2C中間件是使用中斷來進(jìn)行收發(fā),所以用戶需要初始化I2C中斷,這部分的工作并沒有包括到中間件里;在作好相關(guān)的初始化工作后,用戶即可直接使用中間件里的API“組裝”應(yīng)用程序了。I2C中間件|μC/OS-II程序設(shè)計簡介96.小結(jié):開始文件組成API簡介中間件應(yīng)用流程結(jié)束
介紹了I2C中間件的用途和應(yīng)用范圍;
介紹了I2C中間件的文件組成及各自的作用;
概述了I2C中間件內(nèi)API的全貌;中間件概述
為了讓讀者形成應(yīng)用I2C中間件的整體印象而介紹了中間件的一般應(yīng)用流程。用下面的演示對本小節(jié)所表達(dá)的內(nèi)容作一回憶:小節(jié)的表達(dá)軌跡I2C中間件|μC/OS-II程序設(shè)計簡介97.I2C中間件|μC/OS-II程序設(shè)計目錄3
使用示例
4
小結(jié)2
使用導(dǎo)論
簡介198.用戶在使用中間件進(jìn)行編程之前,有必要理解一些重要細(xì)節(jié)。本小節(jié)將對以下幾個方面展開表達(dá):參數(shù)設(shè)置鉤子函數(shù)阻塞-釋放在本中間件里,使用字符串來給API提供入口參數(shù)。在此處介紹鉤子函數(shù)、也即回調(diào)函數(shù)的概念。由于對I2C設(shè)備進(jìn)行讀寫時要求獨占,所以存在阻塞-釋放機(jī)制。I2C中間件|μC/OS-II程序設(shè)計使用導(dǎo)論99.參數(shù)設(shè)置中間件里的局部API,是采用字符串來輸入入口參數(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è)計使用導(dǎo)論100.鉤子函數(shù)鉤子函數(shù),顧名思義,它“倚靠〞在某一個函數(shù)內(nèi)(墻壁),但又可“掛上〞其它代碼(鉤子可掛各種物件)。請看下面的圖示:voidi2c0IRQ(void){……}i2c0Hook();voidi2c0Hook(void){/*自定義代碼*/}……“墻壁〞“鉤子〞“所掛物件〞I2C中間件|μC/OS-II程序設(shè)計使用導(dǎo)論101.鉤子函數(shù)實際情況里,鉤子函數(shù)所“掛〞的自定義代碼如何運行呢?請看演示:voidi2c0IRQ(void){……}i2c0Hook();voidi2c0Hook(void){/*自定義代碼*/}……I2C中間件|μC/OS-II程序設(shè)計使用導(dǎo)論102.阻塞-釋放1、阻塞
對于同一個I2C接口
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 腫瘤學(xué)面試題庫及答案
- 重慶社區(qū)考試試題及答案
- 執(zhí)業(yè)醫(yī)師加試之兒科考試真題試卷+答案
- 專升本詞匯試題及答案
- 銀行專業(yè)知識試題及答案
- 助產(chǎn)面試題庫及答案
- 教師招聘之《中學(xué)教師招聘》預(yù)測復(fù)習(xí)附參考答案詳解【能力提升】
- 雙鴨山市輔警考試題《公安基礎(chǔ)知識》綜合能力試題庫(附答案)
- 2025年四川省特種設(shè)備相關(guān)管理電梯培訓(xùn)模擬試題(含答案)
- 糧油保管員考試試題附帶答案解析
- 學(xué)堂在線 雨課堂 學(xué)堂云 實繩結(jié)技術(shù) 章節(jié)測試答案
- 二十四節(jié)氣和農(nóng)業(yè)生產(chǎn)的關(guān)系
- 鑄牢中華民族共同體意識課件
- 推廣經(jīng)理半年工作計劃
- 110kV線路運維方案
- 智能化弱電工程常見質(zhì)量通病的避免方法
- 屋頂光伏安全專項施工方案
- 醫(yī)療器械拓展性臨床試驗管理規(guī)定(試行)YY/T-0292.1-2020《醫(yī)用診斷X射線輻射防護(hù)器具》
- 《中國古代文學(xué)通識讀本》pdf
- 罐區(qū)加溫操作規(guī)程
- 國有企業(yè)干部選拔任用工作系列表格優(yōu)質(zhì)資料
評論
0/150
提交評論