手持式終端設備中電源監測技術(shù)研究與實(shí)現
鑒于文中所述的超級終端系在Linux環(huán)境下運行,各個(gè)檢測環(huán)節的驅動(dòng)程序和相關(guān)的實(shí)施策略、編寫(xiě)方法亦多有特點(diǎn),現詳細描述如下。
2.1 Linux驅動(dòng)程序工作原理
在Linux內核中,設備驅動(dòng)程序是作為文件系統的一個(gè)模塊存在的,它對下負責與硬件設備的交互,對上通過(guò)一個(gè)通用的接口掛接到文件系統上,從而和系統的內核等聯(lián)系起來(lái)。它是軟件概念和硬件設備間的一個(gè)抽象層。系統調用是內核和應用程序之間的接口,而設備驅動(dòng)程序則是內核和外設之間的接口。
設備驅動(dòng)程序為應用程序屏蔽了外設硬件的細節,從應用程序角度來(lái)看,對于外設的操作方法與普通文件一樣。設備驅動(dòng)程序與系統外設關(guān)系如圖2所示。

圖2 Linux驅動(dòng)程序與系統外設關(guān)系圖
2.2 字符設備
字符設備是Linux系統中最簡(jiǎn)單的設備,可以像文件一樣訪(fǎng)問(wèn)。當字符設備初始化的時(shí)候,其驅動(dòng)程序向Linux核心登記,在chrdevs向量表中增加一個(gè)device_STruct數據結構條目。這個(gè)設備的主設備標識符用作這個(gè)向量表的索引。一個(gè)設備的主設備標識符是固定的。chrdevs向量表中的device_struct數據結構包括一個(gè)登記設備驅動(dòng)程序名稱(chēng)的指針和一個(gè)指向一組文件操作的指針。這組文件操作本身位于這個(gè)設備的字符設備驅動(dòng)程序中,并處理一些特定任務(wù)。本電池監測系統在Linux下的驅動(dòng)程序就把外設視為字符設備,在驅動(dòng)程序里實(shí)現了打開(kāi)、讀、寫(xiě)和關(guān)閉等操作。
系統內部,I/O設備的存取使通過(guò)一組固定的入口點(diǎn)來(lái)進(jìn)行的。這組入口點(diǎn)由特定設備的設備驅動(dòng)程序提供,在數據結構file_operatiONs()中定義。該程序定義了一個(gè)數據結構為file_operations()的變量adc_fops。

2.3.1 adc_open函數
此函數打開(kāi)并初始化設備以待I/O操作。adc_open()子程序必須對其做好必要的準備,如果設備是獨占的,adc_open()子程序必須設置一些標志以表示設備處于忙狀態(tài)。
2.3.2 adc_read函數
對AD轉換器設備文件進(jìn)行讀操作時(shí)調用adc_read()子程序。電池監測系統要求實(shí)時(shí)讀取外設監測點(diǎn)的電壓值。因此,在adc_read()函數中實(shí)時(shí)觸發(fā)AD轉換器開(kāi)始工作,并且利用程序輪詢(xún)方式讀取轉換后的數據。adc_read()函數內容如下:

評論