基于VxWorks的VME從板驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)
4.2 驅(qū)動(dòng)程序ioctrl方法的實(shí)現(xiàn)
驅(qū)動(dòng)程序的ioctrl方法在驅(qū)動(dòng)程序中具有重要地位,它除了要實(shí)現(xiàn)從板功能寄存器的設(shè)置及驅(qū)動(dòng)程序的查詢機(jī)制外,還要實(shí)現(xiàn)用戶信號(hào)處理函數(shù)的注冊(cè)工作,結(jié)合這些功能實(shí)現(xiàn)的ioctrl方法的框架代碼如下所示。
整個(gè)的ioctl方法由switch結(jié)構(gòu)組成,這樣的結(jié)構(gòu)代碼簡單明了,易讀性和可維護(hù)性都很好,同時(shí)可以方便地通過擴(kuò)充命令的方法來實(shí)現(xiàn)對(duì)從板功能寄存器多種多樣的操作,便于驅(qū)動(dòng)程序的重用。
4.3 驅(qū)動(dòng)程序read方法的買現(xiàn)
驅(qū)動(dòng)程序的read方法主要實(shí)現(xiàn)對(duì)緩沖區(qū)數(shù)據(jù)的讀取,同時(shí)它是實(shí)現(xiàn)數(shù)據(jù)阻塞操作的關(guān)鍵,read方法的程序流程圖如圖6所示。本文引用地址:http://www.ex-cimer.com/article/159333.htm
函數(shù)首先進(jìn)行參數(shù)的檢查及轉(zhuǎn)化;然后檢查緩沖區(qū)標(biāo)志,如果緩沖區(qū)存在數(shù)據(jù)則直接讀出數(shù)據(jù),如果緩沖區(qū)沒有數(shù)據(jù),函數(shù)就會(huì)申請(qǐng)緩沖區(qū)的信號(hào)量而使任務(wù)處于掛起狀態(tài),當(dāng)中斷處理任務(wù)處理完緩沖區(qū)后會(huì)發(fā)送一個(gè)信號(hào)量而使任務(wù)重新運(yùn)行并且讀出緩沖區(qū)數(shù)據(jù);函數(shù)最后是設(shè)置緩沖區(qū)標(biāo)志,表示緩沖區(qū)數(shù)據(jù)已經(jīng)讀出。函數(shù)要與中斷處理任務(wù)進(jìn)行同步;讀取和設(shè)置緩沖區(qū)標(biāo)志使用原子操作的方法,等待中斷處理任務(wù)設(shè)置緩沖區(qū)時(shí)使用了信號(hào)量的方式完成了同步。
5 VME總線數(shù)據(jù)傳輸測試
VME數(shù)據(jù)傳輸測試主要是測試總線數(shù)據(jù)傳輸?shù)目煽啃?,只有總線數(shù)據(jù)傳輸?shù)目煽啃阅軌虮WC,驅(qū)動(dòng)才能穩(wěn)定的運(yùn)行,其測試的方法是通過隨機(jī)地讀寫從板的隨機(jī)讀寫寄存器來完成的,整個(gè)測試中為了模擬操作系統(tǒng)在有負(fù)載情況下的運(yùn)行效果,增加了一些定時(shí)器操作,
其測試的程序流程圖如圖7所示。
使用這種測試的方法最終得到測試的結(jié)果如表3所示。從測試結(jié)果可以看出,數(shù)據(jù)傳輸?shù)臏?zhǔn)確性比較好,通過閱讀VG5-7457PowerPC的板級(jí)支持包可以發(fā)現(xiàn)其實(shí)現(xiàn)VME數(shù)據(jù)總線操作的函數(shù)都有原子操作過程,以此保證數(shù)據(jù)傳輸?shù)目煽啃?。良好?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/VME總線">VME總線傳輸特性為驅(qū)動(dòng)的實(shí)現(xiàn)提供了良好的基礎(chǔ)。
6 結(jié)論
設(shè)計(jì)了基于VxWorks操作系統(tǒng)的VME總線從板的驅(qū)動(dòng)程序框架,著重介紹了驅(qū)動(dòng)程序的機(jī)制及這些機(jī)制的實(shí)現(xiàn)方法;在設(shè)計(jì)的整體上重點(diǎn)地考慮了驅(qū)動(dòng)程序的可維護(hù)性及可移轉(zhuǎn)性。采用這種方式建立起來的驅(qū)動(dòng)程序代碼的可讀性好,可維護(hù)性強(qiáng),而且可以方便地移植到其他的應(yīng)用場合。
評(píng)論