日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式硬件
[導讀]一、驅(qū)動的作用任何一個計算機系統(tǒng)的運行都是系統(tǒng)中軟硬件協(xié)作的結(jié)果,沒有硬件的軟件是空中樓閣,而沒有軟件的硬件則只是一堆廢鐵。硬件是底層基礎(chǔ),是所有軟件得以運行的

一、驅(qū)動的作用

任何一個計算機系統(tǒng)的運行都是系統(tǒng)中軟硬件協(xié)作的結(jié)果,沒有硬件的軟件是空中樓閣,而沒有軟件的硬件則只是一堆廢鐵。硬件是底層基礎(chǔ),是所有軟件得以運行的平臺,代碼最終會落實為硬件上的組合邏輯與時序邏輯;軟件則實現(xiàn)了具體應用,它按照各種不同的業(yè)務需求而設(shè)計,滿足了用戶的需求。硬件較固定,軟件則很靈活,可以適應各種復雜多變的應用??梢哉f,計算機系統(tǒng)的軟硬件互相成就了對方。

但是,軟硬件之間同樣存在著悖論,那就是軟件和硬件不應該互相滲透到對方的領(lǐng)地。為了盡可能快速地完成設(shè)計,應用軟件工程師不想也不必關(guān)心硬件,而硬件工程師也難有足夠的閑暇和能力來顧及軟件。例如,應用軟件工程師在調(diào)用套接字發(fā)送和接收數(shù)據(jù)包的時候,他不必關(guān)心網(wǎng)卡上的中斷、寄存器、存儲空間、I/O端口、片選以及其他任何硬件詞匯;在使用printf()函數(shù)輸出信息的時候,他不用知道底層究竟是怎樣把相應的信息輸出到屏幕或串口。

也就是說,應用軟件工程師需要看到一個沒有硬件的純粹的軟件世界,硬件必須被透明地呈現(xiàn)給他們。誰來實現(xiàn)硬件對應用軟件工程師的隱形?這個艱巨的任務就落在了驅(qū)動工程師的頭上。

對設(shè)備驅(qū)動最通俗的解釋就是“驅(qū)使硬件設(shè)備行動” 。設(shè)備驅(qū)動與底層硬件直接打交道,按照硬件設(shè)備的具體工作方式讀寫設(shè)備寄存器,完成設(shè)備的輪詢、中斷處理、DMA通信,進行物理內(nèi)存向虛擬內(nèi)存的映射,最終使通信設(shè)備能夠收發(fā)數(shù)據(jù),使顯示設(shè)備能夠顯示文字和畫面,使存儲設(shè)備能夠記錄文件和數(shù)據(jù)。

由此可見,設(shè)備驅(qū)動充當了硬件和應用軟件之間的紐帶,它使得應用軟件只需要調(diào)用系統(tǒng)軟件的應用編程接口(API)就可讓硬件去完成要求的工作。在系統(tǒng)中沒有操作系統(tǒng)的情況下,工程師可以根據(jù)硬件設(shè)備的特點自行定義接口,如對串口定義SerialSend()、SerialRecv();對 LED 定義LightOn()、LightOff();以及對 Flash 定義FlashWrite()、FlashRead()等。而在有操作系統(tǒng)的情況下,設(shè)備驅(qū)動的架構(gòu)則由相應的操作系統(tǒng)定義,驅(qū)動工程師必須按照相應的架構(gòu)設(shè)計設(shè)備驅(qū)動,這樣,設(shè)備驅(qū)動才能良好地整合到操作系統(tǒng)的內(nèi)核中。

驅(qū)動程序溝通著硬件和應用軟件,而驅(qū)動工程師則溝通著硬件工程師和應用軟件工程師。隨著通信、電子行業(yè)的迅速發(fā)展,全世界每天都會有大量的新芯片被生產(chǎn),大量的新電路板被設(shè)計,因此,也會有大量設(shè)備驅(qū)動需要開發(fā)。這些設(shè)備驅(qū)動,或運行在簡單的單任務環(huán)境中,或運行在 VxWorks、Linux、Windows等多任務操作系統(tǒng)環(huán)境中,發(fā)揮著不可替代的作用。

二、有無操作系統(tǒng)的區(qū)別

1)無操作系統(tǒng)(即裸機)時的設(shè)備驅(qū)動

并不是任何一個計算機系統(tǒng)都一定要運行操作系統(tǒng),在許多情況下操作系統(tǒng)是不要的。對于功能比較單一、控制并不復雜的系統(tǒng),如公交車刷卡機、電冰箱、微波、簡單的手機和小靈通等,并不需要多任務調(diào)度、文件系統(tǒng)、內(nèi)存管理等復雜功能,單任務架構(gòu)完全可以很好地支持它們的工作。一個無限循環(huán)中夾雜對設(shè)備中斷的檢測或者對設(shè)備的輪詢是這種系統(tǒng)中軟件的典型架構(gòu)。裸機的實現(xiàn)就有點類似單片機(MCU)了,盡管單片機的寄存器沒有那么的多,如果會裸機驅(qū)動,我想,應該能勝任單片機的工作了,呵呵。

在這樣的系統(tǒng)中,雖然不存在操作系統(tǒng),但是設(shè)備驅(qū)動是必須存在的。一般情況下,對每一種設(shè)備驅(qū)動都會定義為一個軟件模塊,包含.h文件和.c文件,前者定義該設(shè)備驅(qū)動的數(shù)據(jù)結(jié)構(gòu)并聲明外部函數(shù),后者進行設(shè)備驅(qū)動的具體實現(xiàn)。書中例舉了一個串口驅(qū)動serial.c serial.h,主要是配置GPIO,串口控制寄存器,以及串口的收發(fā)(讀寫)寄存器,而這幾個配置都是自定義函數(shù)實現(xiàn)的,比如串口的寫(發(fā))SerialSend 函數(shù)等。

其他模塊需要使用這個設(shè)備的時候,只需要包含設(shè)備驅(qū)動的頭文件 serial.h,然后調(diào)用其中的外部接口函數(shù)即可。如我們要從串口上發(fā)送字符串“Hello World”,使用函數(shù)SerialSend( " Hello World ",11)即可。

由此可見,在沒有操作系統(tǒng)的情況下,設(shè)備驅(qū)動的接口被直接提交給了應用軟件工程師, 應用軟件沒有跨越任何層次就直接訪問了設(shè)備驅(qū)動的接口。 設(shè)備驅(qū)動包含的接口函數(shù)也與硬件的功能直接吻合, 沒有任何附加功能。

有的工程師把單任務系統(tǒng)設(shè)計成設(shè)備驅(qū)動和具體的應用軟件模塊處于同一層次(即應用程序也在比如serial.c中實現(xiàn)),這顯然是不合理的,不符合軟件設(shè)計中高內(nèi)聚低耦合的要求。

另一種不合理的設(shè)計是直接在應用中操作硬件的寄存器(單獨一個main.c,所有功能都在一個函數(shù)中實現(xiàn),不采用其他任何接口/函數(shù)),而不單獨設(shè)計驅(qū)動模塊,這種設(shè)計意味著系統(tǒng)中不存在或未能充分利用可被重用的驅(qū)動代碼。

2)有操作系統(tǒng)時的設(shè)備驅(qū)動

無操作系統(tǒng)時的設(shè)備驅(qū)動中的設(shè)備驅(qū)動直接運行在硬件之上,不與任何操作系統(tǒng)關(guān)聯(lián)。當系統(tǒng)中包含操作系統(tǒng)后,設(shè)備驅(qū)動會變得怎樣?

首先,無操作系統(tǒng)時設(shè)備驅(qū)動的硬件操作工作仍然是必不可少的, 沒有這一部分,設(shè)備驅(qū)動不可能與硬件打交道。

其次,我們還需要將設(shè)備驅(qū)動融入內(nèi)核。為了實現(xiàn)這種融合,必須在所有的設(shè)備驅(qū)動中設(shè)計面向操作系統(tǒng)內(nèi)核的接口,這樣的接口由操作系統(tǒng)規(guī)定,對一類設(shè)備而言結(jié)構(gòu)一致,獨立于具體的設(shè)備。

由此可見,當系統(tǒng)中存在操作系統(tǒng)的時候,設(shè)備驅(qū)動變成了連接硬件和內(nèi)核的橋梁。操作系統(tǒng)的存在勢必要求設(shè)備驅(qū)動附加更多的代碼和功能(以我看,主要是提供了很多結(jié)構(gòu)),把單一的“驅(qū)使硬件設(shè)備行動”變成了操作系統(tǒng)內(nèi)與硬件交互的模塊,它對外呈現(xiàn)為操作系統(tǒng)的API,不再給應用軟件工程師直接提供接口。有了操作系統(tǒng)之后,設(shè)備驅(qū)動反而變得復雜,那要操作系統(tǒng)干什么?

首先,一個復雜的軟件系統(tǒng)需要處理多個并發(fā)的任務,沒有操作系統(tǒng),想完成多任務并發(fā)是很困難的。

其次,操作系統(tǒng)給我們提供內(nèi)存管理機制。一個典型的例子是,對于多數(shù)含 MMU的處理器而言,Windows、Linux 等操作系統(tǒng)可以讓每個進程都獨立地訪問 4GB的內(nèi)存空間。

上述優(yōu)點似乎并沒有體現(xiàn)在設(shè)備驅(qū)動身上,操作系統(tǒng)的存在給設(shè)備驅(qū)動究竟帶來了什么好處呢?

簡而言之,操作系統(tǒng)通過給設(shè)備驅(qū)動制造麻煩來達到給上層應用提供便利的目的。如果設(shè)備驅(qū)動都按照操作系統(tǒng)給出的獨立于設(shè)備的接口而設(shè)計,應用程序?qū)⒖墒褂媒y(tǒng)一的系統(tǒng)調(diào)用接口來訪問各種設(shè)備。對于類UNIX的VxWorks、Linux等操作系統(tǒng)而言,應用程序通過write()、read()等函數(shù)讀寫文件就可以訪問各種字符設(shè)備和塊設(shè)備,而不用管設(shè)備的具體類型和工作方式,是非常方便的。[!--empirenews.page--]

不管有無操作系統(tǒng),不管是SerialSend,或者write,訪問設(shè)備都需要對寄存器進行讀寫操作,比如串口,在dev目錄下有個ttys0結(jié)點,我們可以通過ioctl函數(shù)對其進行讀寫操作,當然,write、read更為直接咯。而上層的應用可以對這些函數(shù)進行封裝,定義不同的接口,從而實現(xiàn)更多的功能。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉