基于ARM9的手寫體數(shù)字識別技術(shù)研究與實現(xiàn)_第1頁
基于ARM9的手寫體數(shù)字識別技術(shù)研究與實現(xiàn)_第2頁
基于ARM9的手寫體數(shù)字識別技術(shù)研究與實現(xiàn)_第3頁
基于ARM9的手寫體數(shù)字識別技術(shù)研究與實現(xiàn)_第4頁
基于ARM9的手寫體數(shù)字識別技術(shù)研究與實現(xiàn)_第5頁
已閱讀5頁,還剩73頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

湖南大學(xué)碩士學(xué)位論文基于ARM9的手寫體數(shù)字識別技術(shù)研究與實現(xiàn)申請學(xué)位級別:碩士專業(yè):電子科學(xué)與技術(shù)20081110基f基fARM9的手寫體數(shù)寧識別技術(shù)研究與實現(xiàn)摘 要‘近年來智能技術(shù)發(fā)展十分迅猛。產(chǎn)品功能越來越強(qiáng)大,出現(xiàn)功能捆綁及集成化的趨勢。手寫體識別作為一種最簡單直接的人機(jī)交互手段,在智能設(shè)備中有重要作用。新興的精簡指令集ARM系列處理器,相比于傳統(tǒng)的復(fù)雜指令集處理器,功耗更低計算能力更強(qiáng)大,近年來在嵌入式領(lǐng)域得到廣泛的應(yīng)用。本文圍繞ARM9核心的硬件平臺,研究在Linux上實現(xiàn)手寫體數(shù)字的自動識別的方法。(1)通過分析手寫體識別技術(shù)的發(fā)展?fàn)顩r,ARM核心系列芯片的應(yīng)用情況,說明了在ARM平臺上實現(xiàn)手寫體數(shù)字識別功能的可行性。(2)以2410芯片為核心,闡述了系統(tǒng)的硬件組成及其特點,各個硬件模塊的原理及功能。對ARM.Linux內(nèi)核進(jìn)行配置及編譯,掛載了適用于NANDFLASH的YAFFS文件系統(tǒng),對液晶及觸摸屏進(jìn)行了配置及調(diào)試,最后將Linux系統(tǒng)移植到ARM平臺上。(3)結(jié)合當(dāng)今圖像識別技術(shù)的發(fā)展,闡述了模式識別問題中圖像預(yù)處理的主要方法,分析了圖像預(yù)處理過程中各個模塊的數(shù)學(xué)原理,利用跨平臺編程環(huán)境Qt編程實現(xiàn)了圖像預(yù)處理功能。(4)通過分析經(jīng)典BP網(wǎng)絡(luò)的學(xué)習(xí)算法及其優(yōu)缺點,針對傳統(tǒng)BP算法的缺點進(jìn)行了參數(shù)優(yōu)化,減少了網(wǎng)絡(luò)訓(xùn)練失敗的幾率及訓(xùn)練所使用的時間。利用Matlab強(qiáng)大的數(shù)據(jù)處理與快速編程能力,使用神經(jīng)網(wǎng)絡(luò)工具箱,編程實現(xiàn)BP網(wǎng)絡(luò),并使用處理好的圖片數(shù)據(jù)對網(wǎng)絡(luò)進(jìn)行了訓(xùn)練。訓(xùn)練完成后,使用字符圖片樣本對神經(jīng)網(wǎng)絡(luò)進(jìn)行了測試,并給出了測試結(jié)果,證明了訓(xùn)練結(jié)果的正確性。(5)利用Matlab的聯(lián)合編程能力,配置好模塊參數(shù)后,將訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模塊導(dǎo)出生成C語言代碼,并結(jié)合Qt及Linux的特點進(jìn)行適應(yīng)性修改。根據(jù)課題要求,在Qt環(huán)境中配置好觸摸屏,使用程序抓取觸摸屏動作生成圖像文件,最后將神經(jīng)網(wǎng)絡(luò)模塊嵌入到程序主體當(dāng)中,下載到ARM平臺上運行。本文的設(shè)計原理適合于更復(fù)雜的文字識別場合,具有借鑒意義。根據(jù)需求對網(wǎng)絡(luò)進(jìn)行優(yōu)化,并加入更多分類器減少單個網(wǎng)絡(luò)的規(guī)模,就能實現(xiàn)更為復(fù)雜的手寫體識別功能。關(guān)鍵詞:ARM;神經(jīng)網(wǎng)絡(luò);手寫體識別;Linux;Matlab;Qt碩}碩}:學(xué)位論史AbstractIntelligenttechnologyhadbeendeveloppingrapidlyinrecentyears.Theproductbecamemorepow爸rful,anditshowedatrendofcapabilityintegrati6n.AsthemostsimpleanddirectiVemethodofman-machineconversation,handw“tingrecognitiontechniqueplayedaninlportantroleinintelligentdevice.ComparedwithtraditionalCISCprocessor,thenewRISCprocessorARM,cancomputefasterwith10werpowerconsume,soitwaswidelyusedinembeddedapplicationsinrecentyears.ThispaperwouldgiVearesearchabouthowtoimplementthefunctionalityofhandw“tingnumbersrecognition,basedonARM9hardwareplatform.(1)ByanalyzingthedeVelopmentofhandwritingrecognitiontechniqueandtheapplications ofARM serialprocessor,thispaperprovedthe feasibilityofimplementingthehandwritingnumberrecognitionfunctionalityontheplatform.(2)WiththecoreofSamSungS3C24lOprocessor,thispaperexpatiatedonthestructureandspecialtyofthesystem’hardware,andthetheorVandfunctionsofhardwareblocks.BasedontheresearchoftheLinux’structure,thispaperconfiguredandbuilttheARM—Linuxcore,installedtheYAFFSfilesvstemwhichfittheNANDFLASHmanagement,configuredanddebuggedtheLCDandTouchScreen,andexplantedtheLinuxsystemtotheARMhardwareplatform.(3)Withdiscussionontheimprovementofimagerecognitiontechnique,thispaperexpatiatedthecommonusedmethodsofimagepre-processinginpatternrecognition,Analysedthealgorithmsusedintheblocksofimagepre.processing,andthenusedQt,whichwasaplatformspanningprogrammingtool,toimplementtheimagepretreatmentfhnctionality.(4)ByanalysingtheclassicalBPNeuralNetwork’trainingmethodandtheirstrongandweakpoints,thispaperusedtheimprovedtrainingarithmeticinviewofdisadVantagesoftraditionalBPNeuralNetwork,reducedthechanceoffailureintheNeuralNetwork’trainingandthetimecostatit.WiththepowerfuIdataprocessingandfastprogrammingcapabilityofMatlab,thispaperusedNeuralNetworkt001boxtoimplementtheBPNeuralNetworkblock,andthenusedtheimagedatanlesgeneratedfromthepretreatmentblocktotrainthenetwork.Aftertraining,thispaperusedcharacterimagesamplestotesttheNeuralNetwork,gavethetestresultandproVedthecorrectnessofthenetwork’sf.unction.(5)Withthebene療tofMatlab’scombinedprogrammingcapability,thispaper基于ARM9基于ARM9的于寫體數(shù)寧識別技術(shù)研究與實現(xiàn)conflguredtheblock’sparams,exportedthewelltrainedBPnetworktoablockofCcode,anddidsomeadaptiVemodincationaccordingtothefeaturesofQtandLinux.Accordingtotherequirementoftheissue,thispaperconfiguredtheTouchScreenintheQtenVironment,madeaprogramblocktoconverthumanactionsonTouchScreenintoimagefiles.‘Inthelast,thepaperimplantthenenralnetworkblockintothemainprogramblock,anddownloadedtheprogramtotheARM·Linuxplatform.Thetheoryandapproachfitmoreconlplexcharacterrecognitionapplications,sothatitcouldbeareference.ByimproVingthenetworkaccordingtotherequirement,addingmorenetworksandreducingthescaleofasinglenetwork,itcouldimplementthemorecomplexhandwritingrecognitionfIunctionality.KeyWords:ARM;NeuralNetwork;handwritingrecognition;Linux;Matlab;QtIV湖南大學(xué)學(xué)位論文原創(chuàng)性聲明湖南大學(xué)學(xué)位論文原創(chuàng)性聲明本人鄭重聲明:所呈交的論文是本人在導(dǎo)師的指導(dǎo)下獨立進(jìn)行研究所取得的研究成果。除了文中特別加以標(biāo)注引用的內(nèi)容外,本論文不包含任何其他個人或集體己經(jīng)發(fā)表或撰寫的成果作品。對本文的研究做出重要貢獻(xiàn)的個人和集體,均已在文中以明確方式標(biāo)明。本人完全意識到本聲明的法律后果由本人承擔(dān)。作者簽名覆感 日期:砷年,月珈學(xué)位論文版權(quán)使用授權(quán)書本學(xué)位論文作者完全了解學(xué)校有關(guān)保留、使用學(xué)位論文的規(guī)定,同意學(xué)校保留并向國家有關(guān)部門或機(jī)構(gòu)送交論文的復(fù)印件和電子版,允許論文被查閱和借閱。本人授權(quán)湖南大學(xué)可以將本學(xué)位論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫進(jìn)行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存和匯編本學(xué)位論文。本學(xué)位論文屬于1、保密口,在 年解密后適用本授權(quán)書。2、不保密囪。(請在以上相應(yīng)方框內(nèi)打“√”)作者簽名:愛文 日期:矽7年,月硝日導(dǎo)師簽名: 日期:么呷年夕月z∥日碩士學(xué)位論文第碩士學(xué)位論文第1章 緒論1.1選題的背景及意義1.選題背景傳統(tǒng)的嵌入式應(yīng)用以經(jīng)典的INTEL51系列為代表,以一塊8位或者16位單片機(jī)為核心,配以內(nèi)存、IO口等設(shè)備組成一個小型定制系統(tǒng),裝入特定的程序以完成指定的功能。由于主處理器性能有限,只能進(jìn)行有限的邏輯控制,主要應(yīng)用于數(shù)據(jù)采集與傳輸、工業(yè)現(xiàn)場控制等場合。隨著電子技術(shù)理論的發(fā)展以及制造技術(shù)的成熟,出現(xiàn)了以精簡指令集為基礎(chǔ)的高性能32位芯片。這些32位芯片普遍擁有大幅超越前輩的運算性能,能夠運行復(fù)雜的程序提供真正的圖形界面;集成常見的擴(kuò)展功能,擁有SOC特性,從而減少擴(kuò)展芯片的使用,簡化電路設(shè)計。其中以ARM為核心的32位系列芯片最為成功。ARM公司設(shè)計的芯核結(jié)構(gòu)合理,功耗低,在擁有不俗的性能的同時還有相對較低的成本,因此獲得了包括lNTEL、三星、ATMEL在內(nèi)的眾多國際一流半導(dǎo)體廠商的大力支持,在32位嵌入式領(lǐng)域獲得了巨大的成功。便攜式電子消費品、智能設(shè)備是ARM系列32位處理器一個重要的應(yīng)用場所。ARM微處理器的出現(xiàn),加速了嵌入式產(chǎn)品從原來的軍事、工控領(lǐng)域向民用、消費領(lǐng)域的滲透。以手機(jī)、MP3、MP4等產(chǎn)品為代表,便攜式電子消費產(chǎn)品已經(jīng)正式走入了普通人的生活。許多智能手機(jī)都以ARM9或更高端的ARM芯片為核心,裝入Palm/OS、WCE等嵌入式操作系統(tǒng),再配以特定的應(yīng)用程序,從而實現(xiàn)精美的圖形界面與其它各種智能功能。隨著電子設(shè)備功能的強(qiáng)大,傳統(tǒng)的按鍵操作方式顯得越來越不能滿足要求,觸摸屏加手寫輸入的方式因為其符合人的自然習(xí)慣,簡單直接,受到用戶的歡迎,成為近年來的技術(shù)熱點,越來越受到重視。今天的ARM系列芯片功能強(qiáng)大,價格相對低廉,在以ARM9為核心的系統(tǒng)平臺上實現(xiàn)手寫體識別技術(shù)已經(jīng)成為可能。2.課題意義本課題來自于三一重工股份有限公司的工程機(jī)械觸摸屏系統(tǒng)預(yù)研項目,手寫體文字識別技術(shù)作為一個重要的功能模塊需要以合理的性價比加以實現(xiàn)。在不同的平臺,不同的算法下,手寫體字符識別的效果有很大區(qū)別。雖然國內(nèi)的字符識別技術(shù)近年來發(fā)展迅速,但大多是基于PC.Windows平臺,Linux下開源的手寫體識別軟件成熟的不多,開源的更少。本文以ARM9芯片為硬件核心,開源的Linux為軟件核心,在此系統(tǒng)基礎(chǔ)上研究實現(xiàn)手寫體數(shù)字識別功能的可能途徑。同時本文探索了一條使用Matlab與其他工具聯(lián)合編程,快速實現(xiàn)神經(jīng)網(wǎng)絡(luò)的技術(shù)路線,基于ARM9基于ARM9的于.寫體數(shù)寧識別技術(shù)研究與實現(xiàn)在進(jìn)行復(fù)雜算法的應(yīng)用開發(fā)時有重要的借鑒意義。1.2AI蝴與手寫體識別技術(shù)的應(yīng)用與發(fā)展1.ARM系列芯片的應(yīng)用ARM系列處理器是指購買了ARM公司的授權(quán),遵守其標(biāo)準(zhǔn)設(shè)計生產(chǎn)的RISC處理器。ARM公司是一家IP供應(yīng)商,本身并不生產(chǎn)芯片,其核心業(yè)務(wù)是IP核以及相關(guān)工具的開發(fā)和設(shè)計。各個芯片設(shè)計制造商購買其IP核授權(quán)后,進(jìn)行2次設(shè)計開發(fā)流片,從而生產(chǎn)出滿足市場需要的各種各樣的ARM芯片。ARM芯片的研究還在繼續(xù)并不斷取得突破,自其問世以來,結(jié)構(gòu)已經(jīng)從V3發(fā)展到V6。目前非常流行的ARM芯核有ARM7TDMI、StrongARM、ARM720T、ARM9TDMI、ARM922T、ARM940T、ARM946T、ARM966T、ARM1OTDMI等。ARM7系列芯片在性能與成本之間找到了很好的平衡點,憑借其卓越的性價比迅速占領(lǐng)了市場,得到了廣泛的應(yīng)用。ARM9系列以后的芯片性能顯著提高,已經(jīng)能夠運行嵌入式操作系統(tǒng),能進(jìn)行游戲娛樂、視頻解碼播放等計算負(fù)荷較高的應(yīng)用。最新的ARMll內(nèi)核囊括了Thumb.2、CoreSi曲t、Truszone等眾多業(yè)界領(lǐng)先技術(shù),同時ARM公司開始提供PiccoloDSP的芯核給芯片設(shè)計者,用于設(shè)計帶DSP核心的SOC(SystemOnChip)結(jié)構(gòu)芯片,ARM芯片的功能得到進(jìn)一步增強(qiáng)并延伸到傳統(tǒng)的強(qiáng)調(diào)速度與效率的DSP領(lǐng)域【11。由于ARM芯片的成功應(yīng)用,眾多軟件廠商也推出了基于ARM系統(tǒng)的產(chǎn)品,包括WindowsCE、Linux、VxWorks等操作系統(tǒng),以及各種移植版的應(yīng)用軟件如視頻解碼器等等。眾多的消費電子產(chǎn)品制造商大力開展ARM核心系統(tǒng)的研究與開發(fā),推出了基于ARM的性價比優(yōu)越的智能產(chǎn)品,受到市場的歡迎。目前可以提供ARM芯片的著名半導(dǎo)體公司有:英特爾、飛利浦、德洲儀器、三星、摩托羅拉、ADI公司、安捷倫、Atmel、IntersiI、Alcatel、Alteral、臺積電、臺聯(lián)電等等;提供ARM體系軟件產(chǎn)品的有:微軟、風(fēng)河等;提供基于ARM的成套產(chǎn)品的有:三星、SONY、NOKIA、國內(nèi)眾多手機(jī)廠商等??梢哉f用如火如荼來形容ARM市場不為過。2.模式識別技術(shù)的發(fā)展模式識別(PatternRecognition)是指對表征事物或現(xiàn)象的各種形式的(數(shù)值的、文字的和邏輯關(guān)系的)信息進(jìn)行處理和分析,以對事物或現(xiàn)象進(jìn)行描述、辨認(rèn)、分類和解釋的過程,是信息科學(xué)和人工智能的重要組成部分【521。在人類的正常生活中,模式識別的活動是經(jīng)常發(fā)生的,如人類看到一輛汽車的影像便會將之識別為一種交通工具,所以模式識別是人類的一項基本智能。隨著計算機(jī)技術(shù)的出現(xiàn)與發(fā)展以及隨后而來的對人工智能的研究熱潮的出現(xiàn),人們希望能利用計算機(jī)的快速運算能力來代替或擴(kuò)展人類的部分腦力勞動,模式識別就是應(yīng)用計算機(jī)對一組事件或過程進(jìn)行鑒別和分類的技術(shù)。它所識別的事件或過程可以是文字、聲音、2碩L碩L學(xué)位論文圖像等具體對象,也可以是狀態(tài)、程度等抽象對象。這些對象與數(shù)字形式的信息相區(qū)別,稱為模式信息。模式識別嘗試模擬人腦的“對象識別”能力,因此可以看作是人工智能的一個分支方向。和其它人工智能技術(shù)類似,模式識別一般借助計算機(jī)完成。計算機(jī)模式識別在20世紀(jì)60年代初迅速發(fā)展并成為一門新學(xué)科。模式識別技術(shù)的發(fā)展有著巨大的現(xiàn)實意義,目前在文字和語音識別、遙感和醫(yī)學(xué)診斷等方面都有廣泛的應(yīng)用,其技術(shù)的進(jìn)步能改變?nèi)祟惿鐣幕顒臃绞焦?jié)省人類的勞動力。例如文字識別技術(shù)能夠自動將各種文字影像轉(zhuǎn)換成電子文檔保存管理而不再需要人類手工輸入信息,從而大大節(jié)約了人力;語音識別技術(shù)使得語音身份鑒別成為可能,在安保、監(jiān)控方面大有作為。模式識別技術(shù)的難點在于其識別的準(zhǔn)確度的提高,以及對人腦識別過程的模擬。由于準(zhǔn)確的對人腦的識別邏輯進(jìn)行建模在目前的條件下難以完成,因此模式識別技術(shù)廣泛借助其他學(xué)科門類的知識,以逼近理想的正確辨別邏輯。一般來說,模式識別與統(tǒng)計學(xué)、心理學(xué)、語言學(xué)、計算機(jī)科學(xué)、生物學(xué)、控制論、圖像處理學(xué)等都有關(guān)系且互相交叉影響,要實現(xiàn)一個識別過程其具體知識往往來自于與應(yīng)用目標(biāo)有關(guān)的學(xué)科。例如字符模式識別中的預(yù)處理和特征抽取環(huán)節(jié)需要圖像處理的技術(shù),識別的字符類型不同又會導(dǎo)致識別算法的不同適應(yīng)性;圖像處理中的圖像分析部分需要模式識別技術(shù)鑒別源圖像的類型。今天的模式識別技術(shù)由于其巨大的現(xiàn)實意義及眾多待解決問題的存在,仍然是一個發(fā)展迅速研究活躍的學(xué)科門類。3.手寫體識別技術(shù)的發(fā)展手寫體識別問題是模式識別問題中的一個經(jīng)典問題,屬于光學(xué)字符識別技術(shù)(既OCR技術(shù)),是與人們生活密切相關(guān)的問題。國外對字符識別的研究開始較早。我國自70年代開始對數(shù)字、英文字母及符號的識別進(jìn)行研究,經(jīng)過十多年的研究與努力,漢字識別技術(shù)的發(fā)展和應(yīng)用已經(jīng)有了長足進(jìn)步:從簡單的單體識別發(fā)展到多種字體混排的多體識別,從中文印刷材料的識別發(fā)展到中英混排印刷材料的雙語識別。各個系統(tǒng)可以支持簡、繁體漢字的識別,解決了多體多字號混排文本的識別問題,對于簡單的版面可以進(jìn)行有效的定量分析。目前,聯(lián)機(jī)手寫漢字識別技術(shù)已經(jīng)相當(dāng)成熟,市場上已經(jīng)出現(xiàn)了多項具有代表性的產(chǎn)品。脫機(jī)印刷體識別也有成熟產(chǎn)品出現(xiàn),識別率也基本能夠達(dá)到實用的要求。脫機(jī)手寫漢字識別的研究也取得了很大的進(jìn)展,小字符集單字識別技術(shù)相對更為成熟【2引,文字識別理論與技術(shù)繼續(xù)不斷向前發(fā)展。1.3本文的主要研究內(nèi)容本文是在承擔(dān)三一重工股份有限公司的“工程機(jī)械觸摸屏系統(tǒng)開發(fā)"項目研發(fā)工作中完成的,既是對過去的一年中承擔(dān)的科研任務(wù)的成果梳理,同時也是對3基于ARM9基于ARM9的于寫休數(shù)字識別技術(shù)研究’j實現(xiàn)研究過程的經(jīng)驗總結(jié)。第1章緒論。通過分析手寫體識別技術(shù)的發(fā)展?fàn)顩r,ARM核心系列芯片的發(fā)展與應(yīng)用,說明了在ARM平臺上實現(xiàn)手寫體識別功能的可行性,指出了課題的研究意義。第2章手寫體數(shù)字識別系統(tǒng)的硬件基礎(chǔ)及底層軟件開發(fā)。以三星S3C2410芯片為核心,闡述了系統(tǒng)的硬件組成及其特點,給出主要硬件模塊的原理及設(shè)計與實現(xiàn)。對Linux內(nèi)核結(jié)構(gòu)進(jìn)行了研究,根據(jù)系統(tǒng)功能要求對ARM.Linux內(nèi)核進(jìn)行配置及編譯,并掛載了YAFFS文件系統(tǒng)、觸摸屏驅(qū)動,最后將Linux系統(tǒng)移植到ARM平臺上。第3章手寫體數(shù)字識別系統(tǒng)圖像預(yù)處理的研究與實現(xiàn)。在詳細(xì)闡述實現(xiàn)手寫體數(shù)字識別功能的主要工作步驟,圖像預(yù)處理的目的及主要處理流程的基礎(chǔ)上,使用當(dāng)前Linux平臺上流行的跨平臺圖形編程環(huán)境Qt,設(shè)計并編程實現(xiàn)了圖像的二值化、平滑去噪、細(xì)化、裁切拉伸等功能,并對不同算法的處理效果做出比較與選擇。連接各個模塊后,將樣本圖片批量轉(zhuǎn)換并存儲為文件供其他模塊使用。第4章手寫體數(shù)字識別算法的研究與實現(xiàn)。對當(dāng)前字符識別的主要算法進(jìn)行了分析比較,詳細(xì)闡述了神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)原型及其用于文字識別的原理,經(jīng)典BP網(wǎng)絡(luò)的學(xué)習(xí)算法及其優(yōu)缺點。使用Matlab編程實現(xiàn)了BP網(wǎng)絡(luò)及對圖像預(yù)處理模塊所生成數(shù)據(jù)的讀取功能。通過實驗比較,選擇了較好的學(xué)習(xí)算法及合理的網(wǎng)絡(luò)參數(shù),對BP網(wǎng)絡(luò)進(jìn)行訓(xùn)練達(dá)到了收斂的目的,最后對訓(xùn)練好的BP網(wǎng)絡(luò)進(jìn)行樣本測試并給出結(jié)果。第5章Matlab與Qt聯(lián)合編程實現(xiàn)手寫體數(shù)字識別。利用Matlab的關(guān)鍵組件Simulink中的Real.timeWorkShop,將經(jīng)過測試的神經(jīng)網(wǎng)絡(luò)改造并轉(zhuǎn)換成C/C++代碼。在對生成的代碼進(jìn)行分析的基礎(chǔ)上,對其改寫并嵌入Qt主程序重新編譯成一個完整程序,并進(jìn)行了測試給出了對比結(jié)果。隨后將主程序移植到ARM.Linux平臺上,將程序的輸入切換為觸摸屏動作模塊。在Qt中將觸摸屏映射成鼠標(biāo),并編程將其動作抓取成數(shù)字圖像,連接主程序?qū)崿F(xiàn)ARM.Linux上的有限字符識別。最后,對本文研究工作進(jìn)行總結(jié)與展望。4碩卜學(xué)位論文第碩卜學(xué)位論文第2章手寫體數(shù)字識別系統(tǒng)的硬件基礎(chǔ)及底層軟件開發(fā)2.1開發(fā)平臺整體結(jié)構(gòu)設(shè)備終端是一個嵌入式系統(tǒng),它是一個運行操作系統(tǒng)及應(yīng)用程序的軟硬件綜合體。本文所設(shè)計的系統(tǒng)需要液晶屏顯示系統(tǒng)的反饋,觸摸屏接收用戶的操作,三星S3C24lO處理器處理中斷操作及程序邏輯,F(xiàn)LASH存儲程序參數(shù)及歷史記錄,JTAG及串口、網(wǎng)口方便與PC聯(lián)機(jī)進(jìn)行程序調(diào)試及測試。操作系統(tǒng)能夠屏蔽底層硬件結(jié)構(gòu)差異,減小開發(fā)難度,為設(shè)備各個功能模塊的管理提供方便。系統(tǒng)的組成框圖見圖2.1。l應(yīng)用程序 PC王IARM版Qt庫工 l嵌入式Li肌x操作系統(tǒng) JTAG/USB/以太網(wǎng)3 工I samsungs3c2410硬件系統(tǒng)圖2—1開發(fā)平臺整體框架整個系統(tǒng)以三星2410ARM9芯片為核心。嵌入式Linux操作系統(tǒng)安裝在硬件平臺上,用來屏蔽硬件物理結(jié)構(gòu)上的差異,方便軟件代碼的編寫及模塊之間的復(fù)用。相比沒有安裝操作系統(tǒng)的“裸露"硬件系統(tǒng),其一大優(yōu)勢就是可以利用此平臺上已經(jīng)做好了的函數(shù)庫及功能模塊,并且將大量瑣碎的硬件細(xì)節(jié)操作交給操作系統(tǒng)來完成,從而大大減少重復(fù)性的工作,讓開發(fā)者有更多的精力放在具體的應(yīng)用設(shè)計上,加快開發(fā)的速度。2.2手寫體數(shù)字識別系統(tǒng)的硬件基礎(chǔ)2.2.1硬件系統(tǒng)的整體結(jié)構(gòu)本文的開發(fā)主要基于三星公司的S3C2410硬件平臺,硬件上主要包括主CPU、存儲器單元、FLASH存儲器、LCD接口、觸摸屏接口、外接按鍵、USB接口和網(wǎng)卡接口等,預(yù)留了GPRS遠(yuǎn)程通訊接口。硬件系統(tǒng)框圖見圖2.2?;贏RM9基于ARM9的手寫體數(shù)字識別技術(shù)研究與實現(xiàn)圖2—2硬件系統(tǒng)組成框架CPU單元::S3C2410ARM920T內(nèi)核存儲器單元::64MBSDRAM復(fù)位電路:包括上電復(fù)位和手動復(fù)位電路,保證系統(tǒng)的可靠復(fù)位電源模塊:主要使用開關(guān)電源進(jìn)行變壓及隔離時鐘電路:使用外部晶振引入12MHz脈沖信號,經(jīng)PLL倍頻后供CPU使用實時時鐘:使用外部的實時時鐘芯片提供校時,同時附帶EEPROMLCD:使用5.4寸顯示屏作為顯示窗口觸摸屏:使用較為成熟的四線電阻式觸摸屏鍵盤:帶有6個開關(guān)式按鍵USB及網(wǎng)卡接口:支持1.0格式的USB接口及10M以太網(wǎng)硬件系統(tǒng)主要以S3C2410芯片為核心,配備64MB的大容量內(nèi)存以滿足運行操作系統(tǒng)及圖形處理程序的需要。電阻式觸摸屏取代了pc上鼠標(biāo)的位置,在系統(tǒng)中被映射成鼠標(biāo)方便應(yīng)用程序的使用。另外系統(tǒng)提供少量的物理按鍵以方便程序調(diào)試及充當(dāng)迷你鍵盤。2.2.2S3C2410芯片特點S3C24l0是由三星半導(dǎo)體公司為手持移動設(shè)備類應(yīng)用設(shè)計的一款低功耗、高集成度的ARM9系列芯片,它含一個ARM920T內(nèi)核。ARM920T實現(xiàn)了MMU、AMBABUS和Harvard高速緩沖體系結(jié)構(gòu),具有獨立的16KB指令Cache和16KB數(shù)據(jù)Cache。S3C2410采用272腳FBGA封裝,集成提供了一系列傳統(tǒng)的外圍設(shè)備功能,有力的減少了整個系統(tǒng)的成本。此CPU集成的片上功能有一引:(1)1.8V/2.0V內(nèi)部供電、3.3v存儲器、外部I/O供電。具有16KB一體化的Cache/MMII6碩{碩{:學(xué)位論文(2)具有外部存儲器控制器(SDRAM和片選控制邏輯)(3) LCD控制器(支持4K色的STN屏和256K色的TFT型液晶屏,具有1路LCD專用DMA)(4) 4路DMA,具備外部請求腳(5)3路UAI汀,擁有16字節(jié)的發(fā)送FIFO,16字節(jié)的接收FIFO高速緩存,2通道SPI(6) l路多主模式的IIC總線(7) 兼容V1.0的SD主接口協(xié)議和V2.1l的MMC卡協(xié)議(8)2路全速USB主設(shè)備,其中l(wèi)路可以作為USB從設(shè)備(V1.1協(xié)議)(9) 4路PwM定時器和一路內(nèi)部定時器(10)具有看門狗定時器(11) 共提供117個通用I/O口,24路外部中斷(12) 電源控制有正常模式,SLOW模式,空閑模式和掉電模式(13) 8路lO位ADC,其中2路可以作為觸摸屏接口(14) 具有日歷功能的I汀C時鐘(15) 片內(nèi)倍頻鎖相環(huán)PLLS3C241O集成了一個具有日歷功能的I盯C,還集成了具有PLL(MPLL和UPLL)功能的芯片時鐘發(fā)生器。MPLL產(chǎn)生主時鐘,能夠支持處理器工作頻率最高達(dá)到203MHZ,通過更改設(shè)置可以改變芯片的工作頻率以適應(yīng)不同的工作要求。UPLL產(chǎn)生實現(xiàn)主從USB功能的時鐘,方便uSB接口的實現(xiàn)??梢钥闯?,S3C2410的片上集成功能十分豐富,合理的利用S3C2410豐富的硬件資源,可以輕松地進(jìn)行各種嵌入式的設(shè)計開發(fā)。s3C2410將存儲空間劃分為8組,每組大小是128M,共計lGB。系統(tǒng)復(fù)位后內(nèi)存分配情況見圖2.3,Bank0到Bank6的開始地址是固定的,Bank7的開始地址是Bank6的結(jié)束地址,靈活可變,并且Bank7的大小與Bank6的大小必須相等。除Bank0外,其余各存儲器的總線寬度可編程設(shè)置為8位、16位或32位,但是Bank0只能設(shè)置為16位或者32位。Bank0作為引導(dǎo)ROM,地址映射到Ox0000,總線寬度在復(fù)位時就確定了。所有的寄存器組均可用于ROM或者SRAM,Bank6和Bank7還可以用于SDRAM。所有內(nèi)存塊的訪問周期都可編程。S3C2410同時支持大、小端模式。S3C2410外部共有272個引腳,主要包括總線控制信號、各類元器件接口信號,以及電源:時鐘控制信號。本文所使用的芯片運行在標(biāo)準(zhǔn)的203MHz,此頻率下系統(tǒng)的運算能力已經(jīng)十分強(qiáng)大,可以良好的運行Linux/WCE操作系統(tǒng)。普通的平面圖形處理能在肉眼察覺不到的時間內(nèi)完成,為實現(xiàn)抓取觸摸屏動作,實時判定文字類別打下了硬件基礎(chǔ)。7綦于ARM9綦于ARM9的手寫休數(shù)寧識別技術(shù)研究與實現(xiàn)0M[1:O]=00Ox6000-0000Ox4800-0000Ox4000一00000x400000000x3800一0000Ox3000_00000xlooO_0000Ox0800—0000Ox0000_0000圖2—3系統(tǒng)復(fù)位后的內(nèi)存映射關(guān)系2.2.3液晶及觸摸屏的硬件基礎(chǔ)2.2.3.1.液晶顯示屏電路液晶顯示器是常見的圖形輸出設(shè)備之一,能向用戶提供友好的圖形界面。LCD顯示器通常與幀緩存(FrameBuf.fer)設(shè)備結(jié)合使用,系統(tǒng)定時將幀緩存中的內(nèi)容輸出到LCD顯示器以刷新屏幕。S3C241O內(nèi)部集成了LCD控制器,支持STN和TFT類型的液晶顯示器。LCD控制器可根據(jù)水平和垂直像素、數(shù)據(jù)線寬度和刷新率編程支持各種需求的屏幕。本文選用320x240像素的5.4寸TFT液晶屏。S3C2410的LCD控制器用來傳送在幀緩存中的視頻數(shù)據(jù)和產(chǎn)生必要的控制信號。該控制器由REGBANK(控制寄存器組)、LCDCDMA(專用DMA)、vIDPCS(視頻信號處理單元)、LPC3600和TIMEGEN(時序信號產(chǎn)生單元)組成。其中,REGBANK包含17個可編程寄存器和幾個256×16的調(diào)色板存儲器,用來配置LCD控制器并設(shè)置相應(yīng)的參數(shù);LCDCDMA提供了視頻信號的快速傳輸通道,自動通過系統(tǒng)總線從系統(tǒng)幀緩存中取出圖形數(shù)據(jù),并傳輸?shù)揭曨l信號處理單元;VIDPCS將專用DMA中取出的信號進(jìn)行整形及提高驅(qū)動能力處理后,輸出8碩七學(xué)位論文到外部數(shù)據(jù)端口碩七學(xué)位論文到外部數(shù)據(jù)端口VD【23:O】;TIMEGEN和LPC3600產(chǎn)生LCD屏所需要的控制時序。視頻數(shù)據(jù)通過LCD數(shù)據(jù)總線傳送,采用DMA方式??刂菩盘柊ǎ捍怪蓖叫盘朧SYNC、水平同步信號HsYNC、線結(jié)束信號LEND、像素時鐘信號VCLK和數(shù)據(jù)使能信號VDEN等。S3C2410支持TFT/STN型的LCD及觸摸屏,但不能直接與它們相連,需要接口板驅(qū)動LCD。接口板通過50腳的插座作為LCD與觸摸屏接口。LCD接口電路原理圖見圖2—4。圖2—4LCD接口電路圖2.2.3.2觸摸屏硬件原理觸摸屏作為一種特殊的計算機(jī)外設(shè),提供了目前最簡單、方便、自然的一種人機(jī)交互手段。它賦予了電子設(shè)備嶄新的面貌,是極富吸引力的全新多媒體交互設(shè)備,具有堅固耐用、反應(yīng)速度快、節(jié)省空間、易于交互等許多優(yōu)點。利用這種技術(shù),用戶只要用手指輕輕地觸碰計算機(jī)顯示屏上的圖形或文字就能實現(xiàn)對主機(jī)的操作,從而使人機(jī)交互直截了當(dāng),極大方便了那些不懂電腦操作的用戶。觸摸屏的基本工作原理是:當(dāng)手指或其他物體接觸安裝在顯示器前端的觸摸屏?xí)r,所接觸的位置由觸摸屏控制器以坐標(biāo)形式檢測到,通過接口(如RS.232串口)送到CPU,從而確定輸入的信息。電阻式觸摸屏屏體部分是一塊與顯示器表面相匹配的多層復(fù)合薄膜,由一層玻璃或有機(jī)玻璃作為基層,表面涂有一層透明的導(dǎo)電層,上面再蓋有一層外表面經(jīng)硬化處理、光滑防刮的塑料層,它的內(nèi)表面也涂有一層透明導(dǎo)電層。導(dǎo)電層一般為兩層OTI(氧化銦)透明氧化金屬,最外面的一層OTI涂層作為導(dǎo)電體,第二層OTI則經(jīng)過精密的網(wǎng)絡(luò)附上橫豎兩個方向的+5V至0V的電壓場,兩層OTI9基于ARM9基于ARM9的于寫體數(shù)寧識別技術(shù)研究與實現(xiàn)之間有許多細(xì)小(小于千分之一英寸)的透明隔離點把它們隔開絕緣。當(dāng)手指接觸屏幕時,兩層OTI導(dǎo)電層就會出現(xiàn)一個接觸點,電腦同時檢測電壓及電流,計算出觸摸的位置,反應(yīng)速度為一般為10—20ms。手指觸摸屏幕,平常相互絕緣的兩層導(dǎo)電層就在觸摸點位置有了一個接觸,因其中一面導(dǎo)電層接通Y軸方向的5V均勻電壓場,使得偵測層的電壓由零變?yōu)榉橇恪_@種接通狀態(tài)被控制器偵測到后,進(jìn)行A/D轉(zhuǎn)換,將得到的電壓值與5V相比較轉(zhuǎn)換得到觸摸點的Y軸坐標(biāo)。同理可以得出X軸的坐標(biāo)。以上就是所有電阻技術(shù)觸摸屏共同的基本原理【91。電阻類觸摸屏的關(guān)鍵在于材料的使用。電阻屏根據(jù)引出線數(shù)的多少,分為四線、五線、六線等多種觸摸屏。電阻觸摸屏對外界來說是一個完全隔離的工作環(huán)境,因此不怕灰塵和水汽。它可以用任何物體觸摸,比較適合工業(yè)控制領(lǐng)域及辦公室內(nèi)有限人群的使用。電阻觸摸屏的缺點主要是因為復(fù)合薄膜的外層一般采用塑膠材料,使用者太用力或使用銳器直擊可能劃傷整個觸摸屏而導(dǎo)致報廢。如果損傷在限度之內(nèi),劃傷只會傷及外導(dǎo)電層。外導(dǎo)電層的劃傷對于五線電阻觸摸屏來說影響不大,但對四線電阻觸摸屏來說是致命的。出于成本考慮,本文使用較常見的4線電阻式觸摸屏。2.2.4JTAG接口JTAG(JointTestActionGrouP,聯(lián)合測試行動組)是一種國際標(biāo)準(zhǔn)測試協(xié)議(兼容IEEEll49.1),主要用于芯片內(nèi)部測試,方便調(diào)試。現(xiàn)在多數(shù)的高級器件都支持JTAG協(xié)議,如ARM、DSP、FPGA器件等。標(biāo)準(zhǔn)的JTAG接口有4線:TMs、TCK、TDI、TDO,分別為模式選擇、時鐘、數(shù)據(jù)輸入和數(shù)據(jù)輸出線。JTAG最初被設(shè)計用來對芯片進(jìn)行測試,其基本原理是在器件內(nèi)部定義一個TAP(TestAccessPort測試訪問口),通過專用的JTAG測試工具訪問內(nèi)部節(jié)點進(jìn)行測試。JTAG測試允許多個器件通過JTAG接口串聯(lián)在一起,形成一個JTAG鏈,方便的實現(xiàn)對各個器件的分別測試?,F(xiàn)在,JTAG接口還常用于實現(xiàn)ISP(In.systemProgrammable)在線編程,如對FLASH等器件進(jìn)行編程。ARM9核心系統(tǒng)的JTAG接口引腳的定義見表2.1。表2—1JTAG接口引腳定義信號功能nTRST 測試復(fù)位輸入信號TDI JTAG指令和數(shù)據(jù)寄存器的串行數(shù)據(jù)輸入端TMS 輸入方式選擇TCK 測試時鐘TDo JTAG指令和數(shù)據(jù)寄存器串行數(shù)據(jù)輸出端nRESET 目標(biāo)系統(tǒng)復(fù)位信號2.3手寫體數(shù)字識別系統(tǒng)的軟件基礎(chǔ)10碩.J碩.J二學(xué)位論文2.3.1操作系統(tǒng)的分類及比較2.3.1.1操作系統(tǒng)的主要分類及作用隨著電子工業(yè)的不斷發(fā)展,嵌入式系統(tǒng)的性能變得越來越強(qiáng)大,在嵌入式系統(tǒng)中使用帶有完整的系統(tǒng)資源管理功能的操作系統(tǒng)成為可能。操作系統(tǒng)的引入,使得各種硬件資源的管理被系統(tǒng)自動完成,硬件平臺之間的差異在一定程度上被屏蔽,應(yīng)用程序的開發(fā)變得更加簡單。據(jù)調(diào)查,目前國際上共有200多種嵌入式操作系統(tǒng)。從時間尺度來說,嵌入式操作系統(tǒng)大體可以分為實時操作系統(tǒng)和非實時操作系統(tǒng);根據(jù)工作特性又可以分為多任務(wù)和單任務(wù)操作系統(tǒng)【2們。實時是指操作系統(tǒng)在時間上的響應(yīng)速度以及物理進(jìn)程的真實時間。實時操作系統(tǒng)在時間特性上有非常高的要求,一般來說,實時操作系統(tǒng)如果沒有在某個預(yù)定的時間內(nèi)響應(yīng)某個事件,系統(tǒng)就會出錯。非實時操作系統(tǒng)一般不能嚴(yán)格保證事件響應(yīng)速度,如PC上的Windows平臺。這類操作系統(tǒng)下的應(yīng)用程序,不同系統(tǒng)資源條件下運行速度可能有較大差別,事件的響應(yīng)速度也難以估計,如鍵盤響應(yīng),可能從幾毫秒到幾秒不等。在一些對時間有嚴(yán)格要求的系統(tǒng)中,如高速通信交換、軍工、航天等領(lǐng)域,毫秒級別的誤差都是不可接受的,在這種情況下就必須使用實時操作系統(tǒng)。多任務(wù)是指操作系統(tǒng)上同一時間內(nèi)能否運行多個用戶程序。傳統(tǒng)的嵌入式系統(tǒng)為了在有限的硬件資源條件下滿足對性能的要求,一般都是單任務(wù)模式。隨著嵌入式系統(tǒng)硬件性能的提高及軟件復(fù)雜度要求的提升,大多數(shù)嵌入式操作系統(tǒng)向多任務(wù)模式發(fā)展【8】。一般來說,嵌入式操作系統(tǒng)都是軟實時操作系統(tǒng)。2.3.1.2主流的嵌入式操作系統(tǒng)的比較uC/OS是一個比較經(jīng)典的實時操作系統(tǒng)。它的特點是源代碼公開、可移植性好、可裁減、可固化、搶占式內(nèi)核。精簡小巧是其一大特點,對系統(tǒng)性能沒有過高的要求,以ARM7系列芯片為核心的系統(tǒng)就能較好的運行。uC/OS的內(nèi)核采用優(yōu)先級調(diào)度策略,在運行就緒條件下總是運行優(yōu)先級最高的任務(wù)。如果任務(wù)之間由于共享資源出現(xiàn)了競爭或者死鎖,使用系統(tǒng)提供的信號量保護(hù)機(jī)制可能會發(fā)生優(yōu)先級反轉(zhuǎn)的情況,因此使用uC/OS開發(fā)程序時需要開發(fā)者對所開發(fā)的系統(tǒng)有清楚的了解。PalmOS是一種用于掌上電腦的32位操作系統(tǒng),它運行在一個搶占式的多任務(wù)內(nèi)核之上。它的特點是用戶界面層同一時刻僅允許一個應(yīng)用程序打開,進(jìn)入某個程序必須退出原來的程序,.結(jié)構(gòu)簡單,保證了系統(tǒng)的高效和穩(wěn)定。PalmOS專注于移動設(shè)備應(yīng)用,它可以高效的使用內(nèi)存和電池能量,便于硬件設(shè)計者設(shè)計小巧輕便的移動產(chǎn)品。PalmOS軟件開發(fā)聯(lián)盟提供了數(shù)萬種應(yīng)用程序,包括兼容W6rd、Excel的文檔處理工具、瀏覽器、郵件系統(tǒng)、游戲等等,方便了用戶使用。VxWorks是專門為實時嵌入式系統(tǒng)設(shè)計開發(fā)的實時操作系統(tǒng),由美國風(fēng)河慕于ARM9慕于ARM9的于寫體數(shù)字識別技術(shù)研究與實現(xiàn)(WindRiver)公司開發(fā),其具有以下特點:微內(nèi)核、任務(wù)間通信、支持網(wǎng)絡(luò)、支持文件系統(tǒng)及I/O管理、POSIx標(biāo)準(zhǔn)擴(kuò)展、C++以及其他標(biāo)準(zhǔn)支持等等。這些核心功能可以與系統(tǒng)的其他附件及其合作伙伴Tornado的產(chǎn)品結(jié)合在一起使用,為程序員提供高效的實時任務(wù)調(diào)度、中斷管理、任務(wù)間通訊功能,構(gòu)成強(qiáng)大且友好的開發(fā)環(huán)境。系統(tǒng)資源被操作系統(tǒng)自動管理,釋放了程序員的精力,應(yīng)用程序開發(fā)者可以將更多的精力放在功能及應(yīng)用層上。另外Vxwbrks內(nèi)核非常高效,系統(tǒng)可靠性高、實時性能非常出色,因此在衛(wèi)星通訊、軍工控制、航空宇航等高端領(lǐng)域被廣泛采用,其操作系統(tǒng)以及以此為基礎(chǔ)的嵌入式開發(fā)平臺在嵌入式軟件開發(fā)領(lǐng)域處于領(lǐng)導(dǎo)地位。VxW6rks最大的問題就是價格比較高昂,使得產(chǎn)品的成本直線上升。近年來風(fēng)河公司開始和Linux開發(fā)者合作,把自己的傳統(tǒng)優(yōu)勢用于支持嵌入式Linux平臺下的軟件開發(fā)。Linux是一種計算機(jī)操作系統(tǒng),其內(nèi)核的名字也叫“Linux”。Linux操作系統(tǒng)是自由和開放源代碼軟件中最著名的例子。在開始的時候,Linux只是個人狂熱愛好的一種產(chǎn)物,Linux內(nèi)核最初是為英特爾386微處理器設(shè)計的,但是現(xiàn)在Linux內(nèi)核支持從個人電腦到大型主機(jī)甚至包括嵌入式系統(tǒng)在內(nèi)的各種硬件設(shè)備,已經(jīng)成為了一種受到廣泛關(guān)注和支持的操作系統(tǒng),包括IBM和惠普在內(nèi)的一些計算機(jī)業(yè)巨頭也開始支持Linux。嚴(yán)格來講,Linux這個詞本身只表示Linux內(nèi)核,但是實際上人們已經(jīng)習(xí)慣了用Linux來形容整個基于Linux內(nèi)核,以及使用GNU工程各種工具和數(shù)據(jù)庫的操作系統(tǒng)(也被稱為GNU/Linux)?;谶@些組件的Linux軟件套件被稱為Linux發(fā)行版。一般來講,一個Linux發(fā)行套件包含大量的軟件,比如軟件開發(fā)工具、數(shù)據(jù)庫、w曲服務(wù)器(例如Apache)、XWindow、桌面環(huán)境(比如GNOME和KDE)、辦公套件(比如OpenOmce.org)等等。和其他的商用Unix系統(tǒng)以及微軟的Windows系統(tǒng)相比,作為自由軟件的Linux具有成本低、安全性高、更加可信賴的優(yōu)勢。2.3.1.3Linux內(nèi)核結(jié)構(gòu)通常一個Linux內(nèi)核主要由進(jìn)程調(diào)度、內(nèi)存管理、進(jìn)程通信、網(wǎng)絡(luò)接口、虛擬文件系統(tǒng)組成。進(jìn)程調(diào)度(SCHED)模塊主要控制進(jìn)程對CPU的訪問。所有條件都滿足只等待CPU資源的進(jìn)程稱為可運行進(jìn)程。當(dāng)有幾個等待獲得CPU資源的進(jìn)程需要運行時,Linux使用比較簡單的基于優(yōu)先級的調(diào)度算法選擇新的進(jìn)程。內(nèi)存管理(MM)模塊統(tǒng)一管理系統(tǒng)的所有硬件內(nèi)存,負(fù)責(zé)內(nèi)存的分配、.回收以及各個進(jìn)程間的主內(nèi)存共享。Linux的內(nèi)存管理支持虛擬內(nèi)存,即在計算機(jī)中運行的程序,其代碼、數(shù)據(jù)、堆棧的總量可以超過實際內(nèi)存的大小,操作系統(tǒng)自動把程序當(dāng)前需要使用的模塊放到內(nèi)存中,其他部分放在磁盤里,由操作系統(tǒng)自動完成內(nèi)存與磁盤的數(shù)據(jù)交換。這樣程序可以申請比實際還要多的內(nèi)存。內(nèi)存12碩.J碩.J:學(xué)位論文管理模塊從邏輯上分為硬件無關(guān)模塊和硬件相關(guān)模塊。硬件無關(guān)模塊提供了進(jìn)程的映射和邏輯內(nèi)存的對換;硬件相關(guān)模塊則為內(nèi)存管理提供虛擬的接口,進(jìn)行實際的物理操作。進(jìn)程間通信(IPC)對進(jìn)程間的各種通信機(jī)制提供支持。網(wǎng)絡(luò)接口(NET)提供對各種網(wǎng)絡(luò)標(biāo)準(zhǔn)的存取和各種網(wǎng)絡(luò)硬件的支持。網(wǎng)絡(luò)接口可分為網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)驅(qū)動程序。網(wǎng)絡(luò)協(xié)議部分負(fù)責(zé)實現(xiàn)每一種可能的網(wǎng)絡(luò)傳輸協(xié)議。網(wǎng)絡(luò)設(shè)備驅(qū)動程序負(fù)責(zé)與硬件設(shè)備通信,根據(jù)具體硬件的不同而變化。虛擬文件系統(tǒng)(VFS)為所有的設(shè)備提供統(tǒng)一的接口,隱藏各種硬件的具體細(xì)節(jié)。虛擬文件系統(tǒng)可以分為邏輯文件系統(tǒng)和設(shè)備驅(qū)動程序。邏輯文件系統(tǒng)主要是Linux所支持的文件系統(tǒng)如ext2、fat等,VFS支持?jǐn)?shù)10種不同的文件系統(tǒng):設(shè)備驅(qū)動程序是為每一種硬件控制器所編寫的具體設(shè)備驅(qū)動程序并虛擬為文件概念。對于處于中心位置的進(jìn)程,所有其他子系統(tǒng)都依賴于它,因為每個子系統(tǒng)都需要掛起或恢復(fù)進(jìn)程。一般情況下,當(dāng)一個進(jìn)程等待硬件操作完成時,它被掛起;當(dāng)操作真正完成時,進(jìn)程被恢復(fù)執(zhí)行。例如,當(dāng)一個進(jìn)程通過網(wǎng)絡(luò)發(fā)送一條消息時,網(wǎng)絡(luò)接口被掛起,并發(fā)送進(jìn)程消息,直到硬件成功地完成消息的發(fā)送。當(dāng)消息被成功的發(fā)送出去以后,網(wǎng)絡(luò)接口給進(jìn)程返回一個代碼,表示操作的成功或者失敗,網(wǎng)絡(luò)接口恢復(fù)。其他子系統(tǒng)也有類似過程。2.3.1.4最小化的Linux核心組成Linux最大的特點是遵守GPL聲明,可以自由傳播與修改。Linux操作系統(tǒng)的微內(nèi)核與模塊化結(jié)構(gòu)提供給用戶很強(qiáng)的可裁減性??梢园袻inux操作系統(tǒng)看成一棵樹,存儲器管理、任務(wù)調(diào)度、定時器服務(wù)構(gòu)成了樹的主干,其它的驅(qū)動程序、用戶接口程序及應(yīng)用程序便是葉子,使得Linux枝繁葉茂具有各種豐富的功能【20J。最小的嵌入式Linux操作系統(tǒng)僅需要以下關(guān)鍵模塊:(1)系統(tǒng)上電引導(dǎo)程序(2)Linux微內(nèi)核,包括內(nèi)存管理、任務(wù)調(diào)度、定時器服務(wù)等,Linux的關(guān)鍵算法都在于此(3)系統(tǒng)初始化程序在此基礎(chǔ)上添加以下模塊可以構(gòu)成一個最小系統(tǒng)的應(yīng)用:(4)相關(guān)硬件驅(qū)動程序(5).一個基本的應(yīng)用程序 通常使用的Linux操作系統(tǒng)是在最小化的模塊之上,添加各種驅(qū)動程序、文件系統(tǒng)、網(wǎng)絡(luò)協(xié)議、用戶接口等各種模塊完成的。一個好的系統(tǒng)必須要有一個經(jīng)過測試的適合硬件的健壯的核心。因此下面本文將進(jìn)行Linux的最小內(nèi)核的配置與移植,并進(jìn)行測試。然后逐個加入文件系統(tǒng)、13基于ARM9基于ARM9的手寫體數(shù)字識別技術(shù)研究與實現(xiàn)觸摸屏驅(qū)動等周邊設(shè)備的支持,為最終的程序運行搭建好環(huán)境。2.3.2搭建系統(tǒng)移植編程環(huán)境一般的Linux程序開發(fā)都是以本地的方式進(jìn)行開發(fā)與調(diào)試,程序的運行場地就是開發(fā)所用的計算機(jī)。這種方式不適合嵌入式系統(tǒng)的開發(fā),因為嵌入式系統(tǒng)本身資源有限,不能運行開發(fā)與調(diào)試工具,沒有自主開發(fā)能力。所以嵌入式Linux程序開發(fā)一般采用交叉編譯的方式,在宿主機(jī)上(通常是PC)開發(fā)并編譯程序,將結(jié)果下載到目標(biāo)板上運行。開發(fā)與運行的環(huán)境不同,需要交叉編譯是嵌入式系統(tǒng)開發(fā)的主要特點之一。由于宿主機(jī)與目標(biāo)機(jī)的CPU一般不相同,宿主機(jī)一般為Intelx86體系,而目標(biāo)機(jī)為ARM體系結(jié)構(gòu),所以在宿主機(jī)開發(fā)編譯程序時需要使用交叉編譯工具包。開發(fā)時使用宿主機(jī)上的交叉編譯、匯編及鏈接工具將應(yīng)用程序轉(zhuǎn)換生成與硬件CPU特征有關(guān)的只能在目標(biāo)機(jī)上執(zhí)行的二進(jìn)制代碼,然后將此可執(zhí)行文件下載到目標(biāo)機(jī)上運行,開發(fā)時以上步驟交替結(jié)合進(jìn)行。本文使用Windows下的超級終端,通過串口與目標(biāo)機(jī)相連接,同時啟用以太網(wǎng)口連接方便調(diào)試。編譯器選擇Linux下的自由軟件GNUGCC,它是Qt程序推薦的編譯工具,可以完成幾乎所有知名CPU的交叉編譯及調(diào)試。GCC的全稱是GNUCompilerCollection,支持對C、C++、objective.C、JA、,AFortran和Ada程序的編譯。GNU交叉編譯工具包主要包括以下幾個部分:(1)目標(biāo)系統(tǒng)的二進(jìn)制工具binutils,其中包括匯編器as、鏈接器ld等(2)目標(biāo)系統(tǒng)的C編譯器GCC和C++編譯器G++(3)目標(biāo)系統(tǒng)的標(biāo)準(zhǔn)c庫glibc(4)目標(biāo)系統(tǒng)的Linux內(nèi)核頭文件有兩種方式可以建立交叉編譯環(huán)境:一種是從網(wǎng)上下載工具鏈的各個組件如binutils、GCC、G++、glibc、Linux內(nèi)核等的源代碼,重新編譯生成最終程序;另外可以直接從網(wǎng)上下載已經(jīng)編譯好的針對ARM與Linux平臺的工具。為簡化起見,本文直接下載編譯好了的3.32版的GCC, 將相關(guān)文件arm.1inux.gcc.3.32.tar.bz2安裝到目錄/user/local/arm/3.32/bin下,然后修改并增加環(huán)境變量,添加目錄設(shè)置Pathmunge/user/local/arm/3.32/bin。這樣在以后編譯程序或內(nèi)核時會自動使用已經(jīng)安裝好的工具鏈進(jìn)行編譯。2.3.3移植最小化的Linux內(nèi)核2.3.3.1BootLoader的作用 在上電及復(fù)位后,ARM系統(tǒng)從地址Ox00000000處開始執(zhí)行。本文將NORFLASH映射到這個地址,而在這個地址處安排的就是系統(tǒng)的引導(dǎo)裝載程序BootLoader。BootLoader是系統(tǒng)加電后在操作系統(tǒng)內(nèi)核運行之前執(zhí)行的一段代碼。這段代碼將初始化硬件設(shè)備,建立內(nèi)存空間的映射圖,將內(nèi)核映像文件和文件系14碩上學(xué)位論文統(tǒng)從碩上學(xué)位論文統(tǒng)從FLASH復(fù)制到RAM中,將系統(tǒng)的軟硬件環(huán)境調(diào)整到一個合適的狀態(tài),然后跳轉(zhuǎn)到操作系統(tǒng)內(nèi)核的入口點執(zhí)行,開始啟動操作系統(tǒng)。BootLoader包含兩種不同的操作模式:啟動加載模式和下載模式【47】。啟動加載模式是系統(tǒng)正常啟動時的默認(rèn)模式,此模式下BootLoader從目標(biāo)機(jī)器的FLASH上將操作系統(tǒng)加載到RAM中運行,整個過程用戶不進(jìn)行干預(yù)。下載模式下,BootLoader加入了Xmodem與tftp等通信協(xié)議模塊,從而目標(biāo)機(jī)可以通過串口連接或網(wǎng)絡(luò)連接等通信手段從宿主機(jī)下載內(nèi)核映像、根文件系統(tǒng)映像、應(yīng)用程序等等,能夠為終端用戶提供一個基于命令行的操作接口。BootLoader是嚴(yán)重依賴于硬件而實現(xiàn)的,一般將B00tLoader分為stagel和stage2兩大部分。與CPU體系結(jié)構(gòu)有關(guān)的代碼通常放在第一部分中,一般使用匯編語言完成,以保證代碼的簡潔與高效。第二部分使用C語言編寫,保證代碼的可讀性與易移植性,以實現(xiàn)更加復(fù)雜的功能。2.3.3.2B00tLoader第一階段工作stagel是B00tLoader一開始就執(zhí)行的操作,其目的是為stage2的執(zhí)行以及隨后的內(nèi)核的執(zhí)行,設(shè)置好一些基本的硬件環(huán)境。主要包括以下步驟:(1)屏蔽所有的中斷。為中斷提供服務(wù)的通常是操作系統(tǒng),因此在執(zhí)行Bootloader的過程中可以不響應(yīng)任何中斷。屏蔽中斷通過寫CPU的中斷屏蔽寄存器來完成。(2)設(shè)置CPU的時鐘頻率和速度。(3)初始化RAM,設(shè)置系統(tǒng)的內(nèi)存控制器的功能寄存器和各內(nèi)存庫控制寄存器等。(4)為加載stage2準(zhǔn)備RAM空間。(5)拷貝stage2至0RAM中。(6)跳轉(zhuǎn)到stage2的入口點。2.3.3.3BootLoader第二階段工作stage2的主要的功能是通過串口下載Linux內(nèi)核到目標(biāo)板上,主要包括以下幾個步驟:(1)初始化本階段要使用到的硬件設(shè)備。這通常包括:初始化至少一個串口,以便和終端用戶進(jìn)行信息交互,初始化計時器。(2)檢測系統(tǒng)的內(nèi)存映射。所謂內(nèi)存映射就是指在整個物理地址空間中有哪些地址范圍被分配到尋址系統(tǒng)的RAM單元.。 (3)加載內(nèi)核映像和根文件系統(tǒng),將其從FLASH讀入到RAM中。這里包括兩個方面:內(nèi)核映像所占用的內(nèi)存范圍;根文件系統(tǒng)所占用的內(nèi)存范圍。在規(guī)劃內(nèi)存占用的布局時,主要考慮基地址和映像的大小兩個方面。(4)設(shè)置內(nèi)核的啟動參數(shù)。15基于ARM9基于ARM9的手寫體數(shù)字識別技術(shù)研究與實現(xiàn)(5)調(diào)用內(nèi)核。Bootloader調(diào)用Linux內(nèi)核的方法是直接跳轉(zhuǎn)到內(nèi)核的第一條指令處。將內(nèi)核映像解壓拷貝到指定位置,然后設(shè)置好Linux內(nèi)核啟動的參數(shù)后,就可以啟動Linux內(nèi)核了。2.3.3.4根據(jù)硬件配置Linux最小系統(tǒng)并移植上板內(nèi)核是操作系統(tǒng)的核心程序,主要提供進(jìn)程管理、內(nèi)存管理、設(shè)備驅(qū)動、文件系統(tǒng)、網(wǎng)絡(luò)管理等核心功能。Linux系統(tǒng)采用的是單一內(nèi)核結(jié)構(gòu),操作系統(tǒng)中所有的系統(tǒng)相關(guān)功能都被封裝在內(nèi)核中,他們與外部程序處于不同的內(nèi)存地址空間中,程序只有通過系統(tǒng)調(diào)用(systemcall)來訪問內(nèi)存結(jié)構(gòu)。Linux支持模塊的動態(tài)裝入和卸載,不必全部靜態(tài)的編譯進(jìn)內(nèi)核中。本文采用的Linux內(nèi)核版本號為2.4.2。根據(jù)前文所述,配置好BootLoader及內(nèi)存映射關(guān)系后,編譯Linux模塊下載后運行即可。2.3.4掛載文件系統(tǒng)2.3.4.1Linux文件系統(tǒng)特點及加載方式Linux的重要特征之一就是支持多種文件系統(tǒng)。這樣它更加靈活并可以和其它操作系統(tǒng)共存。Linux已經(jīng)支持十多種文件系統(tǒng),包括ext、ext2、minix、umsdos、msdos、Vfat、proc、smb、ncp、is09660、sysV、hpfb、jf.fS、carmfs、nfs、yaf.fs等。毫無疑問,Linux所支持的操作系統(tǒng)今后還會增加。Linux并不使用設(shè)備標(biāo)識符(如設(shè)備號或驅(qū)動器名稱)來訪問獨立文件系統(tǒng),而是將整個文件系統(tǒng)表示成單一實體的層次樹結(jié)構(gòu)進(jìn)行訪問。Linux每安裝一個文件系統(tǒng)時,都會將其加入到文件系統(tǒng)層次樹中。每次安裝時,文件系統(tǒng)將被連接到一個被稱為安裝目錄或安裝點的目錄上,文件系統(tǒng)中的內(nèi)容將會取代此目錄中原來的內(nèi)容。當(dāng)文件系統(tǒng)被卸載時,安裝目錄中原有的文件將再次出現(xiàn)。當(dāng)磁盤初始化時,磁盤中將添加一個描述磁盤物理邏輯構(gòu)成的分區(qū)結(jié)構(gòu)。包含文件系統(tǒng)的設(shè)備稱為塊設(shè)備,文件系統(tǒng)將數(shù)據(jù)組織成目錄、軟連接等存在于物理塊設(shè)備中的邏輯層次結(jié)構(gòu)。Linux系統(tǒng)將塊設(shè)備看成簡單的線性組合關(guān)系,并不關(guān)心磁盤設(shè)備真正的底層物理結(jié)構(gòu)與邏輯。塊設(shè)備驅(qū)動程序負(fù)責(zé)將Linux發(fā)來的塊操作轉(zhuǎn)換為實際的物理磁盤操作,為Linux文件操作提供服務(wù)。塊設(shè)備驅(qū)動中將保存磁盤的磁道、扇區(qū)、柱面數(shù)、位置等相關(guān)信息。不同的物理設(shè)備有不同信息記錄,但是在Linux系統(tǒng)看來,這些都是一樣的。因此只要驅(qū)動設(shè)置正確,通過塊設(shè)備的掛載,Linux可以操作各種各樣的記錄設(shè)備,甚至是遠(yuǎn)程的基于網(wǎng)絡(luò)的設(shè)備,而不管他們的物理狀態(tài)。文件系統(tǒng)中的文件是數(shù)據(jù)的集合,不僅包括用戶正常記錄的數(shù)據(jù),還包括文件系統(tǒng)的結(jié)構(gòu)信息,以及Linux系統(tǒng)中所見到的文件名、目錄、軟連接、文件保護(hù)與校驗信息等內(nèi)容。此外文件中還要保存安全信息以便保持操作系統(tǒng)的基本完16碩{碩{:學(xué)位論文整性。所有這些數(shù)據(jù)被封裝到“文件”單元中提供給用戶使用。2.3.4.2加載YAFFS文件系統(tǒng)本文的系統(tǒng)掛載了NANDFLASH,其特點是容量大,存儲區(qū)可能有壞點,以頁面為單位進(jìn)行存取。針對這些特點,YAFFS文件系統(tǒng)進(jìn)行了針對性的加強(qiáng)。它是日志結(jié)構(gòu)的文件系統(tǒng),提供平衡損耗與掉電保護(hù)功能,可以有效避免隨機(jī)掉電對文件系統(tǒng)一致性與完整性的損壞。YAFFS采用了多策略混合的垃圾回收算法,結(jié)合了貪心算法的高效性和隨機(jī)算法的平均性,達(dá)到了兼顧損耗平均和系統(tǒng)開銷的目的。YAFFS將文件組織成固定大小(512字節(jié))的數(shù)據(jù)段。每個文件都有一個頁面專門存放文件頭,文件頭保存了文件的模式、所有者id、組id、長度、文件名等信息。為了提高文件數(shù)據(jù)塊的查找速度,文件的數(shù)據(jù)段被組織成樹形結(jié)構(gòu)。YAFFS在進(jìn)行改寫操作時總是先寫入新的數(shù)據(jù)塊,然后將舊的數(shù)據(jù)塊從文件中刪除。NANDFLASH物理存取是以頁面為單位進(jìn)行的,因此YAFFS文件系統(tǒng)也將文件組織成固定大小的數(shù)據(jù)段,利用NANDFLASH所提供的每個頁面16字節(jié)的備用空間存放校驗及文件結(jié)構(gòu)信息,以實現(xiàn)錯誤檢測及壞塊處理的功能,同時提高了文件系統(tǒng)的操作速度。YAFFS使用頁面?zhèn)溆每臻g的ECC進(jìn)行錯誤檢測,出現(xiàn)多次錯誤后此頁面便會停止使用。YAFFS充分利用了NANDFLAsH所提供的每個頁面l6字節(jié)的備用存儲空間,參考了SmartMedia的設(shè)定,備用空間中的6字節(jié)被用作頁面數(shù)據(jù)的ECC,2個字節(jié)分別用作塊狀態(tài)字和數(shù)據(jù)狀態(tài)字,其余的8字節(jié)用來存放文件系統(tǒng)的組織信息,即元數(shù)據(jù)。由于文件系統(tǒng)的基本組織信息被保存在頁面的備份空間中,因此,在文件系統(tǒng)加載時只需要掃描各個頁面的備份空間,即可建立起整個文件系統(tǒng)的結(jié)構(gòu),加快了文件系統(tǒng)的加載速度。在內(nèi)核中建立YAFFS目錄fs/yaffs,并把yaffs代碼復(fù)制到此目錄下。修改Kconng和makefile,使得可以配置YAFFS。在YAFFS目錄中生成Makenle和Kconfig文件。配置內(nèi)核時選中MTD支持和YAFFS支持,編譯內(nèi)核并把內(nèi)核下載到開發(fā)板的FLASH上,制作根文件系統(tǒng)并下載到FLASH指定位置。這樣,YAFFS文件系統(tǒng)便被安裝到嵌入式Linux系統(tǒng)中了。2.3.5觸摸屏加載與調(diào)試2.3.5.1Linux中觸摸屏的加載方式Linux下的觸摸屏驅(qū)動程序主要都在/kernel/drivers/char/s3c2410.ts.c文件中。在觸摸屏設(shè)備驅(qū)動程序中,全局變量structTSDEVtsdev用來保存觸摸屏的相關(guān)參數(shù)、等待處理的消息隊列、當(dāng)前采樣數(shù)據(jù)、上一次采樣數(shù)據(jù)等信息。TsRET結(jié)構(gòu)體中的信息就是驅(qū)動程序提供給上層應(yīng)用程序使用的信息,用來存儲觸摸屏的返回值。上層應(yīng)用程序通過讀接口,從底層驅(qū)動中讀取信息,并根據(jù)得到的值進(jìn)行其他方面的操作?;贏RM9基于ARM9的于寫體數(shù)寧識別技術(shù)研究‘j實現(xiàn)TSDEV結(jié)構(gòu)用于記錄觸摸屏運行的各種狀態(tài),PenStatus包括PENUP、PENDOWN和PENFLEETING。buf【MAXTSBUF】是用來存放數(shù)據(jù)信息的事件隊列,head、tail分別指向事件隊列的頭和尾。程序中的事件隊列是一個環(huán)形結(jié)構(gòu),當(dāng)有事件加入時,隊列頭加一,當(dāng)有事件被取走時,隊列尾加一,當(dāng)頭尾位置指針一致時讀取該事件的信息,進(jìn)程會被安排進(jìn)入睡眠。WQ等待隊列,包含一個鎖變量和一個正在睡眠進(jìn)程鏈表。當(dāng)有好幾個進(jìn)程都在等待某件事時,Linux會把這些進(jìn)程記錄到這個等待隊列。它的作用是當(dāng)沒有筆觸事件發(fā)生時,阻塞上層的讀操作,直到有筆觸事件發(fā)生。隊列使用自旋鎖,自旋鎖是基于共享變量來工作的,函數(shù)可以通過給某個變量設(shè)置一個特殊值來獲得鎖。而其他需要鎖的函數(shù)則會循環(huán)查詢鎖是否可用。MAXTSBUF的值為16,即在沒有被讀取之前,系統(tǒng)緩沖區(qū)中最多可以存放16個筆觸數(shù)據(jù)信息。2.3.5.2加載觸摸屏的主要步驟首先在驅(qū)動模塊初始化函數(shù)中,除了對驅(qū)動的字符設(shè)備的注冊外,還要對中斷進(jìn)行申請。一般需要申請兩個觸摸屏相關(guān)的中斷。一個是IRQTC中斷,該中斷在筆按下時,對應(yīng)管腳產(chǎn)生表示中斷的低電平信號;另一個是IRQADCDONE中斷,該中斷是當(dāng)芯片內(nèi)部A/D轉(zhuǎn)換結(jié)束后,通知中斷控制器產(chǎn)生中斷,這時就可以去讀取轉(zhuǎn)換得到的數(shù)據(jù)。當(dāng)觸摸屏被按下后,就會觸發(fā)中斷,這時Linux系統(tǒng)會調(diào)用申請中斷時附帶的s3c2410isrtc中斷回調(diào)函數(shù),該函數(shù)中判斷若為筆抬起則啟動x軸坐標(biāo)的A/D轉(zhuǎn)換。轉(zhuǎn)換完畢后會,會觸發(fā)產(chǎn)生ADC中斷,這時就會調(diào)用申請中斷時附帶的s3c2410isradc中斷回調(diào)函數(shù),在該函數(shù)中進(jìn)行判斷。若x軸坐標(biāo)轉(zhuǎn)換結(jié)束馬上進(jìn)行y軸坐標(biāo)的A/D坐標(biāo)轉(zhuǎn)換;若y軸坐標(biāo)轉(zhuǎn)換結(jié)束,則重新回到等待中斷模式,然后將坐標(biāo)值寫入環(huán)形緩沖區(qū),并環(huán)形等待隊列中的進(jìn)程。將ADC觸摸屏控制寄存器ADCTSC的第8位設(shè)為1,使得筆抬起也能產(chǎn)生中斷信號。將修改后的觸摸屏驅(qū)動加入Linux內(nèi)核,重新編譯下載,觸摸屏便能將信號送給Linux系統(tǒng)了。2.3.6準(zhǔn)備功能層軟件開發(fā)工作進(jìn)行到這里,硬件平臺及底層的軟件開發(fā)基本完成,可以開始準(zhǔn)備應(yīng)用層及功能層的軟件設(shè)計開發(fā)了。為了減小開發(fā)及調(diào)試的難度,本文所設(shè)計的系統(tǒng)以識別0—9十個阿拉伯?dāng)?shù)字為主要目標(biāo),在實現(xiàn)基本的阿拉伯?dāng)?shù)字辨別的基礎(chǔ)上再考慮擴(kuò)充識別對象的范圍。手寫辨別程序最終目的是在ARM.Linux平臺運行,其中邏輯辨別模塊需要在PC.Window平臺上編程并測試,然后將完成的模塊嵌入主程序,移植到ARM.Linux平臺下。Qt的一個重要特點就是它的跨平臺特性,所有的Qt庫函數(shù)都有Windows和Linux版本,用戶所寫的應(yīng)用程序基本不需要改動就能夠在Linux和Window平臺移植運行。得益于Qt的這一良好特性,本文18碩十學(xué)位論文所要編寫的大量應(yīng)用程序不需要考慮太多就能達(dá)到程序與硬件平臺的無關(guān)性,同碩十學(xué)位論文所要編寫的大量應(yīng)用程序不需要考慮太多就能達(dá)到程序與硬件平臺的無關(guān)性,同時在PC和Linux上運行。所有程序在編寫時不調(diào)用平臺特有函數(shù),用純C/C++及Qt庫完成,以減少硬件平臺的不同帶來的影響,減小軟件開發(fā)工作量。程序的總體框架見圖2.5:圖2—5程序總體結(jié)構(gòu)本文的工作路線如下:先設(shè)計并實現(xiàn)圖像預(yù)處理模塊,然后利用此模塊在PC上將測試用圖像文件轉(zhuǎn)換成標(biāo)準(zhǔn)的數(shù)組,作為下一模塊的輸入。然后在PC上設(shè)計并實現(xiàn)圖像識別邏輯模塊,將上一步轉(zhuǎn)換后的圖像輸入此模塊,調(diào)試并得到理想的結(jié)果。當(dāng)邏輯判斷滿足預(yù)定要求時,將此模塊變成代碼,嵌入到Qt的主程序當(dāng)中,最后實現(xiàn)觸摸屏動作處理模塊,形成從觸摸屏動作生成圖像再變成歸一化數(shù)據(jù)最后到自動識別的程序流程,移植到ARM.Linux平臺上完成數(shù)字字符識別功能。19基于ARM9基于ARM9的手寫體數(shù)寧識別技術(shù)研究與實現(xiàn)第3章手寫體數(shù)字識別系統(tǒng)圖像預(yù)處理的研究與實現(xiàn)3.1跨平臺編程環(huán)境Qt3.1.1選擇GUI作為交互方式在系統(tǒng)操控方式中,業(yè)界一直存在著2大流派,既CLI(CommandLineInstruction)與GUI(GraphicUserInterfaceGUI)。CLI的意思是使用命令行及指令輸入的方式與計算機(jī)系統(tǒng)發(fā)生互動;而GUI是指通過圖形、對話框等模式與操作者完成信息交互,如普通個人電腦上裝的windows操作系統(tǒng)就是GUI形式的代表者。不可否認(rèn),在當(dāng)今的信息科技條件下,只有CLI方式才能最大可能的與計算機(jī)系統(tǒng)完成信息的交互,真正的獲得“完全的系統(tǒng)控制權(quán)",因此大多數(shù)科技開發(fā)人員都使用CLI方式以獲得更大的操控自由度。本文開發(fā)所使用的系統(tǒng)平臺是Linux,Linux的強(qiáng)項在于其內(nèi)核的穩(wěn)定、強(qiáng)大、高效。與windows平臺對比,圖形界面從來不是Linux的優(yōu)勢所在。但是對于普通的使用者以及一般的外圍開發(fā)人員,圖形GUI方式由于其簡單直觀,無疑更容易被接受,甚至在某些場合,圖形操作方式是必須的。windows操作系統(tǒng)的成功與廣泛流行,并不是由于其技術(shù)的領(lǐng)先性,很大程度上是其圖形化的操作界面受到大量的普通計算機(jī)使用者的青睞而造成的。因此一個系統(tǒng)要走入普通用戶手中,一個友好直觀的GUI系統(tǒng)是不可缺少的。本文所要完成的字符識別功能與圖形密切相關(guān),目標(biāo)使用對象為普通的操作人員,因此使用GUI方式更能滿足要求。3.1.2主流的嵌入式GUI在嵌入式系統(tǒng)硬件性能不斷提高的今天,圖形用戶界面的地位變得越來越重要,它的存在為使用者提供了友好便利的人機(jī)界面。但是嵌入式GUI與桌面機(jī)系統(tǒng)GUI又有區(qū)別,主要是因為嵌入式系統(tǒng)硬件資源一般有限而GUI操作又屬于比較消耗資源的一類操作,因此嵌入式GUI要求簡單、直觀、可靠、占用資源小并且反應(yīng)迅速。同時,嵌入式系統(tǒng)不像標(biāo)準(zhǔn)的PC那樣結(jié)構(gòu)統(tǒng)一,各個硬件系統(tǒng)之間有較大的差異性及特殊性,因此嵌入式GuI需要具備高度可移植性與可裁剪性,以適應(yīng)不同的硬件條件和使用需求。支持嵌入式Linux操作系統(tǒng)的圖形類庫和開發(fā)系統(tǒng),常見的開源版本有以下三種【49】:(1)MicroWindows:著名的開放源碼的嵌入式GUI軟件,它的設(shè)計宗旨是針對體積小的裝置建立一套先進(jìn)的視窗環(huán)境。MicroWindows能夠在沒有任何操作系統(tǒng)或其他圖形系統(tǒng)的支持下運行,對裸顯示設(shè)備進(jìn)行直接操作。因此,MicroWindows顯得十分小巧,便于移植到各種硬件和軟件系統(tǒng)上。20碩十學(xué)位論文(2)MiniGUI碩十學(xué)位論文(2)MiniGUI:國內(nèi)做得比較好的自由軟件項目之一,它可以在以Linux為基礎(chǔ)的應(yīng)用平臺上提供一個簡單可行的MiniGUl支持系統(tǒng)?!靶 笔荕iniGUI的特色,MiniGUI可以應(yīng)用在電視機(jī)頂盒、實時控制系統(tǒng)及掌上電腦等諸多場合。由于這是由中國人自己開發(fā)的GUI系統(tǒng),所以對中文的支持最好。(3)Qt/Embedded:由挪威著名的Trolltech公司開發(fā)的面向嵌入式系統(tǒng)的Qt版本。Qt/Embedded類庫完全采用C++封裝,豐富的控件資源和較好的可移植性是Qt/Embedded最為優(yōu)秀的一方面。它的類庫接口完全兼容于同版本的Qt.x11,使用X.windows下的開發(fā)工具可以直接開發(fā)基于Qt/Embedded的應(yīng)用程序GUI界面。3.1.3Qt的特點Qt被設(shè)計成跨平臺的開發(fā)工具,由Trolltech最初創(chuàng)建并用于LinuX臺式機(jī)。它支持各種帶有UNIX核心特點的系統(tǒng),其中就包括Linux系統(tǒng),同時Qt還支持當(dāng)今普通計算機(jī)上流行的Windows視窗系統(tǒng)。Linux上最流行的桌面環(huán)境KDE就是用Qt編寫的,從KDE桌面可以看出Qt提供的是一個重量級的圖形開發(fā)環(huán)境,使用它可以開發(fā)出藝術(shù)級的GUI效果。 Qt/Embedded以原始Qt為基礎(chǔ),做了許多富有特色的調(diào)整,使之更加適用于嵌入式環(huán)境。Qt/Embedded進(jìn)一步封裝了軟硬件的許多操作細(xì)節(jié),通過QtAPI與LinuxI/O設(shè)施直接交互,使得熟悉并已經(jīng)適應(yīng)面向?qū)ο缶幊痰娜藛T能夠釋放更多的精力到應(yīng)用上,減少硬件及相關(guān)操作所帶來的工作量。與其它GuI相比,QtGUI非???,并且它沒有分層,這使得Qt/Embedded成為用于運行基于Qt的程序的緊湊環(huán)境。其基于C/C++,面向?qū)ο蟮捏w系結(jié)構(gòu)使代碼結(jié)構(gòu)化、可重用并且運行快速。Trolltech公司還推出了Qt掌上機(jī)環(huán)境Qtopia。Qtopia提供了一個基本桌面窗口環(huán)境,該環(huán)境為開發(fā)者提供了一個易于使用的界面,其中包含有全套的個人信息管理(personalInformationManagement,PIM)應(yīng)用程序、因特網(wǎng)客戶機(jī)、實用程序等等,在智能手機(jī)、個人電子消費品領(lǐng)域得到了廣泛的應(yīng)用。Qt不僅僅是一個GUI庫,它以C/C++類庫的形式,給開發(fā)者提供了重量級2DGUI和輕中量級3DGUI、多線程管理、文件細(xì)節(jié)封裝、二進(jìn)制級數(shù)據(jù)交換、數(shù)據(jù)庫接口、網(wǎng)絡(luò)模塊封裝、XML/Script腳本操作等功能的支持。Qt在系統(tǒng)中的作用,同Xwindow上的Motif、Openwin、GTK等圖形界面庫和windows平臺上的MFC、OWL、VCL、ATL類似,而且Qt具有下列突出優(yōu)點【81:(1)優(yōu)良的跨平臺特性。Qt支持下列操作系統(tǒng):MicrosoftWindows95/98、MicrosoftWindowsNT、Linux、 Solaris、SunOS、HP-UX、DigitalUNIX(O-SF/l,Tru64)、Irix、FreeBSD、BSD/OS、SCO、AIX、0S390、QNX等等。(2)面向?qū)ο筇攸c。Qt的良好封裝機(jī)制使得Qt的模塊化程度非常高,可重用性較好,對于用戶開發(fā)來說是非常方便的。Qt提供了一種稱為信號/插槽的安某于ARM9某于ARM9的手寫體數(shù)字識兄ll技術(shù)研究與實現(xiàn)全類型來替代回調(diào)函數(shù),這使得各個元件之間的協(xié)同工作變得十分簡單。(3)豐富的API。Qt包括多達(dá)250個以上的C++類,還提供基于模板的collections、serialization、11le、I/Odevice、directorymanagement、date/time類。甚至還包括正則表達(dá)式的處理功能。(4)支持2D/3D圖形渲染,支持OpenGL。(5)大量的開發(fā)文檔。(6)XML支持。3.1.4選擇Qt的主要原因本文的目標(biāo)是在ARM.Linux平臺上實現(xiàn)手寫體數(shù)字識別功能,要實現(xiàn)這一功能,至少需要完成接受觸摸屏操作、圖像預(yù)處理、數(shù)字信息識別等功能模塊。要完成以上模塊,就必須在PC上將最核心的數(shù)字信息識別模塊編程實現(xiàn)并調(diào)試完畢。數(shù)字信息的識別算法一般都比較復(fù)雜,直接使用Qt編程進(jìn)行數(shù)學(xué)邏輯運算,難度較大并且出錯幾率高。因此本文所采用的技術(shù)路線是利用Matlab的快速原型能力,在PC上的Matlab中實現(xiàn)數(shù)字字符信息識別判斷功能,然后將此模塊邏輯自動生成C代碼,嵌入到Qt主程序當(dāng)中。因此,本文所設(shè)計的功能模塊需要有跨平臺運行的能力。Qt的最大特點就是跨平臺,Qt庫將不同操作系統(tǒng)之間的細(xì)節(jié)差別封裝屏蔽,同樣的應(yīng)用程序代碼,幾乎不要改動就能在Window與Linux之間移植j使用Qt進(jìn)行編程,將大大減少程序在不同平臺間移植所需要的工作量。再者Qt提供的庫函數(shù)在圖像處理,數(shù)據(jù)封裝等方面比MFC強(qiáng)大得多,以Qt為基礎(chǔ)進(jìn)行編程將進(jìn)一步減小開發(fā)難度。最后,Qt默認(rèn)的編譯器是著名的GCC工具鏈,對比微軟集成開發(fā)環(huán)境中的編譯器,其對國際標(biāo)準(zhǔn)ANSIC的支持要好得多,能夠達(dá)到90%以上。本文需要使用Matlab與LinuxQt聯(lián)合編程,而對標(biāo)準(zhǔn)C的支持程度在使用幾種開發(fā)工具聯(lián)合編程時,直接影響開發(fā)的難度及結(jié)果。綜合以上幾點,本文最終選擇Qt為開發(fā)工具。3.2圖像預(yù)處理程序總體框架字符判斷邏輯模塊的一個重要特點,是調(diào)試完畢的模型對非訓(xùn)練樣本具有一定的泛化能力(推廣性),即在對已有測試樣本進(jìn)行準(zhǔn)確辯識的基礎(chǔ)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論