<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          實(shí)現(xiàn)EMC2的硬件抽象層

          作者: 時(shí)間:2011-11-21 來源:網(wǎng)絡(luò) 收藏
          4 HAL架構(gòu)
          系統(tǒng)軟件架構(gòu)如圖2所示。用HAL將各I/O通道、ADC通道、DAC通道、脈沖通道、編碼器通道成Pin,將對(duì)各模塊的操作成各個(gè)Function,將Pin和Function封裝在命名為hal_CNC的Component中。

          本文引用地址:http://www.ex-cimer.com/article/150042.htm

          在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。該操作通過調(diào)用自定義的export()函數(shù)來完成。以DAC模塊為例,操作如下:
          for(n=0;n8;n++)
          export_dac(n,CNC_driver); //導(dǎo)出Pin
          每次調(diào)用export_dac()時(shí),都會(huì)調(diào)用如下語句注冊(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通過該名稱對(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。



          關(guān)鍵詞: 抽象 硬件 EMC2 實(shí)現(xiàn)

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();