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

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]實(shí)現(xiàn)EMC2的硬件抽象層

1 概 述
    嵌入式系統(tǒng)具有專用性強(qiáng)、外圍設(shè)備多樣的特性,這決定了其應(yīng)用的硬件環(huán)境差異性較大。系統(tǒng)軟件模塊與硬件之間的接口是嵌入式實(shí)時(shí)系統(tǒng)的主要特征,是系統(tǒng)設(shè)計(jì)過(guò)程中的必需環(huán)節(jié),也是影響嵌入式系統(tǒng)應(yīng)用前景的關(guān)鍵問(wèn)題之一。硬件抽象層(Hardware Abstraction Layer,HAL)的引入可有效解決這一問(wèn)題。HAL是將硬件平臺(tái)與應(yīng)用軟件隔離開來(lái)的軟件層次,通過(guò)硬件抽象技術(shù)實(shí)現(xiàn)硬件相關(guān)和硬件無(wú)關(guān)兩部分程序代碼的隔離,為應(yīng)用軟件提供一個(gè)沒(méi)有硬件特性的接口。硬件抽象層的引入不僅是系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì)方法的改進(jìn),更直接關(guān)系到整個(gè)系統(tǒng)的開發(fā)模式以及嵌入式操作系統(tǒng)的可移植性。硬件抽象層的引入大大推動(dòng)了嵌入式系統(tǒng)開發(fā)的規(guī)范化進(jìn)程。
    EMC是一個(gè)開放源代碼的用于機(jī)床或機(jī)器人等運(yùn)動(dòng)控制系統(tǒng)的計(jì)算機(jī)控制軟件。它能同時(shí)驅(qū)動(dòng)9軸電機(jī)。其運(yùn)動(dòng)控制特性包括:刀具半徑和長(zhǎng)度補(bǔ)償、軸同步運(yùn)動(dòng)、自適應(yīng)進(jìn)給速度、恒速度控制等。EMC2在原有EMC軟件的基礎(chǔ)上加入了許多新的特性和功能,其中包括了HAL和軟件PLC模塊ClassicLadder。ClassicLadder是一個(gè)基于LGPL協(xié)議的梯形圖解釋器。它隨著EMC2一起發(fā)布,可以與EMC2的HAL一起工作。本文中的控制系統(tǒng)利用EMC2的HAL為軟PLC中的應(yīng)用程序提供底層硬件操作支持,提高了應(yīng)用程序的平臺(tái)無(wú)關(guān)性與可移植性。


2 硬件架構(gòu)
    控制器是鋰電池卷繞恒張力控制器,采用符合PC/104總線規(guī)范的單板計(jì)算機(jī)(以下簡(jiǎn)稱PC104)與基于FPGA的專用主機(jī)板相結(jié)合的方法構(gòu)建系統(tǒng)硬件。PC104中運(yùn)行實(shí)時(shí)Linux,ClassicLadder及HAL作為實(shí)時(shí)模塊加載到Linux系統(tǒng)中。
    系統(tǒng)硬件框圖如圖1所示。其中ADS8361為12位模/數(shù)轉(zhuǎn)換器,用于采集張力值等模擬量;AD5624為數(shù)/模轉(zhuǎn)換器,用于控制直流電機(jī)轉(zhuǎn)速及氣壓閥壓力值;FPGA控制所有外圍芯片,并產(chǎn)生電機(jī)脈沖方向信號(hào),同時(shí)對(duì)電機(jī)編碼器信號(hào)進(jìn)行計(jì)數(shù);CPLD控制I/O輸入/輸出點(diǎn),并與FPGA交換信息。利用EMC2中HAL的實(shí)現(xiàn)原理,可編寫組件將硬件系統(tǒng)所有設(shè)備抽象成引腳和函數(shù)的形式,供軟PLC在需要時(shí)加載。

3 EMC2中HAL的基本概念
    EMC2的HAL提供了一種簡(jiǎn)便方法,將一些已有軟硬件模塊進(jìn)行加載和組合形成一個(gè)復(fù)雜的系統(tǒng),從而使EMC2更容易配置,以使用各種硬件設(shè)備。硬件資源在HAL中被封裝成特定組件,隨時(shí)被控制系統(tǒng)載入使用。EMC2中的HAL有以下基本概念:
    Component,組件。是定義好輸入、輸出及行為的軟件模塊,可以在需要時(shí)安裝及連接。
    Parameter,參數(shù)。許多硬件組件有可調(diào)整參數(shù)需要進(jìn)行訪問(wèn)。HAL有輸入及輸出兩種類型的參數(shù)。
    Pin,引腳。硬件組件用于互聯(lián)的連接端子。所有Pin都有名稱,并在連接時(shí)使用。HAL的Pin是只存在于計(jì)算機(jī)內(nèi)的軟件實(shí)體。
    Physical_Pin,物理引腳。許多I/O設(shè)備有真正的物理引腳或終端連接到外部硬件,這些被稱為物理引腳。
    Signal,信號(hào)。現(xiàn)實(shí)中硬件組件使用導(dǎo)線互連。在HAL中導(dǎo)線相當(dāng)于“信號(hào)”。HAL的信號(hào)將HAL的引腳連接在一起,可以隨意斷開或重新連接。
    Type,類型。引腳和信號(hào)都有類型屬性,即信號(hào)只能連接到相同類型的引腳。目前,HAL有4種類型:BIT、FLOAT、U32、S32。
    Function,函數(shù)。每個(gè)函數(shù)是一個(gè)執(zhí)行具體行為的代碼塊,執(zhí)行讀取輸入、計(jì)算輸出等操作。系統(tǒng)設(shè)計(jì)者可以使用“線程”對(duì)一系列函數(shù)加以調(diào)度,以使其按照特定的順序及時(shí)間間隔運(yùn)行。
    Thread,線程。作為一個(gè)實(shí)時(shí)任務(wù)的組成部分,線程是一個(gè)以特定時(shí)間間隔運(yùn)行的函數(shù)序列。函數(shù)可以添加到線程并在每次線程運(yùn)行時(shí)調(diào)用。[!--empirenews.page--]4 HAL架構(gòu)
    系統(tǒng)軟件架構(gòu)如圖2所示。用HAL將各I/O通道、ADC通道、DAC通道、脈沖通道、編碼器通道抽象成Pin,將對(duì)硬件各模塊的操作抽象成各個(gè)Function,將Pin和Function封裝在命名為hal_CNC的Component中。

 

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

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


5 基于HAL的驅(qū)動(dòng)程序編寫
    hal_CNC由源文件hal_CNC.c和hal_CNC.h構(gòu)成。hal_CNC.c定義了對(duì)hal_CNC的初始化、底層硬件驅(qū)動(dòng)函數(shù)、hal_CNC退出時(shí)的操作等。rtapi_app_main()函數(shù)是載入Component時(shí)的程序入口。
    首先申請(qǐng)當(dāng)前Component的ID號(hào),對(duì)Component的每個(gè)操作都由該ID號(hào)索引。
    comp_id=hal_init(“hal_CNC”);
    //hal_CNC為Component的名字
    其次,分配組件運(yùn)行時(shí)所需內(nèi)存,代表Pin的指針指向的內(nèi)存區(qū)域便是在此分配:
    CNC_driver=hal_malloc(sizeof(CNC_struct));
    接著將所定義Pin導(dǎo)出到HAL。該操作通過(guò)調(diào)用自定義的export()函數(shù)來(lái)完成。以DAC模塊為例,操作如下:
    for(n=0;n<8;n++)
    export_dac(n,CNC_driver); //導(dǎo)出Pin
    每次調(diào)用export_dac()時(shí),都會(huì)調(diào)用如下語(yǔ)句注冊(cè)一個(gè)Pin。
    rtapi_snprintf(buf,HAL_NAME_LEN,“CNC.DAC.%d.value”,num);
    hal_pin_float_new(buf,HAL_IN,&(addr->dac_value[num]),comp_id);
    其中“CNC.DAC.XXX.value”是Pin的名稱。軟PLC通過(guò)該名稱對(duì)此Pin進(jìn)行引用。hal_pin_float_new()是HAL提供的函數(shù),在新建Type為FLOAT型的Pin時(shí)使用。該函數(shù)一共有4個(gè)參數(shù),依次是Pin名、Pin方向、Pin內(nèi)存指針地址、Component ID。引腳方向HAL_IN表示該值是從軟件層“輸入”到HAL中的,該方向針對(duì)軟件層與HAL層而言。
    對(duì)Pin進(jìn)行操作的Function也要導(dǎo)出到HAL:
    hal_export_[unct(“CNC.DAC.write”,CNC_dac_write,CNC_driver,1,0,comp_id);其中“CNC.DAC.write”為軟件層使用該Function時(shí)引用的名字;CNC_dac_write為函數(shù)在C源文件中實(shí)際對(duì)應(yīng)的C函數(shù)名稱;CNC_driver為Component的內(nèi)存指針;1表示函數(shù)用到了浮點(diǎn)數(shù);0表示該函數(shù)不可重入;comp_id為Component ID。[!--empirenews.page--]依照上述做法將所有硬件功能模塊全部導(dǎo)出到HAL后,在rtapi_app_main()的最后調(diào)用hal_ready(comp_id),表明該Component已經(jīng)初始化完畢,可以開始使用了。
    在關(guān)閉Component退出時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用hal_CNC.C中編寫的rtapi_app_exit()。其實(shí)現(xiàn)如下:
    void rtapi_app_exit(void){hal_exit(comp_id);)
    hal_exit()關(guān)閉并釋放HAL及RTAPI使用到的系統(tǒng)資源,使這些資源可被重新使用。
    用EMC2自帶的工具comp對(duì)源文件hal_CNC.c和hal_CNC.h進(jìn)行編譯,即可得到名為hal_CNC的Compo-nent。該組件自動(dòng)放入EMC2的模塊庫(kù)中,隨時(shí)可被其他軟件模塊調(diào)用。

 


6 HAL的使用
    以DAC為例,在Linux下的命令行輸入“halrun”進(jìn)入EMC2的HAL運(yùn)行界面,輸入:
    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)用。然后使可通過(guò)控制DAC的引腳來(lái)輸出相應(yīng)的電壓。如:
    setp CNC.DAC.0.value 1
    該語(yǔ)句將使電路板上的DAC輸出端子輸出1 V的電壓。
    用類似的方法將其他軟件模塊通過(guò)與HAL的引腳連接,便實(shí)現(xiàn)了其他軟件對(duì)HAL的調(diào)用。


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

    其中“→”和“←”表示引腳之間的連接,用HAL中的Sig-nal實(shí)現(xiàn)。
    在軟PLC中設(shè)置變量W10的值為5,則在DA輸出端子引腳上用萬(wàn)用表測(cè)到5 V的電壓。軟PLC中的操作輸出如圖3所示。

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


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

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

武漢2025年9月9日 /美通社/ -- 7月24日,2025慧聰跨業(yè)品牌巡展——湖北?武漢站在武漢中南花園酒店隆重舉辦!本次巡展由慧聰安防網(wǎng)、慧聰物聯(lián)網(wǎng)、慧聰音響燈光網(wǎng)、慧聰LED屏網(wǎng)、慧聰教育網(wǎng)聯(lián)合主辦,吸引了安防、...

關(guān)鍵字: AI 希捷 BSP 平板

上海2025年9月9日 /美通社/ -- 9月8日,移遠(yuǎn)通信宣布,其自研藍(lán)牙協(xié)議棧DynaBlue率先通過(guò)藍(lán)牙技術(shù)聯(lián)盟(SIG)BQB 6.1標(biāo)準(zhǔn)認(rèn)證。作為移遠(yuǎn)深耕短距離通信...

關(guān)鍵字: 藍(lán)牙協(xié)議棧 移遠(yuǎn)通信 COM BSP

上海2025年9月9日 /美通社/ -- 為全面落實(shí)黨中央、國(guó)務(wù)院和上海市委、市政府關(guān)于加快發(fā)展人力資源服務(wù)業(yè)的決策部署,更好發(fā)揮人力資源服務(wù)業(yè)賦能百業(yè)作用,8月29日,以"AI智領(lǐng) HR智鏈 靜候你來(lái)&quo...

關(guān)鍵字: 智能體 AI BSP 人工智能

北京2025年9月8日 /美通社/ -- 近日,易生支付與一汽出行達(dá)成合作,為其自主研發(fā)的"旗馭車管"車輛運(yùn)營(yíng)管理平臺(tái)提供全流程支付通道及技術(shù)支持。此次合作不僅提升了平臺(tái)對(duì)百余家企業(yè)客戶的運(yùn)營(yíng)管理效率...

關(guān)鍵字: 一汽 智能化 BSP SAAS

深圳2025年9月8日 /美通社/ -- 晶泰科技(2228.HK)今日宣布,由其助力智擎生技制藥(PharmaEngine, Inc.)發(fā)現(xiàn)的新一代PRMT5抑制劑PEP0...

關(guān)鍵字: 泰科 AI MT BSP

上海2025年9月5日 /美通社/ -- 由上海市經(jīng)濟(jì)和信息化委員會(huì)、上海市發(fā)展和改革委員會(huì)、上海市商務(wù)委員會(huì)、上海市教育委員會(huì)、上海市科學(xué)技術(shù)委員會(huì)指導(dǎo),東浩蘭生(集團(tuán))有限公司主辦,東浩蘭生會(huì)展集團(tuán)上海工業(yè)商務(wù)展覽有...

關(guān)鍵字: 電子 BSP 芯片 自動(dòng)駕駛

推進(jìn)卓越制造,擴(kuò)大產(chǎn)能并優(yōu)化布局 蘇州2025年9月5日 /美通社/ --?耐世特汽車系統(tǒng)與蘇州工業(yè)園區(qū)管委會(huì)正式簽署備忘錄,以設(shè)立耐世特亞太總部蘇州智能制造項(xiàng)目。...

關(guān)鍵字: 智能制造 BSP 汽車系統(tǒng) 線控

慕尼黑和北京2025年9月4日 /美通社/ -- 寶馬集團(tuán)宣布,新世代首款量產(chǎn)車型BMW iX3將于9月5日全球首發(fā),9月8日震撼亮相慕尼黑車展。中國(guó)專屬版車型也將在年內(nèi)與大家見(jiàn)面,2026年在國(guó)內(nèi)投產(chǎn)。 寶馬集團(tuán)董事...

關(guān)鍵字: 寶馬 慕尼黑 BSP 數(shù)字化

北京2025年9月4日 /美通社/ --?在全球新一輪科技革命與產(chǎn)業(yè)變革的澎湃浪潮中,人工智能作為引領(lǐng)創(chuàng)新的核心驅(qū)動(dòng)力,正以前所未有的深度與廣度重塑各行業(yè)發(fā)展格局。體育領(lǐng)域深度融入科技變革浪潮,駛?cè)霐?shù)字化、智能化轉(zhuǎn)型快車...

關(guān)鍵字: 人工智能 智能體 AI BSP

上海2025年9月2日 /美通社/ -- 近日,由 ABB、Moxa(摩莎科技)等八家企業(yè)在上海聯(lián)合發(fā)起并成功舉辦"2025 Ethernet-APL 技術(shù)應(yīng)用發(fā)展大會(huì)"。會(huì)議以"破界?融合...

關(guān)鍵字: ETHERNET 智能未來(lái) BSP 工業(yè)通信
關(guān)閉