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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > LonWorks現(xiàn)場總線設(shè)備驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)

          LonWorks現(xiàn)場總線設(shè)備驅(qū)動(dòng)設(shè)計(jì)與實(shí)現(xiàn)

          作者:劉 廣 石婷婷 時(shí)間:2008-06-04 來源:中國測控網(wǎng) 收藏

            1  引言

            新設(shè)備及新的接口規(guī)范等的不斷出現(xiàn),使得操作系統(tǒng)的設(shè)備驅(qū)動(dòng)部分的開發(fā)工作層出不窮。我們?cè)诨?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/嵌入式">嵌入式的開發(fā)中,首先遇到了現(xiàn)場總線設(shè)備的驅(qū)動(dòng)程序問題。于是我們對(duì)的驅(qū)動(dòng)程序?qū)崿F(xiàn)機(jī)制進(jìn)行了深入研究,并開發(fā)了現(xiàn)場總線設(shè)備的驅(qū)動(dòng)程序。

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

            2  關(guān)于現(xiàn)場總線

            現(xiàn)場總線是一種工業(yè)數(shù)據(jù)總線,是連接智能現(xiàn)場設(shè)備和自動(dòng)化系統(tǒng)的高可靠的數(shù)字式、雙向傳輸?shù)耐ㄐ偶夹g(shù),可方便地構(gòu)成全數(shù)字化的分布式現(xiàn)場控制網(wǎng)絡(luò)。對(duì)于防護(hù)工程這種工程軸線長、監(jiān)控測點(diǎn)分散的系統(tǒng),特別適合采用現(xiàn)場總線技術(shù)構(gòu)成工程的分布式智能化控制系統(tǒng)。

            在各種現(xiàn)場總線中,LonWorks總線技術(shù)以其在技術(shù)先進(jìn)性、可靠性、開放性、拓?fù)浣Y(jié)構(gòu)靈活性等方面獨(dú)特的優(yōu)勢(shì),為集散式監(jiān)控系統(tǒng)提供了很強(qiáng)的實(shí)現(xiàn)手段。使其特別適合于建筑的樓宇自動(dòng)化系統(tǒng)。根據(jù)防護(hù)工程是一種特殊的地下建筑工程以及其布局特點(diǎn),特別適合采用LonWorks現(xiàn)場總線技術(shù)實(shí)現(xiàn)其內(nèi)部設(shè)備的自動(dòng)化監(jiān)控。

            網(wǎng)絡(luò)接口卡是主計(jì)算機(jī)與LonWorks網(wǎng)絡(luò)的接口,使計(jì)算機(jī)能夠完成與LonWorks節(jié)點(diǎn)之間的數(shù)據(jù)交換。在我們?cè)O(shè)計(jì)的中,采用專門的LonWorks現(xiàn)場總線接口卡作為CPU與Lon- Works現(xiàn)場總線網(wǎng)絡(luò)之間的接口設(shè)備。

            2.1  LonWorks現(xiàn)場總線網(wǎng)卡的原理

            了解LonWorks現(xiàn)場總線卡的工作原理,對(duì)編寫驅(qū)動(dòng)程序是必要的,故我們首先給出其工作原理,并對(duì)此作一些必要的解釋。圖1是嵌入式LonWorks網(wǎng)卡的硬件電路方框圖。

                 

                                  圖1 ISA網(wǎng)卡的硬件電路方框圖

            過去實(shí)現(xiàn)微控制器與ISA總線的接口一般使用8155、8255,電路復(fù)雜,調(diào)試?yán)щy,在本網(wǎng)卡的設(shè)計(jì)中,使用可編程邏輯陣列(CPLD)來實(shí)現(xiàn)與ISA總線的接口邏輯,只用一個(gè)芯片就完成了所有功能,大大簡化了網(wǎng)卡的電路。

            2.2  LonWorks現(xiàn)場總線網(wǎng)卡的工作過程

            計(jì)算機(jī)與微控制器之間數(shù)據(jù)交換接口的應(yīng)用程序框圖如圖2、3所示。在程序框圖中,主要實(shí)現(xiàn)了計(jì)算機(jī)與微控制器之間讀寫數(shù)據(jù)、置標(biāo)志位和清除標(biāo)志位的功能。CPLD內(nèi)部實(shí)現(xiàn)了存儲(chǔ)數(shù)據(jù)和標(biāo)志位的寄存器。

                 

                                               圖2  主機(jī)寫數(shù)據(jù)程序框圖

                  

                                            圖3 從機(jī)接收數(shù)據(jù)程序框圖

            3  LonWorks現(xiàn)場總線網(wǎng)卡設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)

            我們?cè)?a class="contentlabel" href="http://www.ex-cimer.com/news/listbylabel/label/Linux">Linux平臺(tái)上開發(fā)和設(shè)計(jì)了LonWorks現(xiàn)場總線網(wǎng)卡的軟件。軟件部分由應(yīng)用程序和設(shè)備驅(qū)動(dòng)程序兩部分構(gòu)成,這里首先主要討論的是設(shè)備驅(qū)動(dòng)程序部分。在Linux平臺(tái)上實(shí)現(xiàn)對(duì)硬件的驅(qū)動(dòng)支持可以有兩種方式:一種是直接在用戶空間來實(shí)現(xiàn);另一種是使用Linux內(nèi)核中提供的機(jī)制來實(shí)現(xiàn)??紤]到用戶空間驅(qū)動(dòng)程序的局限性,比如為了訪問特權(quán)指令(I/O指令)必須做一些影響系統(tǒng)安全的設(shè)置等等,我們?cè)陂_發(fā)中采用了第二種方式。

            3.1  Linux的可加載模塊機(jī)制

            Linux內(nèi)核提供了兩種機(jī)制來開發(fā)設(shè)備驅(qū)動(dòng)程序:一種是直接把驅(qū)動(dòng)程序鏈接到內(nèi)核中:另一種則是通過稱為Linux可加載模塊的機(jī)制來開發(fā)可動(dòng)態(tài)加載和卸載的驅(qū)動(dòng)模塊。而第一種方式可以在后一種方式成功后,采用與內(nèi)核一起提供的配置工具和接口來完成。所以,我們只研究可加載模塊機(jī)制。

            Linux作為單核結(jié)構(gòu)其效率比較高,但是系統(tǒng)靈活性不足,為了平衡這兩者的關(guān)系,它提供了可動(dòng)態(tài)加載機(jī)制。利用這種機(jī)制我們可以開發(fā)Linux內(nèi)核模塊,并且可以動(dòng)態(tài)的對(duì)它加載和卸載。Linux下的設(shè)備驅(qū)動(dòng)程序一般都支持這種方式,且模塊被加載到內(nèi)核后,它就可以任意的利用核心提供的各種資源和服務(wù)了。為了讓模塊利用核心提供的資源,Linux內(nèi)核維護(hù)了一張所有內(nèi)核資源的符號(hào)表(在接下來的部分我們稱它為內(nèi)核資源符號(hào)表),用于在模塊載入時(shí)解決對(duì)相應(yīng)資源的引用問題。并且,Linux允許模塊的堆棧操作,由此一個(gè)模塊可以使用其他模塊所提供的資源。也就是說:一個(gè)模塊對(duì)另一個(gè)模塊的資源的使用與其對(duì)內(nèi)核資源的使用非常相似,不同的只是這些服務(wù)的資源從屬于另一個(gè)模塊而已。每當(dāng)一個(gè)模塊被加載Linux就會(huì)有一個(gè)修改內(nèi)核資源符號(hào)表的過程,將該模塊所提供的服務(wù)和資源加入進(jìn)去,這樣另一個(gè)模塊載入時(shí),如果需要就可以引用這個(gè)模塊的資源了。而卸載一個(gè)模塊時(shí),就要知道當(dāng)前模塊是否正在被使用。如果沒有被使用,在卸載時(shí)要能夠通知該模塊它將被卸載,以便由它自己釋放已被它占用的系統(tǒng)資源。然后,Linux還要從內(nèi)核資源符號(hào)表中刪除所有該模塊提供的資源和服務(wù)。

            從上面的原理分析可知,內(nèi)核模塊編寫時(shí)應(yīng)該具有兩個(gè)主要的接口函數(shù):init_module()用于在模塊加載時(shí)由加載模塊的工具調(diào)用,以便于注冊(cè)一些必要的服務(wù)和申請(qǐng)一些資源。cleanup_module()用于在模塊卸載時(shí)由刪除模塊的工具來調(diào)用,清除掉由init_module()所做的工作,從而使內(nèi)核模塊可以安全的卸載。其中對(duì)init_module()調(diào)用的一種工具是在根用戶執(zhí)行insmod命令來加載模塊時(shí)執(zhí)行。而對(duì)于cleanup_module()的調(diào)用是在根用戶使用rmmod命令來卸載模塊時(shí)執(zhí)行。

            3.2  Linux下設(shè)備驅(qū)動(dòng)程序

            系統(tǒng)調(diào)用是操作系統(tǒng)內(nèi)核和應(yīng)用程序之間的接口,設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核和機(jī)器硬件之間的接口。設(shè)備驅(qū)動(dòng)程序?yàn)閼?yīng)用程序屏蔽了硬件的細(xì)節(jié),這樣在應(yīng)用程序看來,硬件設(shè)備只是一個(gè)設(shè)備文件,可以通過相應(yīng)的系統(tǒng)調(diào)用象操作普通文件一樣對(duì)硬件設(shè)備進(jìn)行操作。

            (1) Linux設(shè)備分類

            Linux系統(tǒng)的設(shè)備分為字符設(shè)備(char device),塊設(shè)備(block device)和網(wǎng)絡(luò)設(shè)備(network device)三種。字符設(shè)備是指存取時(shí)沒有緩存的設(shè)備,如系統(tǒng)的串口設(shè)備/dev/cua0, /dev/cual。塊設(shè)備的讀寫則都有緩存來支持,只能以塊為單位進(jìn)行讀寫,并且塊設(shè)備必須能夠隨機(jī)存取(random access),即不管塊處于設(shè)備的什么地方都可以對(duì)它進(jìn)行讀寫,字符設(shè)備則沒有這個(gè)要求。塊設(shè)備主要包括硬盤軟盤設(shè)備,CD-ROM等。網(wǎng)絡(luò)設(shè)備在Linux里做專門的處理。Linux的網(wǎng)絡(luò)系統(tǒng)主要是基于BSD unix的socket機(jī)制。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 3 下一頁

          評(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); })();