在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 淺談EMC2的硬件抽象層原理與實現(xiàn)

            淺談EMC2的硬件抽象層原理與實現(xiàn)

            作者: 時間:2012-01-05 來源:網(wǎng)絡(luò) 收藏

            1 概 述

            本文引用地址:http://www.biyoush.com/article/149867.htm

            嵌入式系統(tǒng)具有專用性強、外圍設(shè)備多樣的特性,這決定了其應(yīng)用的環(huán)境差異性較大。系統(tǒng)軟件模塊與之間的接口是嵌入式實時系統(tǒng)的主要特征,是系統(tǒng)設(shè)計過程中的必需環(huán)節(jié),也是影響嵌入式系統(tǒng)應(yīng)用前景的關(guān)鍵問題之一。層(Hardware AbSTractiON Layer,HAL)的引入可有效解決這一問題。HAL是將硬件平臺與應(yīng)用軟件隔離開來的軟件層次,通過硬件技術(shù)硬件相關(guān)和硬件無關(guān)兩部分程序代碼的隔離,為應(yīng)用軟件提供一個沒有硬件特性的接口。硬件層的引入不僅是系統(tǒng)體系結(jié)構(gòu)設(shè)計方法的改進,更直接關(guān)系到整個系統(tǒng)的開發(fā)模式以及嵌入式操作系統(tǒng)的可移植性。硬件抽象層的引入大大推動了嵌入式系統(tǒng)開發(fā)的規(guī)范化進程。

            EMC是一個開放源代碼的用于機床或機器人等運動控制系統(tǒng)的計算機控制軟件。它能同時驅(qū)動9軸電機。其運動控制特包括:刀具半徑和長度補償、軸同步運動、自適應(yīng)進給速度、恒速度控制等。在原有EMC軟件的基礎(chǔ)上加入了許多新的特性和功能,其中包括了HAL和軟件PLC模塊ClassicLadder。ClassicLadder是一個基于LGPL協(xié)議的梯形圖解釋器。它隨著一起發(fā)布,可以與的HAL一起工作。本文中的控制系統(tǒng)利用EMC2的HAL為軟PLC中的應(yīng)用程序提供底層硬件操作支持,提高了應(yīng)用程序的平臺無關(guān)性與可移植性。

            2 硬件架構(gòu)

            控制器是鋰電池卷繞恒張力控制器,采用符合PC/104總線規(guī)范的單板計算機(以下簡稱PC104)與基于FPGA的專用主機板相結(jié)合的方法構(gòu)建系統(tǒng)硬件。PC104中運行實時Linux,ClassicLadder及HAL作為實時模塊加載到Linux系統(tǒng)中。

            系統(tǒng)硬件框圖如圖1所示。其中ADS8361為12位模/數(shù)轉(zhuǎn)換器,用于采集張力值等模擬量;AD5624為數(shù)/模轉(zhuǎn)換器,用于控制直流電機轉(zhuǎn)速及氣壓閥壓力值;FPGA控制所有外圍芯片,并產(chǎn)生電機脈沖方向信號,同時對電機編碼器信號進行計數(shù);CPLD控制I/O輸入/輸出點,并與FPGA交換信息。利用EMC2中HAL的,可編寫組件將硬件系統(tǒng)所有設(shè)備抽象成引腳和函數(shù)的形式,供軟PLC在需要時加載。

            3 EMC2中HAL的基本概念

            HAL,Hardware Abstraction Layer,硬件抽象層 Windows NT的一個目標是使操作系統(tǒng)可跨平臺移植。理想情況下,當(dāng)一種新機器問世時,他應(yīng)該可以僅僅使用新機器的編譯器來重新編譯這個操作系統(tǒng),就讓他首次運行。但是,現(xiàn)實中并不能這樣做。雖然上層的操作系統(tǒng)能夠完全移植(因為它們的處理大多是內(nèi)部數(shù)據(jù)結(jié)構(gòu)),但底層處理的是設(shè)備寄存器、中斷、DMA和其他的硬件特性,這些都是因機器而不同的。即使大部分底層代碼是用C語言編寫的,它也不能僅僅從X86上拿出來放到Alpha上,然后重新編譯、重新啟動,因為X86和ALPHA之間存在許多小的硬件差別,它們和不同的指令集相關(guān)并且不能被編譯器隱藏。

            4 HAL架構(gòu)

            系統(tǒng)軟件架構(gòu)如圖2所示。用HAL將各I/O通道、ADC通道、DAC通道、脈沖通道、編碼器通道抽象成Pin,將對硬件各模塊的操作抽象成各個Function,將Pin和Function封裝在命名為hal_CNC的Component中。

            硬件在Component中被映射為如下數(shù)據(jù)結(jié)構(gòu):

            由上述結(jié)構(gòu)可以看出,每個Pin對應(yīng)一個相應(yīng)類型的指針,該指針指向的內(nèi)存區(qū)便存放該引腳的值。

            5 基于HAL的驅(qū)動程序編寫

            考慮內(nèi)存映射I/O和I/O端口的對比。一些機器具有前者,一些機器具有后者。驅(qū)動程序該怎樣編寫?是否使用內(nèi)存映射呢?強制選擇會使驅(qū)動程序無法移植到另一種方式的機器上,為此,硬件抽象層專為驅(qū)動程序的編寫者提供了三個讀設(shè)備寄存器的函數(shù)和另外三個寫寄存器的函數(shù):uc=READ_port_UCHAR(port); WRIte_PORT_UCHAR(port, uc) us=READ_PORT_USHORT(port); WRITE_PORT_USHORT(port, us),ul=READ_PORT_ULONG(port); WRITE_PORT_LONG(port, ul) 這些函數(shù)分別讀寫無符號8位、16位、32位的證書到特定的端口。由HAL決定是否需要內(nèi)存映射I/O,這樣,一個驅(qū)動程序可以不被修改而在具有不同設(shè)備寄存器實現(xiàn)的機器間移植。驅(qū)動程序常由于各種原因而訪問特定的I/O設(shè)備。在這個硬件層上,一個設(shè)備的某個總線上會有一個或多個地址。由于現(xiàn)代計算機常有多種總線(PCI、PCI-E、SCSI、USB等),很可能兩個或更多設(shè)備具有相同的總線地址,因此需要通過某種方式來區(qū)分它們。HAL提供了一個服務(wù),該服務(wù)通過將總線相連的設(shè)備地址映射到系統(tǒng)范圍內(nèi)的邏輯地址來識別設(shè)備。這樣,驅(qū)動程序就不需要知道哪條總線上有哪個設(shè)備了。這些邏輯地址與操作系統(tǒng)為用戶程序提供的指向文件和其他系統(tǒng)資源的句柄是類似的。這種機制也使總線結(jié)構(gòu)的屬性和尋址方式對于高層不可見。

            6 HAL的使用

            以DAC為例,在Linux下的命令行輸入“halrun”進入EMC2的HAL運行界面,輸入:

            loadrt threads namel=thread periodl=1000000

            創(chuàng)建名為“thread”的線程,該線程執(zhí)行周期為1 ms。

            執(zhí)行:

            loadrt hal_CNC

            將所編寫的硬件系統(tǒng)組件調(diào)入,執(zhí)行:

            addf CNC.DAC.write thread

            將DAC的寫函數(shù)加入到前面創(chuàng)建的線程thread,使之以與thread相同的執(zhí)行周期被調(diào)用。然后使可通過控制DAC的引腳來輸出相應(yīng)的電壓。如:

            setp CNC.DAC.0.value 1

            該語句將使電路板上的DAC輸出端子輸出1 V的電壓。

            用類似的方法將其他軟件模塊通過與HAL的引腳連接,便實現(xiàn)了其他軟件對HAL的調(diào)用。

            7 HAL在ClassicLadder中的調(diào)用

            以從DAC輸出5 V為例,將classicladder的一個名為“classicladder.0.s320ut-00”的有符號32位整型Pin賦值為5。該值經(jīng)過HAL中的一個類型轉(zhuǎn)換Component“s32tofloat”變?yōu)楦↑c數(shù),再連接到hal_CNC中的DAC單元的引腳“CNC.DAC.0.value”,便在實際硬件電路板的DAC輸出端輸出5 V的電壓。引腳連接如表1所列。

            其中“→”和“←”表示引腳之間的連接,用HAL中的Sig-nal實現(xiàn)。

            在軟PLC中設(shè)置變量W10的值為5,則在DA輸出端子引腳上用萬用表測到5 V的電壓。軟PLC中的操作輸出如圖3所示。

            其中4個窗口表示DAC的4個通道,分別令DAC輸出5 V、2 V、3 V、4 V的電壓。

            8 結(jié) 論

            實踐證明,HAL的引入可極大提高嵌入式軟件實現(xiàn)的硬件無關(guān)性。從軟件的角度來看,其面向的硬件具有同質(zhì)的接口,對硬件的操作具有相似的方法與架構(gòu),極大地簡化了軟件對硬件的控制,方便了同類軟件在不同硬件平臺間的移植。這就為軟硬件同步設(shè)計、分工協(xié)作奠定了良好的基礎(chǔ)。該架構(gòu)已成功應(yīng)用在文中所述的鋰電池卷繞恒張力控制器中,取得了良好效果。



            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉