摘要:結(jié)合uClinux操作系統(tǒng)和S3C4510B的特點(diǎn),設(shè)計(jì)了以中斷方式實(shí)現(xiàn)的實(shí)時(shí)特征采集系統(tǒng),通過開辟非實(shí)時(shí)程序與實(shí)時(shí)特征采集系統(tǒng)共享的存儲(chǔ)區(qū),將大大地提升紙幣識(shí)別系統(tǒng)的并發(fā)處理能力。但是uClinux操作系統(tǒng)并不能完美地滿足實(shí)時(shí)采集系統(tǒng)對(duì)實(shí)時(shí)性的要求。為了能使用功能強(qiáng)大并且免費(fèi)的uClinux,有必要改進(jìn)uClinux的中斷延遲時(shí)間,提出了改進(jìn)方法。經(jīng)過改進(jìn)后的uClinux可以滿足要求。
關(guān)鍵詞:uClinux; S3C4510B; 紙幣識(shí)別系統(tǒng); 實(shí)時(shí)采集系統(tǒng); 中斷延遲
中圖分類號(hào):TP311文獻(xiàn)標(biāo)志碼:A
文章編號(hào):1001-3695(2008)04-1261-03
紙幣識(shí)別系統(tǒng)已經(jīng)廣泛應(yīng)用于金融、商業(yè)、交通、電信、公用事業(yè)、文化娛樂等各個(gè)領(lǐng)域的自動(dòng)存款機(jī)、自助信息亭、自動(dòng)充值機(jī)、自動(dòng)售貨機(jī)、自動(dòng)售卡機(jī)、自動(dòng)售票機(jī)、紙硬幣兌換機(jī)、自動(dòng)繳費(fèi)機(jī)等。經(jīng)過幾十年的發(fā)展,紙幣識(shí)別技術(shù)已經(jīng)發(fā)展到了比較成熟的階段,能夠達(dá)到比較高的識(shí)別水平。識(shí)別器的機(jī)械、電機(jī)控制方面也已比較完善。但目前國(guó)內(nèi)外主要廠商的主流產(chǎn)品都是基于單片機(jī)(無操作系統(tǒng)),在功能、擴(kuò)展性等方面比較有限。隨著技術(shù)的革新和自助服務(wù)在國(guó)內(nèi)的迅速興起,基于單片機(jī)的紙幣識(shí)別系統(tǒng)已經(jīng)越來越不能滿足市場(chǎng)需求。
基于單片機(jī)的紙幣識(shí)別系統(tǒng)中,由于處理器處理能力和系統(tǒng)資源的限制,采集系統(tǒng)在采集時(shí)獨(dú)占處理器,其他系統(tǒng)只有等采集結(jié)束后才能處理采集到的數(shù)據(jù),這樣使得整個(gè)處理時(shí)間延遲了不少。并且單片機(jī)本身功能簡(jiǎn)單,對(duì)現(xiàn)在很多新增功能不能很好地支持。
本文從uClinux操作系統(tǒng)[1]和S3C4510B[2]的特點(diǎn)出發(fā),通過對(duì)uClinux的改進(jìn),結(jié)合紙幣識(shí)別系統(tǒng)采集系統(tǒng)的要求,采用中斷方式實(shí)現(xiàn)采集。本采集系統(tǒng)將采集到的數(shù)據(jù)送往非實(shí)時(shí)程序與采集系統(tǒng)共享的內(nèi)存區(qū),縮短了其他模塊的訪問時(shí)間,這樣將提高整個(gè)紙幣識(shí)別系統(tǒng)的并發(fā)處理能力,充分利用處理器的強(qiáng)大處理能力和系統(tǒng)資源。由于uClinux免費(fèi),而且操作系統(tǒng)功能強(qiáng)大,使得紙幣識(shí)別系統(tǒng)能夠支持更多功能,并降低其成本,可擴(kuò)展性大大增強(qiáng)。
1采集系統(tǒng)
1.1硬件簡(jiǎn)介
特殊光發(fā)光/接收電路是紙幣識(shí)別系統(tǒng)的關(guān)鍵信號(hào)收集電路,具體結(jié)構(gòu)如圖1所示。在紙幣通道上、下設(shè)有特殊光發(fā)光部件和接收部件,S3C4510B對(duì)發(fā)光部件進(jìn)行強(qiáng)度控制。當(dāng)有紙幣通過時(shí),接收部件將檢測(cè)到的特殊光信號(hào)傳給模數(shù)轉(zhuǎn)換器TLC1543。共有三路類似的特殊光發(fā)光/接收電路,這三路信號(hào)通過TLC1543后由SPI串行總線傳回S3C4510B。
僅有以上特殊光發(fā)光/接收電路還是不夠的,要采集多個(gè)不同點(diǎn)的信息還要借助其他的硬件設(shè)備,碼盤光耦信號(hào)收集電路和馬達(dá)電機(jī)驅(qū)動(dòng)電路必不可少。
馬達(dá)電機(jī)的作用是帶動(dòng)傳動(dòng)裝置將放入紙幣通道的紙幣卷進(jìn)紙幣器。在紙幣通道上下都有特殊的發(fā)光部件和接收部件,它們?cè)诩垘疟痪砣爰垘牌鲿r(shí)是保存不動(dòng)的,那么紙幣上的多個(gè)點(diǎn)就能被特殊的發(fā)光部件掃描,這樣就實(shí)現(xiàn)了對(duì)紙幣上多個(gè)點(diǎn)的數(shù)據(jù)采集。馬達(dá)電機(jī)驅(qū)動(dòng)電路如圖2所示。S3C4510B通過大電流電機(jī)驅(qū)動(dòng)芯片L298驅(qū)動(dòng)步進(jìn)電機(jī),電機(jī)的過載信號(hào)也由L298傳回。
碼盤是安裝在電機(jī)旁對(duì)電機(jī)進(jìn)行測(cè)速的角度傳感器,碼盤光耦是測(cè)速光信號(hào)的發(fā)生器和接收器。碼盤光耦將接收到的信號(hào)經(jīng)施密特觸發(fā)器整形后,傳送到S3C4510B的I/O口。這個(gè)電路對(duì)實(shí)現(xiàn)采集系統(tǒng)的意義重大。而本文所設(shè)計(jì)的采集系統(tǒng)也是依賴這一電路產(chǎn)生的反饋信號(hào),形成中斷,從而實(shí)現(xiàn)對(duì)采集數(shù)據(jù)的讀取。碼盤光耦信號(hào)收集電路如圖3 所示。
以上的硬件電路再加上傳動(dòng)裝置等,就構(gòu)成了采集系統(tǒng)的硬件基礎(chǔ)設(shè)備。
1.2程序設(shè)計(jì)
本文設(shè)計(jì)的采集系統(tǒng),所采集的數(shù)據(jù)是紙幣上等距離點(diǎn)上的數(shù)據(jù),采集到的數(shù)據(jù)通過一些算法[3,4],與預(yù)先取得的保存在面額數(shù)據(jù)特征庫(kù)中的數(shù)據(jù)對(duì)比,判斷紙幣的真假,從而使紙幣識(shí)別系統(tǒng)決定是否接受被檢測(cè)的紙幣。
可見,能正確地取得紙幣的數(shù)據(jù)對(duì)這些算法來說是非常重要的。當(dāng)紙幣的一端進(jìn)入紙幣通道時(shí),位置傳感器提示系統(tǒng),紙幣進(jìn)入預(yù)定的開始進(jìn)入位置,而后通過馬達(dá)和傳動(dòng)裝置,紙幣就被卷入紙幣器中。馬達(dá)轉(zhuǎn)過相同的角度,紙幣也就移動(dòng)相同的距離,而碼盤光耦電路每產(chǎn)生一個(gè)反饋信號(hào),馬達(dá)轉(zhuǎn)過的角度是一個(gè)固定值,紙幣移動(dòng)距離也就是一個(gè)固定值,則根據(jù)這個(gè)反饋信號(hào)就能實(shí)現(xiàn)固定等距離點(diǎn)的采集, 所以硬件的設(shè)計(jì)是能保證的。當(dāng)紙幣上的定點(diǎn)到達(dá)紙幣識(shí)別系統(tǒng)特殊光發(fā)光部件和接收部件中間時(shí),通知采集程序此時(shí)數(shù)據(jù)有效。馬達(dá)轉(zhuǎn)過多少角度碼盤光耦產(chǎn)生反饋信號(hào),是由碼盤光耦的規(guī)格決定。
數(shù)據(jù)采集系統(tǒng)的程序部分要解決的問題就是能夠及時(shí)根據(jù)碼盤光耦電路的反饋信號(hào),實(shí)時(shí)地將特殊光傳感器中的數(shù)據(jù)讀出,而后保存。由于uClinux操作系統(tǒng)本身的限制,紙幣識(shí)別系統(tǒng)中只有一個(gè)實(shí)時(shí)任務(wù)——采集,考慮采用中斷的方式解決這個(gè)問題。
在本系統(tǒng)中,根據(jù)采樣定理,每6 ms采集一次數(shù)據(jù),選用了適合本采集系統(tǒng)規(guī)格的馬達(dá)和碼盤光耦。為了使基于S3C4510B和uClinux的紙幣識(shí)別系統(tǒng)充分發(fā)揮同時(shí)采集和處理數(shù)據(jù)的能力,可以從S3C4510B的內(nèi)存中開辟一個(gè)獨(dú)立的區(qū)域。該區(qū)域是用來提供給非實(shí)時(shí)程序和采集系統(tǒng)共享的內(nèi)存,專門用來存儲(chǔ)采集數(shù)據(jù),這樣非實(shí)時(shí)程序無須調(diào)用系統(tǒng)或驅(qū)動(dòng)程序去訪問采集到的數(shù)據(jù),從而大大提高了將采集數(shù)據(jù)送給非實(shí)時(shí)程序的速度,提高了處理速度。由于間隔6 ms,很有可能用戶程序還沒有用到上個(gè)中斷保存的數(shù)據(jù),下個(gè)中斷就來了,那個(gè)區(qū)間需要有足夠的空間緩沖數(shù)據(jù),使未處理的數(shù)據(jù)不至于丟失。在中斷處理程序[5]中,所進(jìn)行的操作是將傳感器的數(shù)據(jù)放入共享的內(nèi)存區(qū)。
由于傳感器中的數(shù)據(jù)是動(dòng)態(tài)變化的,如果中斷不能及時(shí)地響應(yīng)并取出數(shù)據(jù),則得到的數(shù)據(jù)就不是紙幣對(duì)應(yīng)點(diǎn)上的數(shù)據(jù),在進(jìn)行數(shù)據(jù)比對(duì)時(shí),面額數(shù)據(jù)特征庫(kù)中的數(shù)據(jù)與實(shí)際采集得到的數(shù)據(jù)不是同一位置的數(shù)據(jù),這樣就會(huì)導(dǎo)致算法得到的結(jié)果與實(shí)際的不相符。
2實(shí)驗(yàn)結(jié)果
搭建好硬件平臺(tái),寫好采集程序,就可以進(jìn)行采集的實(shí)驗(yàn)。
對(duì)某種紙幣進(jìn)行了多次實(shí)驗(yàn),實(shí)驗(yàn)的結(jié)果并不是很好,誤判率比較高,不能達(dá)到實(shí)際應(yīng)用的程度。
實(shí)驗(yàn)采集到的數(shù)據(jù)與面額數(shù)據(jù)特征庫(kù)中數(shù)據(jù)進(jìn)行對(duì)比,可以得到特征對(duì)比曲線圖,如圖4所示。
將采集到的數(shù)據(jù)與面額數(shù)據(jù)特征庫(kù)中數(shù)據(jù)對(duì)比發(fā)現(xiàn),一些數(shù)據(jù)有比較大的抖動(dòng),在圖中用點(diǎn)標(biāo)記出來。比較相似度,歐式距離如下:
計(jì)算得到的歐式距離是64.792 0,這個(gè)值對(duì)于本紙幣識(shí)別系統(tǒng)已經(jīng)是相當(dāng)大了,超出了允許的范圍。
通過分析,中斷處理程序相對(duì)比較簡(jiǎn)單,取得數(shù)據(jù)的時(shí)間非常之小可以忽略不計(jì),所以延遲的時(shí)間主要就用在了中斷延遲上。將每次采集的多個(gè)中斷延遲時(shí)間讀出,發(fā)現(xiàn)uClinux的中斷延遲時(shí)間[6]普遍還是比較小,只是在某些時(shí)候才比較大,而這些點(diǎn)也正是數(shù)據(jù)抖動(dòng)比較大的點(diǎn),即偏差比較大的點(diǎn),所以只有通過縮短最大中斷延遲時(shí)間,才能獲得正確的數(shù)據(jù),減少偏差,達(dá)到比較好的實(shí)際效果。
3uClinux中斷延遲時(shí)間改進(jìn)方法
uClinux操作系統(tǒng)的中斷延遲時(shí)間不能完美滿足本模塊的要求。但考慮到uClinux的強(qiáng)大功能,大量可以利用的資源、可以免費(fèi)使用以及發(fā)展的潛力,使用這一操作系統(tǒng)將有助于紙幣識(shí)別系統(tǒng)的開發(fā)與維護(hù),所以縮短其中斷延遲[7] (interrupt latency)很有價(jià)值。
中斷延遲時(shí)間是指從中斷發(fā)生到系統(tǒng)獲知中斷,并開始執(zhí)行中斷服務(wù)子程序所需要的最大滯后時(shí)間。
系統(tǒng)在進(jìn)入臨界區(qū)代碼段之前都要關(guān)中斷,執(zhí)行完臨界代碼之后再開中斷。關(guān)中斷的時(shí)間越長(zhǎng),中斷延遲就越長(zhǎng)。中斷延遲由式(2)給出:
中斷延遲=關(guān)中斷的最長(zhǎng)時(shí)間+開始執(zhí)行中斷服務(wù)子程序的
第一條指令的時(shí)間(2)
現(xiàn)在已經(jīng)有很多比較成熟的技術(shù)來解決uClinux的這個(gè)問題,如增加內(nèi)核搶占點(diǎn)、雙內(nèi)核等[8]。在眾多方案中決定使用RTAI[8]的雙內(nèi)核機(jī)制來改進(jìn)uClinux。
RTAI是由意大利米蘭理工學(xué)院航天工程系發(fā)起開發(fā)的一個(gè)遵循GPL的開源項(xiàng)目。
uClinux改進(jìn)方案結(jié)構(gòu)圖如圖5所示。當(dāng)RTAI沒有加載時(shí),與普通的uClinux系統(tǒng)沒什么兩樣。當(dāng)RTAI模塊被uClinux加載時(shí),就會(huì)將uClinux系統(tǒng)作為RTAI的一個(gè)最低優(yōu)先級(jí)的任務(wù)來執(zhí)行;只有當(dāng)沒有實(shí)時(shí)任務(wù)運(yùn)行時(shí),uClinux才能獲得執(zhí)行的時(shí)間,uClinux中的一些非實(shí)時(shí)任務(wù)才能執(zhí)行。RTAI定義了一個(gè)硬件抽象層(HAL)。硬件抽象層是用來截取硬件中斷的,提供了一個(gè)最核心部分即中斷處理機(jī)制。當(dāng)外部產(chǎn)生中斷時(shí),它判斷中斷,將不同實(shí)時(shí)要求的中斷分派給uClinux或RTAI來處理。HAL中包括了一個(gè)關(guān)鍵組件:中斷描述符表IDT,它定義了一套指針來處理中斷例程,通過改寫指針指向的值就可以改變處理函數(shù)。RTAI還提供了細(xì)粒度的定時(shí)器管理和實(shí)時(shí)任務(wù)調(diào)動(dòng)。
RTAI面對(duì)的主要是Linux操作系統(tǒng),而對(duì)uClinux和S3C4510B沒有現(xiàn)成的代碼包,所以必須遵循這個(gè)RTAI的原理,自行移植。
S3C4510B的處理器是ARM7。RTAI有針對(duì)ARM處理器上的版本,所以可以參照以前版本進(jìn)行移植。由于沒有現(xiàn)成的代碼,HAL就必須針對(duì)現(xiàn)有的S3C4510B進(jìn)行改寫。HAL主要包括指向IDT的指針。打開/關(guān)閉中斷函數(shù),控制中斷mask/unmask函數(shù)、中斷狀態(tài)的數(shù)據(jù)描述符。RTAI要為每個(gè)中斷源定義一個(gè)全局的數(shù)據(jù)結(jié)構(gòu),它的主要結(jié)構(gòu)就是鏈表指針、中斷號(hào)、用于中斷屏蔽的標(biāo)志位和用于中斷懸掛的標(biāo)志位。S3C4510B不能使用MMU(memory management unit,內(nèi)存管理單元)[6],所以在內(nèi)存方面進(jìn)行移植時(shí)要特別小心。由于uClinux的時(shí)鐘中斷是10ms,它不能適應(yīng)實(shí)時(shí)性的要求,而RTAI是需要有細(xì)粒度的時(shí)鐘,考慮到S3C4510B上有兩個(gè)定時(shí)器,定時(shí)器0已被用于uClinux的時(shí)鐘中斷,于是利用定時(shí)器1為RTAI提供時(shí)鐘。還需要對(duì)uClinux的源代碼進(jìn)行必要修改,使用函數(shù)替換uClinux的關(guān)中斷和開中斷函數(shù),這樣當(dāng)uClinux關(guān)中斷后,仍然能被需要實(shí)時(shí)處理的任務(wù)給中斷。
由于設(shè)計(jì)的采集中斷處理程序相對(duì)比較簡(jiǎn)單,不會(huì)占用很多處理的時(shí)間,決定將采集放到RTAI的中斷處理程序中。為了使紙幣識(shí)別系統(tǒng)充分發(fā)揮同時(shí)采集和處理數(shù)據(jù)的能力,開辟一個(gè)獨(dú)立的內(nèi)存區(qū),用來提供給uClinux程序和采集系統(tǒng)共享的內(nèi)存,專門用于存儲(chǔ)采集數(shù)據(jù),這樣uClinux程序就可以很方便快速地訪問采集到的數(shù)據(jù),從而大大提高了并發(fā)處理速度。
4改進(jìn)后的實(shí)驗(yàn)結(jié)果
通過對(duì)uClinux中斷延遲時(shí)間的改進(jìn),再次進(jìn)行了實(shí)驗(yàn)。
對(duì)同一種紙幣進(jìn)行了多次實(shí)驗(yàn),采集出來的數(shù)據(jù)與面額數(shù)據(jù)特征庫(kù)中的數(shù)據(jù)吻合度比較好。特征曲線對(duì)比圖如圖6所示。
同樣計(jì)算歐式距離,得到的值為18.138 4,這個(gè)值在允許的范圍內(nèi)達(dá)到了紙幣特征實(shí)時(shí)采集系統(tǒng)的要求。
5結(jié)束語
本文設(shè)計(jì)了一種基于S3C4510B和uClinux的紙幣特征實(shí)時(shí)采集系統(tǒng),考慮到uClinux操作系統(tǒng)本身的特點(diǎn),將采集的實(shí)現(xiàn)放在中斷處理子程序中。通過實(shí)驗(yàn),將得到的紙幣數(shù)據(jù)與面額特征數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行比對(duì),采集到的數(shù)據(jù)在某些點(diǎn)有較大的波動(dòng),研究發(fā)現(xiàn)是由于uClinux的中斷延遲在某些時(shí)候比較長(zhǎng),采集系統(tǒng)在uClinux操作系統(tǒng)中的實(shí)現(xiàn)有困難。由于uClinux免費(fèi),而且操作系統(tǒng)功能強(qiáng)大,使得紙幣識(shí)別系統(tǒng)能夠支持更多功能,降低其成本,大大增強(qiáng)可擴(kuò)展性。考慮到uClinux的種種優(yōu)點(diǎn),提出了改進(jìn)中斷延遲時(shí)間的方案。經(jīng)過實(shí)施RTAI雙內(nèi)核的改進(jìn)后,仍然采集中斷實(shí)現(xiàn),將采集系統(tǒng)中斷放在RTAI核中實(shí)現(xiàn),并開辟了一個(gè)獨(dú)立的內(nèi)存區(qū)用來存儲(chǔ)數(shù)據(jù),方便uClinux上的程序快速讀取采集的數(shù)據(jù),大大提高了紙幣識(shí)別系統(tǒng)的并發(fā)處理能力。經(jīng)過改進(jìn)后的uClinux可以滿足紙幣特征實(shí)時(shí)采集系統(tǒng)要求。
參考文獻(xiàn):
[1]李駒光.ARM應(yīng)用系統(tǒng)開發(fā)詳解——基于S3C4510B 的系統(tǒng)設(shè)計(jì)[M].北京:清華大學(xué)出版社,2004.
[2]趙明富,李太福,羅松.Linux嵌入式系統(tǒng)實(shí)時(shí)性分析與實(shí)時(shí)化改進(jìn)[J].計(jì)算機(jī)應(yīng)用研究,2004,21(4):200-203.
[3]KOSAKA T, OMATU S, FUJINAKA T. Bill classification by using the LVQ method[C]//Proc of IEEE International Conference on Systems, Man and Cybernetics. 2001:1430-1435.
[4] FROSINI A, GPRO M, PRIAMI P. A neural network-based model for paper currency recognition and verification[J]. IEEE Trans on Neural Networks, 1996,7(6):1482-1490.
[5]BOVET D P, CESATI M. Understanding the Linux kernel[M]. 3rd ed. Sebastopol: O’Reilly, 2005.
[6]LABROSSE J J.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-Ⅱ [M].邵貝貝,譯.2版.北京:北京航空航天大學(xué)出版社,2003.
[7]LAURICH P. A comparison of hard real-time Linux alternatives[EB/OL].(2004- 11-19). [2006-12-01].http://linuxdevices.com/articles/AT3479098230.html.
[8]鄒勇,王青,李明樹.Linux內(nèi)核的實(shí)時(shí)支持的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)研究與發(fā)展,2002,39(4):466-472.
第4期
“本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文”