国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

ACME2.0采集前端軟件升級改進(jìn)研究

2014-04-23 07:02樊琦余衛(wèi)東陳文輝程剛
測井技術(shù) 2014年2期
關(guān)鍵詞:采集卡寄存器中斷

樊琦,余衛(wèi)東,陳文輝,程剛

(中國石油集團(tuán)測井有限公司,陜西 西安 710077)

0 引 言

EILog測井系統(tǒng)的采集箱體硬件采用基于cPCI(Compact PCI)總線的體系結(jié)構(gòu),前端軟件是基于Vx Works實(shí)時(shí)操作系統(tǒng)的應(yīng)用,在采集箱體中的單板計(jì)算機(jī)上運(yùn)行,是數(shù)據(jù)采集卡和測井采集控制管 理平 臺(tái) ACME[1](Acquisition Control Management Expert)的中間橋梁,承擔(dān)著命令下發(fā)和數(shù)據(jù)上傳的任務(wù)。伴隨著EILog系統(tǒng)大規(guī)模推廣應(yīng)用,作為核心組成部分的采集箱體也在不斷升級,以滿足不斷提升的測井作業(yè)要求。前端軟件在單板計(jì)算機(jī)和數(shù)據(jù)采集卡得到更新后,自身也需要升級來匹配硬件運(yùn)行。由此,引出了在軟硬件升級過程中遇到的精確延時(shí)和中斷管理等2個(gè)關(guān)鍵性問題。采集時(shí)序正確和運(yùn)行穩(wěn)定是保證數(shù)據(jù)采集的準(zhǔn)確性的重要因素,只有解決了這2個(gè)問題,采集前端軟件才能穩(wěn)定地通用于新舊硬件之上,采集到正確的井下數(shù)據(jù)。本文分析了問題產(chǎn)生的原因,闡述了對應(yīng)的解決方案并給出了具體的實(shí)現(xiàn)方法。改進(jìn)后的軟件在實(shí)際應(yīng)用中取得了良好的效果。

1 Vx Works精確延時(shí)

EILog系統(tǒng)采集箱體首批使用的是SBS公司的CT7型號(hào)單板計(jì)算機(jī),它采用Pentium III單核處理器,運(yùn)行Wind River公司的Vx Works5.4操作系統(tǒng)。EILog系統(tǒng)在高速AD采集等情況下需要微秒級的準(zhǔn)確定時(shí),而系統(tǒng)提供的延時(shí)函數(shù)在精確性方面不能滿足要求。在EILog推廣應(yīng)用初期采用簡單有效的處理方法是執(zhí)行空循環(huán)完成需要的延時(shí),即根據(jù)系統(tǒng)時(shí)鐘頻率和需要的延時(shí)計(jì)算出要執(zhí)行的空循環(huán)次數(shù)。但該方法在單板計(jì)算機(jī)更換為Advantech公司MIC3392型號(hào)以后就不再適用,處理器頻率的提升和核心的增加以及其他因素使得計(jì)算空循環(huán)的次數(shù)變得復(fù)雜,并且這個(gè)次數(shù)在每次系統(tǒng)運(yùn)行時(shí)是在一個(gè)范圍內(nèi)波動(dòng)而不是一個(gè)固定的數(shù)值。因此,采用固定次數(shù)的空循環(huán)完成延時(shí)不再是一個(gè)可靠的解決方案。

1.1 Vx Works系統(tǒng)提供的延時(shí)方法分析

(1)task Delay()使調(diào)用該函數(shù)的任務(wù)延時(shí)n個(gè)tick(內(nèi)核時(shí)鐘周期)。該方法缺點(diǎn)是task Delay(n)表示任務(wù)延時(shí)至第n個(gè)系統(tǒng)時(shí)鐘到來的時(shí)刻,task-Delay有接近1個(gè)tick的誤差存在。

(2)WatchDog看門狗[2]在經(jīng)過指定的延時(shí)后,實(shí)現(xiàn)在系統(tǒng)時(shí)鐘ISR的上下文中運(yùn)行指定的程序。如果利用看門狗定時(shí)器實(shí)現(xiàn)延時(shí),則存在與task-Delay()一樣的精度上的缺陷,并且與中斷服務(wù)程序的約束一樣,看門狗定時(shí)掛接的程序編寫有一定的限制。

(3)sleep()和nanosleep()是系統(tǒng)提供的延時(shí)函數(shù)接口。sleep()以秒為單位,nanosleep()參數(shù)可精確到納秒,但傳參是時(shí)鐘的結(jié)構(gòu)體,實(shí)際上只能做到大于或等于這個(gè)時(shí)間。因?yàn)閟leep()或nanosleep()函數(shù)延時(shí)的時(shí)間基準(zhǔn)仍是tick,調(diào)用此函數(shù)的任務(wù)處于任務(wù)延時(shí)狀態(tài),這點(diǎn)與task Delay()一致。

(4)sys Timestamp()通過讀取該定時(shí)器當(dāng)前計(jì)數(shù)值獲取高精度定時(shí)。使用sys Timestamp Freq()函數(shù)可以得到系統(tǒng)時(shí)間的頻率,它反映的是CPU定時(shí)器的基準(zhǔn)頻率。但該法依靠查詢方式實(shí)現(xiàn),頻繁使用非常影響系統(tǒng)執(zhí)行效率。

(5)輔助時(shí)鐘利用目標(biāo)板上CPU的另一個(gè)定時(shí)器(除了系統(tǒng)時(shí)鐘之外)中斷實(shí)現(xiàn),容易實(shí)現(xiàn)毫秒級甚至微秒級定時(shí)。但是使用上存在缺陷,不能實(shí)現(xiàn)多個(gè)任務(wù)同時(shí)調(diào)用,且需占用CPU的1個(gè)時(shí)鐘資源。

1.2 自刻度計(jì)算的硬延時(shí)函數(shù)方案

以上的方案有的是精度不夠,有的是應(yīng)用場合不適用,因此使用空循環(huán)實(shí)現(xiàn)精確的“硬”延時(shí)成為了一個(gè)理想的選擇。

1.2.1 硬延時(shí)函數(shù)的設(shè)計(jì)

實(shí)現(xiàn)該延時(shí)函數(shù)的思想是在每次調(diào)用此函數(shù)時(shí)通過系統(tǒng)提供的sysClk ReteGet()函數(shù)和tick Get()函數(shù)刻度單位時(shí)間定時(shí)循環(huán)次數(shù)。因此在第1次調(diào)用時(shí)消耗的時(shí)間比請求的時(shí)間要長很多;當(dāng)系統(tǒng)時(shí)鐘頻率變化時(shí),需要重新刻度單位時(shí)間循環(huán)次數(shù)。

1.2.2 硬延時(shí)函數(shù)的實(shí)現(xiàn)

硬延時(shí)函數(shù)的主要實(shí)現(xiàn)步驟為

(1)得到要循環(huán)的定時(shí)參數(shù)u,判斷是否已有計(jì)算過delay Loop值。

(2)如果已有delay Loop值,則直接根據(jù)送入?yún)?shù)u和delay Loop雙重循環(huán),之后結(jié)束返回。

(3)否則根據(jù)系統(tǒng)設(shè)定的每秒tick數(shù)首次遞歸計(jì)算delay Loop。

(4)根據(jù)遞歸結(jié)果調(diào)整一次循環(huán)條件。

(5)根據(jù)調(diào)整后的循環(huán)條件再次遞歸計(jì)算delay Loop,在遞歸結(jié)束后即得到每微秒對應(yīng)的空循環(huán)次數(shù)。

其中,delay Loop是要計(jì)算和使用的每微秒對應(yīng)的空循環(huán)次數(shù);u為調(diào)用函數(shù)傳遞的延時(shí)參數(shù)(單位為μs);mpt為每秒系統(tǒng)的tick數(shù)。

下面給出實(shí)現(xiàn)代碼。

從實(shí)現(xiàn)代碼可以看出,如果延時(shí)函數(shù)是首次調(diào)用,那么將會(huì)通過遞歸計(jì)算delay Loop,完成刻度過程會(huì)消耗稍多的時(shí)間;如果不是首次調(diào)用,則函數(shù)直接通過傳入的參數(shù)和delay Loop運(yùn)行空循環(huán)完成延時(shí)。因此,在測井采集過程還沒有開始以前調(diào)用一次延時(shí)函數(shù)時(shí)很有必要的,并且為了刻度準(zhǔn)確,避免極端情況,在首次調(diào)用應(yīng)傳入一個(gè)較大的延時(shí)參數(shù)(如1 s)計(jì)算,使delay Loop更接近真實(shí)值。

2 相同中斷號(hào)PCⅠ設(shè)備數(shù)據(jù)采集優(yōu)化

計(jì)算機(jī)BIOS技術(shù)的發(fā)展也使部署在PCI總線上的數(shù)據(jù)采集卡中斷分配有了變化。在使用CT7時(shí),BIOS分配給板載設(shè)備(如網(wǎng)卡等)和PCI采集卡設(shè)備的中斷號(hào)都是不同的,不存在中斷沖突處理問題。在更新為MIC3392后,為了使PCI總線可以同時(shí)掛接更多的設(shè)備,BIOS允許不同的PCI設(shè)備使用相同的中斷號(hào),因此采集卡設(shè)備和網(wǎng)絡(luò)設(shè)備有分配到相同中斷號(hào)的可能性。

2.1 改進(jìn)前數(shù)據(jù)采集中斷控制

EILog之前采集數(shù)據(jù)是通過中斷號(hào)判斷數(shù)據(jù)來源于某塊采集卡,并且采集是通過“使能中斷-采集數(shù)據(jù)-關(guān)閉中斷”流程完成。

根據(jù)上面的實(shí)現(xiàn)代碼可以發(fā)現(xiàn),這樣做會(huì)導(dǎo)致2個(gè)問題:①在關(guān)閉中斷時(shí)會(huì)將與該采集卡相同中斷的其他設(shè)備中斷關(guān)閉;②采集數(shù)據(jù)時(shí)會(huì)將相同中斷號(hào)的設(shè)備發(fā)來的中斷信號(hào)全部響應(yīng)并且轉(zhuǎn)到中斷服務(wù)程序。

通過中斷號(hào)控制采集設(shè)備的使能與關(guān)閉已不能適用于新硬件的場合。這種在系統(tǒng)層面粗放的控制在沒有共享中斷的情況下是不會(huì)出問題的,在有中斷共享的情況下需要更精細(xì)的控制,將PCI設(shè)備的控制精確到每個(gè)獨(dú)立設(shè)備。

2.2 PCⅠ設(shè)備配置空間簡介

根據(jù)PCI規(guī)范[3],PCI有3個(gè)相互獨(dú)立的物理地址空間:設(shè)備存儲(chǔ)器地址空間、I/O地址空間和配置空間。配置空間是PCI所特有的1個(gè)物理空間。由于PCI支持設(shè)備即插即用,所以PCI設(shè)備不占用固定的內(nèi)存地址空間或I/O地址空間,而是由操作系統(tǒng)決定其映射的基址。

PCI總線通過橋芯片級連。按與CPU總線所隔的橋數(shù)目和同一層總線的掃描順序,從0開始依次編號(hào),擴(kuò)展最多到256,就是總線號(hào);在指定的局部總線上,按硬件掃描順序從0開始依次編號(hào),擴(kuò)展最多到32,就是設(shè)備號(hào);在1個(gè)多功能PCI設(shè)備上,按設(shè)備上配置存儲(chǔ)區(qū)的順序從0開始依次編號(hào),稱為功能號(hào),每個(gè)PCI設(shè)備最多可以實(shí)現(xiàn)8種功能,一般情況只有1個(gè)功能。這3個(gè)號(hào)組合起來就可確定唯一的1個(gè)PCI設(shè)備以及該設(shè)備上的某項(xiàng)功能。通過這3個(gè)參數(shù)(可組成PCI設(shè)備標(biāo)識(shí)符)就可操作PCI設(shè)備。

2.2.1 PCⅠ配置空間

PCI總線規(guī)范定義的配置空間總長度為256 B,配置信息按一定的順序和大小依次存放。前64 B的配置空間稱為配置頭,對于所有的設(shè)備都一樣,配置頭的主要功能是用來識(shí)別設(shè)備、定義主機(jī)訪問PCI卡的方式(I/O訪問或者存儲(chǔ)器訪問,還有中斷信息)。其余的192 B稱為本地配置空間,主要定義卡上局部總線的特性、本地空間基地址及范圍等。

2.2.2 PCⅠ配置空間的功能

配置空間中配置頭里的寄存器實(shí)現(xiàn)了很多功能,這里介紹重要的3類。

(1)設(shè)備識(shí)別

Vendor ID:廠商ID。

Device ID:設(shè)備ID。

Class Code:類代碼。共3字節(jié),分別是類代碼、子類代碼、編程接口。

Header Type:指示Header中從地址10 H到3FH區(qū)域的內(nèi)容格式,同時(shí)指示該設(shè)備是否為多功能設(shè)備。

(2)設(shè)備控制

Status:狀態(tài)寄存器。不同的位代表不同出錯(cuò)狀態(tài)。

Command:指令寄存器。不同的位代表不同的含義。

(3)基地址配置

Base Address:基地址寄存器。它報(bào)告設(shè)備寄存器或設(shè)備RAM在I/O端口地址空間(或物理地址空間)的地址。

2.3 基于Command寄存器的PCⅠ設(shè)備使用優(yōu)化方案

2.3.1 Command寄存器

Command寄存器在PCI配置頭偏移04h的位置,長度為2 B。圖1是Command寄存器每一位的說明。

圖1 Command寄存器位說明

除第11~15位被保留外,Command寄存器的第0~10位均有對應(yīng)的功能,表1是對每一位功能說明。

表1 Command寄存器對應(yīng)各位功能簡要說明

2.3.2 改進(jìn)的采集方案和實(shí)現(xiàn)

根據(jù)PCI配置空間和表1可以發(fā)現(xiàn),欲單獨(dú)控制某一PCI設(shè)備使能與否,只要將該設(shè)備的Command寄存器的第10位進(jìn)行設(shè)置即可,而不需對這一PCI設(shè)備對應(yīng)的中斷號(hào)使能或者禁止。因此,使用Vx Works系統(tǒng)的PCI寄存器配置函數(shù)[4]即可完成采集數(shù)據(jù)時(shí)設(shè)備的禁止和使能操作。

(1)Vx Works PCI頭配置函數(shù)簡介

①寫PCI配置參數(shù):

pciConfigOut Word(p BusNo,p DeviceNo,p Func No,address,value);

說明:將值value寫入到由總線號(hào)、設(shè)備號(hào)和功能號(hào)決定的PCI設(shè)備address地址的寄存器。

②讀PCI配置參數(shù):

pciConfigIn Word(pBus No,pDeviceNo,p Func No,address,(int*)&value);

說明:將由總線號(hào)、設(shè)備號(hào)和功能號(hào)決定的PCI設(shè)備address地址的寄存器讀出到value。

類似地,Vx Works系統(tǒng)還提供有pciConfig Out Long()、pciConfigIn Long()、pciConfigOutByte()、pciConfigInByte()等函數(shù),它們的區(qū)別只是讀寫時(shí)的字節(jié)多少不同,用法均一樣,不再贅述。

(2)PCI設(shè)備中斷控制代碼實(shí)現(xiàn)

應(yīng)用上面的代碼即可以實(shí)現(xiàn)在使能和禁止采集卡中斷的發(fā)生而不會(huì)影響到與其中斷號(hào)相同的其他PCI設(shè)備,解決了前文提出的在中斷共享時(shí)使能和禁止PCI設(shè)備帶來的問題。

3 結(jié) 論

(1)通過對采集流程的延時(shí)算法升級和PCI采集卡精細(xì)控制的改進(jìn),升級后的EILog采集前端軟件能夠很好地運(yùn)行在新舊采集硬件上,提升了對硬件的兼容性。

(2)硬延時(shí)算法和PCI設(shè)備控制方法具有通用性。經(jīng)過測試,改進(jìn)的軟件目前已在ACME2.0測井采集控制平臺(tái)上正式應(yīng)用并取得了良好的效果。

[1] 陳江浩,陳文輝,余衛(wèi)東,等.ACME測井采集控制管理平臺(tái)開發(fā)與應(yīng)用 [J].石油儀器,2010,24(5):77-79.

[2] 程敬原.Vx Works軟件開發(fā)項(xiàng)目實(shí)例完全解析 [M].北京:中國電力出版社,2005:88-90.

[3] PCI-SIG.PCI Local Bus Specification Revision 3.0 [Z].2002:186-218.

[4] 李貴山,戚德虎.PCI局部總線開發(fā)者指南 [M].西安:西安電子科技大學(xué)出版社,1997:110-116.

猜你喜歡
采集卡寄存器中斷
高精度AD采集卡性能測試及評價(jià)方法研究
STM32和51單片機(jī)寄存器映射原理異同分析
Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
血液采集卡存儲(chǔ)裝置的設(shè)計(jì)與應(yīng)用
基于FPGA的中斷控制器設(shè)計(jì)*
面向數(shù)控機(jī)床的多通道傳感數(shù)據(jù)采集卡設(shè)計(jì)
跟蹤導(dǎo)練(二)(5)
千里移防,衛(wèi)勤保障不中斷
并行高速采樣在地震物理模擬采集中的應(yīng)用
FPGA內(nèi)嵌PowerPC的中斷響應(yīng)分析