成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Windows CE下AD驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)

開發(fā)
本文主要討論在Windows CE.Net 操作系統(tǒng)下,如何設(shè)計(jì)實(shí)現(xiàn)S3C2410芯片具有AD接口的驅(qū)動(dòng)程序;詳細(xì)介紹Windows CE.Net 下,流接口驅(qū)動(dòng)程序的工作原理和編寫方法。

引言

Windows CE.Net 是一個(gè)32位、多任務(wù)、多線程的完全搶占式的實(shí)時(shí)操作系統(tǒng)。它提供了眾多強(qiáng)大工具適應(yīng)于快速構(gòu)建新一代內(nèi)存少、體積小的智能設(shè)備,如工業(yè)控制器、手持式設(shè)備等。該系統(tǒng)的特點(diǎn)是專為各種具有嚴(yán)格資源限制的硬件系統(tǒng)所設(shè)計(jì)的。為了將操作系統(tǒng)和硬件設(shè)備連接起來,連接硬件和應(yīng)用軟件的驅(qū)動(dòng)就非常重要。該論文主要針對(duì)SAMSUNG公司以ARM9為內(nèi)核的S3C2410進(jìn)行分析,介紹在Windows CE.Net 系統(tǒng)下進(jìn)行底層設(shè)備流接口驅(qū)動(dòng)的原理和開發(fā)方法并提供AD驅(qū)動(dòng)程序的實(shí)例。

S3C2410芯片片上AD介紹

S3C2410 是一款基于ARM920T的16/32位RISC微處理器,擁有高性價(jià)比,低功耗等特點(diǎn),也是目前市面上出現(xiàn)較多的嵌入式開發(fā)板的處理器之一,具有8路10位的A/D轉(zhuǎn)換,S3C2410上的A/D轉(zhuǎn)換器在2.5MHZ的時(shí)鐘下,***轉(zhuǎn)化速率可達(dá)500KSPS,A/D轉(zhuǎn)換器支持片上采樣和保持功能。S3C2410微處理對(duì)AD轉(zhuǎn)換進(jìn)行的操作,主要是對(duì)下面的兩個(gè)寄存器進(jìn)行讀/寫:ADC 控制寄存器,ADCCON ;ADC 數(shù)據(jù)寄器,ADCDAT0。

流接口驅(qū)動(dòng)

Windows CE.Net 支持四種驅(qū)動(dòng)模型:本地驅(qū)動(dòng)、流驅(qū)動(dòng)、USB、NDIS[1]。本文只針對(duì)流驅(qū)動(dòng)進(jìn)行介紹。

流接口驅(qū)動(dòng)體系結(jié)構(gòu)

流驅(qū)動(dòng)將設(shè)備抽象為文件進(jìn)行操作,它體系結(jié)構(gòu)如圖1所示。應(yīng)用程序使用文件API對(duì)設(shè)備進(jìn)行訪問,文件API被操作系統(tǒng)轉(zhuǎn)發(fā)到FileSys.exe進(jìn)程中;然后FileSys.exe發(fā)現(xiàn)是對(duì)設(shè)備進(jìn)行操作,就會(huì)把執(zhí)行交給設(shè)備管理器;接著設(shè)備管理器根據(jù)具體的請(qǐng)求,調(diào)用不同的流接口驅(qū)動(dòng)程序中暴露的接口;最終驅(qū)動(dòng)程序負(fù)責(zé)與硬件交互。

流接口函數(shù)

流接口驅(qū)動(dòng)程序是動(dòng)態(tài)連接庫,由設(shè)備管理程序的特殊程序加載、管理和卸載,與具有單獨(dú)目的接口的內(nèi)部驅(qū)動(dòng)程序相比,流接口驅(qū)動(dòng)程序使用同一個(gè)接口并調(diào)用同一個(gè)函數(shù)集-流接口函數(shù)[4]。Windows CE.Net 系統(tǒng)規(guī)定流接口的入口點(diǎn)如表1,對(duì)應(yīng)著直接或者間接調(diào)用流接口函數(shù)的系統(tǒng)組件或文件API函數(shù)。生成一個(gè)DLL后,就用設(shè)備文件名前綴替換入口點(diǎn)名字中的XXX。

流接口驅(qū)動(dòng)工作原理

在流驅(qū)動(dòng)工作原理中需要包括幾個(gè)重要的工作實(shí)體:硬件、流接口驅(qū)動(dòng)驅(qū)動(dòng)程序、系統(tǒng)注冊(cè)表、設(shè)備管理器、應(yīng)用程序。整個(gè)驅(qū)動(dòng)程序工作原理。

流驅(qū)動(dòng)的工作順序如下:1)加載驅(qū)動(dòng)。在當(dāng)系統(tǒng)啟動(dòng)時(shí),設(shè)備管理器搜尋注冊(cè)表的HKEY_LOCAL_MACHINE\Driver\BuiltIn鍵下面的子鍵,并逐一加載子鍵下的每個(gè)驅(qū)動(dòng),此過程叫BusEnum。2)設(shè)備管理器從注冊(cè)表的dll鍵值中獲取驅(qū)動(dòng)程序所在的DLL文件名。3)設(shè)備管理器調(diào)用LoadDriver()函數(shù)把DLL加載到自己的虛擬地址空間內(nèi)。4)設(shè)備管理器在注冊(cè)表的HKEY_LOCAL_MACHINE\Driver\Active下面,記錄所有已經(jīng)加載的驅(qū)動(dòng)程序[2]。5)設(shè)備管理器調(diào)用驅(qū)動(dòng)中的XXX_Init()函數(shù)。6)在XXX_Init()中,通常對(duì)硬件進(jìn)行一些基本的初始化操作。通過以上6步,流接口驅(qū)動(dòng)被成功加載。7)應(yīng)用程序使用該設(shè)備。首先它調(diào)用CreateFile()打開設(shè)備。CreateFile()是在FileSys.exe中實(shí)現(xiàn)的。但是FileSys.exe只作簡(jiǎn)單判斷,如果發(fā)現(xiàn)打開的設(shè)備驅(qū)動(dòng)程序而不是一個(gè)文件,那么就重新把主動(dòng)權(quán)交還給設(shè)備管理器。8)設(shè)備管理器調(diào)用驅(qū)動(dòng)程序中的XXX_Open()函數(shù)打開設(shè)備。在XXX_Open()中,驅(qū)動(dòng)程序可能會(huì)對(duì)硬件進(jìn)行一些額外的初始化工作,使硬件進(jìn)入工作狀態(tài)。9)XXX_Open()函數(shù)把打開設(shè)備的結(jié)果返回給設(shè)備管理器。10)設(shè)備管理器把XXX_Open()返回的結(jié)果,再返回給應(yīng)用程序的CreateFile()函數(shù)調(diào)用。通過7-10步,設(shè)備已被成功打開,至此就可以對(duì)設(shè)備進(jìn)行讀寫和控制操作。11)應(yīng)用程序使用第7步CreateFile()函數(shù)返回的句柄作為 ReadFile() / WriteFile()的***個(gè)參數(shù),向設(shè)備發(fā)送讀請(qǐng)求。同樣ReadFile() / WriteFile()要經(jīng)過FileSys.exe轉(zhuǎn)發(fā)給設(shè)備管理器。12)設(shè)備管理器調(diào)用驅(qū)動(dòng)程序中的XXX_Read() / XXX_Write() 函數(shù),讀取設(shè)備的數(shù)據(jù)信息或向設(shè)備寫信息。13)在流驅(qū)動(dòng)程序中,XXX_Read() / XXX_Write() 函數(shù)可與硬件交互,從硬件中讀取必要的信息或向硬件寫必要的信息。然后返回給設(shè)備管理器,再返回給應(yīng)用程序。

當(dāng)應(yīng)用程序不再使用該設(shè)備時(shí),它可調(diào)用CloseHandle()將設(shè)備關(guān)閉。當(dāng)系統(tǒng)不再使用設(shè)備時(shí),應(yīng)用程序可調(diào)用DeactivateDevice()函數(shù)把該驅(qū)動(dòng)程序卸載。

AD驅(qū)動(dòng)的實(shí)現(xiàn)

AD驅(qū)動(dòng)程序以動(dòng)態(tài)鏈接庫方式編寫,采用流接口驅(qū)動(dòng)的標(biāo)準(zhǔn)形式。在ADC_ Init函數(shù)中,主要進(jìn)行初始化。函數(shù)ADC_Open 只需要返回一個(gè)不為0的值來判斷打開設(shè)備成功。在函數(shù) ADC_Write 中通過寫入要選擇的通道號(hào)和預(yù)分頻值,它控制通道的動(dòng)作。函數(shù) ADC_Read 中的代碼最為關(guān)鍵,它完成讀取模擬量向數(shù)字量的轉(zhuǎn)換結(jié)果,其部分主要代碼如下:

pADCIOreg->rADCCON = (1<<14)|(ADCPRS<<6)|(ch<<3); //建立通道號(hào)

pADCIOreg->rADCCON |= 0x1; // 開始轉(zhuǎn)換

while(pADCIOreg->rADCCON & 0x1); //檢測(cè)開始位是否為低電平

while(!(pADCIOreg->rADCCON & 0x8000)); //檢測(cè)轉(zhuǎn)換是否完畢標(biāo)志位

return ( (double)(pADCIOreg->rADCDAT0 & 0x3ff) ); //返回轉(zhuǎn)換完的數(shù)值

其中 ch 表示采樣通道號(hào), ADCPRS為預(yù)分頻值。其它函數(shù)均為空。

ADC驅(qū)動(dòng)封裝及其在Windows CE.Net中的添加

通過以上的工作,編譯出一個(gè) DLL 函數(shù),接著建立一個(gè)自己的 def 文件,導(dǎo)出所需要的流接口函數(shù)。新建一個(gè)記事本文件,命名為 AdcDriver.Def :

LIBRARY AdcDriver

EXPORTS

ADC_Init

ADC_Open

ADC_Readwww.51kaifa.com

ADC_Write

ADC_Close

ADC_Deinit

然后編寫一個(gè)注冊(cè)表文件, 命名為AdcDriver.reg :

[HKEY_LOCAL_MACHINE\ Drivers\ BuiltIn\ ADC]

"Index" = dword :1

"Prefix" = "ADC"

"Dll" = "AdcDriver.dll"

"Order" = dword :0

***在 Platform Builder中新建一個(gè) CEC 文件,首先添加一個(gè)BuildMethod ,它的任務(wù)是復(fù)制注冊(cè)表到 Windows CE.Net 的系統(tǒng)目錄下面。然后再添加一個(gè) Bib File,其主要任務(wù)是把編譯的 AdcDriver.dll 文件添加到 Windows CE.Net 內(nèi)核中去。保存寫好的CEC文件。在Platform Builder 中 , 打開“File”菜單,添加已經(jīng)編寫好的 CEC 特征到系統(tǒng)選項(xiàng)中去。生成系統(tǒng)的時(shí)候, 添加 CEC 特性,這樣驅(qū)動(dòng)就加入到操作系統(tǒng)里了。

總結(jié)

文中作者分析了 Windows CE.Net 的流接口驅(qū)動(dòng)的工作原理順序,設(shè)計(jì)實(shí)現(xiàn)了Windows CE.Net下的AD驅(qū)動(dòng),并通過Platform builder將其編譯到操作系統(tǒng)。而本系統(tǒng)再配上 EVC 開發(fā)的圖形界面軟件,可以開發(fā)出各種使用的設(shè)備,如移動(dòng)數(shù)據(jù)采集器等,在現(xiàn)代化檢測(cè)領(lǐng)域有很強(qiáng)的實(shí)用性。本文作者創(chuàng)新點(diǎn):分析了Windows CE.Net下流驅(qū)動(dòng)的執(zhí)行順序以及上層文件API如何調(diào)用流驅(qū)動(dòng),并給出將編寫的驅(qū)動(dòng)加入到操作系統(tǒng)的詳細(xì)步驟,該驅(qū)動(dòng)設(shè)計(jì)簡(jiǎn)單,應(yīng)用程序可以靈活調(diào)用。

 

【編輯推薦】

  1. 基于Win CE的嵌入式電子郵件系統(tǒng)設(shè)計(jì)
  2. 在WinCE中獲取設(shè)備ID
  3. WinCE編譯過程的四個(gè)階段
  4. WinCE中觸摸屏驅(qū)動(dòng)開發(fā)詳解
  5. Windows Mobile和WinCE的區(qū)別
責(zé)任編輯:佚名 來源: esdevelop
相關(guān)推薦

2009-05-28 13:27:33

Windows CE

2009-04-11 15:12:24

Windows CE串行通信GPS

2009-07-03 16:48:05

Windows CE

2010-02-25 14:27:59

Windows CE

2009-07-16 15:02:39

Windows CE平臺(tái)類型

2010-02-25 15:30:47

SDRAMWindows CE

2010-01-13 14:18:52

Windows Emb

2009-08-17 09:57:00

C# Windows

2011-06-27 09:49:53

Windows CEAndroid

2011-08-01 16:52:42

Windows CE 嵌入式

2009-08-17 09:27:12

c# Windows

2011-07-05 13:32:45

QT Mysql 驅(qū)動(dòng)

2009-11-10 16:40:46

WindowsEmbeddedWindows7

2010-05-05 13:16:02

Windows PhoWindows CE

2010-03-31 16:36:35

Windows CE

2020-12-14 09:26:32

WindowsAD域安裝軟件

2021-06-07 09:33:21

企業(yè)架構(gòu)驅(qū)動(dòng)

2009-09-24 09:45:07

Windows Emb

2010-06-07 09:47:34

php sendmai

2012-09-28 13:39:40

Windows備份
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久69精品久久久久久久电影好 | 国产二区在线播放 | 国产综合精品一区二区三区 | 亚洲视频在线观看免费 | 男女在线网站 | 国产在线二区 | 成人免费激情视频 | 亚洲精品大全 | 天天躁日日躁xxxxaaaa | 国产视频久久 | 久久精品一区 | 欧美一区二区三区视频 | 极品一区| 欧美久久大片 | 精品国产一区二区三区日日嗨 | 中文字幕一区二区视频 | 日韩一区二区三区在线观看 | 欧美视频1区| 福利久久 | 成人欧美一区二区三区黑人孕妇 | 日韩成人av在线 | 特级做a爰片毛片免费看108 | www.v888av.com| 亚洲精品丝袜日韩 | 国产精品久久久久久久久动漫 | 欧美9999| 亚洲欧美中文日韩在线v日本 | 亚洲国产成人精品女人久久久 | 中文字幕在线精品 | 日韩免费视频 | 激情 一区 | 米奇7777狠狠狠狠视频 | 精品久久久久久久久久久久久久久久久 | 中文字幕黄色大片 | 在线三级电影 | 国产探花在线精品一区二区 | 欧美成人a | 国产一区二区 | 99久久中文字幕三级久久日本 | 欧洲毛片| 激情欧美一区二区三区中文字幕 |