




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)字錄音機設(shè)計方案:一個使用統(tǒng)一建模語言( UML )設(shè)計嵌入式系統(tǒng)的實例, 著, 譯摘要本文內(nèi)容是采用統(tǒng)一建模語言( UML )對一個嵌入式系統(tǒng)進行面向?qū)ο蠓治龊驮O(shè)計的實例。 被分析的系統(tǒng)是一個數(shù)字錄音機或稱口授留聲機。 設(shè)計實現(xiàn)采用一個嵌入式微處理器和 C+ 編碼。關(guān)鍵字 :面向?qū)ο蟮脑O(shè)計, UML ,嵌入式系統(tǒng)1 簡介統(tǒng)一建模語言(Unified Modeling Language-UML)BJR1,BJR2 提供了一套標(biāo)準(zhǔn)的符號來表示面向?qū)ο蟮能浖治龊驮O(shè)計方法CY90,MO92,SS95 。使用 UML 圖表能夠?qū)軓?fù)雜的系統(tǒng)建模,包括實時嵌入式系統(tǒng)。然而, UML 并不是軟件開發(fā)過
2、程,也沒有嚴(yán)格區(qū)分軟件工程中各開發(fā)階段。UML 定義了一套由不同圖表組成的標(biāo)記符號,但是并沒有描述怎樣創(chuàng)建和應(yīng)用這些圖表。 Dou98 介紹了使用 UML 和面向?qū)ο蟮姆治鲈O(shè)計技術(shù)建造實時嵌入式系統(tǒng)。本文由Douglass 撰寫,描述了使用 UML 對一個數(shù)字錄音機(或口授留聲機)系統(tǒng)進行面向?qū)ο笤O(shè)計和實現(xiàn)的過程。目前市場上已經(jīng)有一些數(shù)字錄音機商業(yè)化產(chǎn)品。本文我們描述的模型參照了一家著名廠商的類似產(chǎn)品的設(shè)計。相關(guān)需求說明參見本文第二節(jié)。第三節(jié)討論系統(tǒng)的對象模型給出主類圖。第四節(jié)繼續(xù)進行面向?qū)ο蟮姆治觯侵饕懻撁總€對象內(nèi)部的行為。第五節(jié)進行系統(tǒng)結(jié)構(gòu)設(shè)計。包括數(shù)字錄音機的硬件結(jié)構(gòu),以及并行處理
3、模型,在該模型內(nèi),為每個對象將分配一個可執(zhí)行的線程。 第六節(jié)將定義不同對象之間的合作關(guān)系。 并通過設(shè)計模式GHJV95 將分析階段定義的類整合。詳細設(shè)計在第七節(jié)進行討論。最后,第八節(jié)討論系統(tǒng)實現(xiàn)。 我們使用C+進行軟件的開發(fā),硬彳平臺采用一個 32位RISC(精簡指令集計算機)嵌入處理器。2需求分析數(shù)字錄音機是一個電子消費產(chǎn)品, 用來錄制和回放語音。通過內(nèi)置的麥克錄制語音信息, 然后將信息保存在數(shù)字內(nèi)存中。使用者可以很方便的在任何時候回放任意錄制好的信息,聲音將通過設(shè)備前端的揚聲器播放。該產(chǎn)品將具有體積小、重量輕、使用方便等特點。圖2.1是我們設(shè)計的數(shù)字錄音機的外觀示意圖。它是一個手持系統(tǒng),具
4、有一塊平面顯示屏以及一些按鈕。圖2.1外觀示意圖在設(shè)計中將要考慮到的系統(tǒng)特性如下:最多存儲 10 條信息,每條信息的長度將受系統(tǒng)剩余內(nèi)存的限制。簡單易用的屏幕菜單。直接存取任意語音信息。具有時鐘功能(不存在2000 年問題) ,用戶可以每天設(shè)置鬧鐘,鬧鐘鈴聲 60秒鐘后自動停止,用戶也可以按任意鍵停止鈴聲。全功能液晶顯示屏. 屏幕上總是顯示當(dāng)前日期和時間。同時顯示提示信息如操作指南,當(dāng)前操作信息等。電池電量顯示,如果電量不足,系統(tǒng)會發(fā)出嗶嗶聲警告。為了節(jié)省電池. 在不使用的情況下,系統(tǒng)將關(guān)閉外部設(shè)備的電源,用戶可以通過按任意鍵使系統(tǒng)回復(fù)正常。提供好的聲音回放質(zhì)量。使用 6Khz 的 8 位采樣
5、頻率。2.1 外部事件嵌入式系統(tǒng)經(jīng)常要跟外部環(huán)境交互。在目前的分析階段,我們把系統(tǒng)視為一個可以響應(yīng)外部環(huán)境的請求和消息的黑盒子。 外部環(huán)境由一些參與者( Actor )組成。每個參與者與我們的系統(tǒng)進行不同目的的交互并交換一組不同的信息。系統(tǒng)范圍圖 /Context-Level Diagram圖 2.2 顯示了所有與我們的系統(tǒng)進行交互的參與者。圖中我們定義了 3 個參與者:用戶(User),電池(Battery)和時鐘(time)。圖中還顯示了接口和用于實現(xiàn)系統(tǒng)和參與者交換信息的傳感裝置和執(zhí)行裝置。 這里指的信息可以是參與者向系統(tǒng)提出的請求, 也可以是系統(tǒng)作出的響應(yīng)或提供給參與者的服務(wù)內(nèi)容。傳感
6、裝置(Sensors)包括麥克和按鈕。執(zhí)行裝置(Actuators)包括揚聲器、電池電量顯示表。每當(dāng)一個時間計時結(jié)束時,參與者時鐘向系統(tǒng)發(fā)送一個內(nèi)容類似于下一秒或 者下一個小時的消息。在實際實現(xiàn)中,我們將用一個硬件定時器來控制具體時間。圖2.2系統(tǒng)范圍圖事件 /Events事件是環(huán)境與系統(tǒng)之間傳遞的的重要消息。一個實時響應(yīng)系統(tǒng)必須在某個限定的時間內(nèi)對外部事件作出響應(yīng)。下表中內(nèi)容顯示了針對我們的系統(tǒng)所有可能發(fā)生的外部事件。事件的方向:Irgt示該事件由環(huán)境傳遞給系統(tǒng) ,Out表相反。事件發(fā)生模式(A):周期事件(Periodic):表示該事件的發(fā)生是遵循某個固定的時間周期的。在表格中用P表不隨機
7、事件:(Episodic):表示該事件隨機發(fā)生。在表格中用 E表示。響應(yīng)時間:表示系統(tǒng)對該事件作出響應(yīng)所需時間的上限,如果在給出的時間內(nèi)系統(tǒng)沒有完成響應(yīng),將會引起系統(tǒng)錯誤。No事件系統(tǒng)響應(yīng)方向A響應(yīng)時間1某一秒計時結(jié)束a,更新內(nèi)部時鐘b,檢查鬧鐘設(shè)置c,更新時鐘顯示,更新任務(wù)條InP0.5秒2一個米樣周期結(jié)束a,回放或記錄下個采樣InP1/2周期3用戶按下某個按鈕A,顯示任務(wù)條。B,開始錄苜或回放一條記錄InE0.5秒4用戶按停止按鈕A,停止當(dāng)前任務(wù)。B,更新屏幕內(nèi)容InE0.5秒5電量不足告警;A,警告用戶并終止當(dāng)前任務(wù)InE1秒6進入等待模式A,關(guān)閉顯示器InE1秒7當(dāng)系統(tǒng)處于等待模式時,
8、 用戶按任意鍵喚醒系統(tǒng)A,離開等待模式,打開顯示器以 及其它外設(shè)。InE1秒2.2 用例/Use Cases用例是從使用者的角度描述系統(tǒng)的功能。使用者可能是一個人或者某個設(shè)備。每個用例表示一種使用系統(tǒng)的方法,每個用例完成后產(chǎn)生不同的結(jié)果。在我們的系統(tǒng)中共有 6個用例。如圖2.3所示。用例描述如下記錄一條信息 R Record a message).系統(tǒng)開始通過麥克錄音,直到用戶按使用者選中信息存儲目錄中的某個信息存儲位置,并按下錄音 (Recording)鍵。如果在該位置已經(jīng)存儲了一條信息,該記錄將被刪除。停止(Stop)鍵或者內(nèi)存耗盡。圖2.3用例圖回放一條信息(Playback a mes
9、sage)用戶選擇某個信息存儲位置,然后按播放(Play)按鈕。如果該位置保存有信息,則系統(tǒng)通過揚聲器回放該聲音信息,直到回放完畢或用戶按了 停止.按鈕。刪除一條信息(Delete a message)用戶選中一個存儲位置按刪除(Delete)按鈕,該位置存儲的信息將被永久刪除,所占用的內(nèi)存將被釋放。鬧鐘定時(Set the alarm time )用戶可以設(shè)定是否開啟(關(guān)閉)鬧鐘,以及鬧鈴時間。這些操作將在鬧鐘菜單中進行。設(shè)定系統(tǒng)時鐘/Set the clock time用戶可以通過此功能調(diào)整校準(zhǔn)系統(tǒng)時間,或者將系統(tǒng)時間改為當(dāng)前時區(qū)的時間。顯示系統(tǒng)時間/Watch the time用戶可查看
10、顯示屏上連續(xù)顯示的當(dāng)前時間、日期。2.3 場景 /Scenarios場景用來描述系統(tǒng)與外部參與者( user,battery和time)之間的交互行為。一般來說,即使在每一個參與者的角色都很明確的情況下,仍然很難將所有可能的交互行為都考慮到,事實上也沒有必要這樣做。我們只要研究必須的場景以滿足系統(tǒng)需要就行了,比如,我們必須研究在系統(tǒng)回放聲音的時候電池電量不足以及當(dāng)系統(tǒng)播放聲音時鬧鐘響起來這兩種情況。圖 2.4 表示了播放聲音信息的用例。(ctorU(?Systoin:SpemKm1; Play Message2: Stan pi ay網(wǎng) sound 3i Display Progress in
11、dicstof 61 Display CloGk0.5 s. 4: Next S&wnd6: Display Progress Indicator1 Slop0,5 sj8: Stop playing sound圖2.4播放聲音信息的場景圖2.5顯示當(dāng)播放聲音時鬧鈴響起來的情況,我們決定給鬧鐘響鈴一個較高的優(yōu)先級。Somk仃1 FSy S 逐3g,=Start playing aundDisplay ProgreM IndMaMNext 85condispiay Clock6 Di 整0 y Ppqpxlnciica 皿Alarm1 0.5 s|Start playing # irrri9.
12、Display Alarm IndtCStoTDisplay Cock系統(tǒng)可以關(guān)閉顯示屏背景燈關(guān)閉它們來接生能源以及延長電池的使用壽命。電池在電量不足的時候能夠向系統(tǒng)發(fā)出警告Stop playing alarm sound2.5回放聲音時鬧鐘響鈴的場景描述系統(tǒng)會關(guān)閉所有外設(shè)并切換到等待模式。用戶為電池充電后,系統(tǒng)離開等待模式。當(dāng)系統(tǒng)處于等待模式時,所有信息會被保存在內(nèi)存中。圖 2.6 顯示系統(tǒng)進入等待模式,被鬧鐘喚醒, 然后收到電量不足的警告,重新進入等待模式的場景。After some ninutes without am activity11, No power3. Swittrh. of
13、tdisplaySwitch offW Sj Hut aiA.瓦 Al arm8 Switch onmjhf 工 ex9,Slart playingJ.Qj Ktxi Cvnd12Stop playing 君lar ound13, Switch off ajfclif ier14j Sntch off di splayn MIT n nt n I-1 :圖2.6進入和退出休眠模式的場景描述3 分析:對象結(jié)構(gòu) /Analysis: Object structure在需求分析之后SS95,我們將開始系統(tǒng)的領(lǐng)域分析。在這個階段,我們會根據(jù)已有的需求,給出問題整體解決方案的類圖。圖中將包含系統(tǒng)主要的類
14、及其相互關(guān)系,但是不包含它們 之間接口的描述。建立主類圖的第一步實標(biāo)識出系統(tǒng)的相關(guān)對象。3.1 對象標(biāo)識 /Identifying objects活動對象聲音信息的播放和錄制設(shè)備一盒數(shù)字磁帶按鈕,屏幕用戶通過按鈕操作系統(tǒng)。屏幕將顯示菜單和提示信息。鬧鐘顯示時間和提醒功能輔助設(shè)備電池電量傳感器測量電池剩余電量模數(shù)轉(zhuǎn)換器模擬r勺轉(zhuǎn)換成數(shù)字r p,p由攵克向處理命傳遞的接口數(shù)模轉(zhuǎn)換器數(shù)字r勺轉(zhuǎn)換成模擬r p, zh處理布向攵克傳遞r p的接口屏幕控制器在液晶屏幕上產(chǎn)生圖象現(xiàn)實內(nèi)容日期時間語自,尸首麥克,揚產(chǎn)命電池鍵盤,顯示器關(guān)鍵概念1語音,米樣,聲音米樣尸首/息永久對象已經(jīng)記錄的信息的集合數(shù)字磁帶中
15、的內(nèi)容當(dāng)前時間,日期鬧鐘定時鬧鈴響起來的時間事務(wù)處理r消息可視組件菜單,菜單設(shè)置選項,菜單選擇時鐘,鬧鈴開啟和關(guān)閉指示日歷狀態(tài)條,幫助行,任務(wù)進度指示條播放,錄音,停止,是,否,上,下,左,右等9個按鈕使用者將通過上述按鈕操縱系統(tǒng)。,1口:23二彳5 二口 Aliquot 19 日自廣 CH: 口口Message Menu tRcorded at 09:23 13 . Press to play massage圖3.1用戶接口 /Use門nteface圖3.1顯示了用戶接口的所有可視組件。系統(tǒng)操作采用菜單驅(qū)動,屏幕上將顯示當(dāng)前菜單。頂部顯示當(dāng)前時間,日期及鬧鐘定時。底部顯示提示信息。3.2 建
16、造類圖 /Building the class diagrams數(shù)字錄音機系統(tǒng)類圖 /The Sound Recorder Class Diagram使用者通過 Display類(顯示器)和 keyboard (鍵盤)與系統(tǒng)交互。這些都是被動對象,因此我們決定提供UserInteface (用戶接口)類來管理上述交互行為。UserInterface類依賴AudioContoller (音頻控制器)類來完成任務(wù)。AudioContoller類是整個系統(tǒng)的核心類,它將執(zhí)行用戶接口類要求執(zhí)行的任務(wù)。AudioContoller類通過Audioinput (音頻輸入)類和AudioOutput(音頻輸
17、出)類來完成對聲音的處理。這兩個類分別與硬件封裝類Microphone (麥克)和Speaker(揚聲器)相關(guān)聯(lián)。AKZ96信息存儲將由MessageMemory類完成,該類維護一個信息存儲目錄,負責(zé)為新信息提供分配控件以及刪除舊信息。圖3.2數(shù)字錄音機系統(tǒng)類AlarmClock類更新內(nèi)部時鐘并檢查是否到了應(yīng)該響鈴的時間,如果是就發(fā)出鈴聲。在這種情況下,它會將鬧鈴事件通報給Userinterface類,Userinterface類收到消息后會在屏幕上顯示鬧鈴指示并通過AudioControl類發(fā)出鬧鈴聲。圖3.2以圖形的方式描述了數(shù)字錄音機系統(tǒng)主要的類。類圖通過對每個類細節(jié)抽象,為我們提供了系
18、統(tǒng)的概要描述。我們決定將類圖中的類歸總為5個子系統(tǒng)。分別為 alarm clock子系統(tǒng),battery子系統(tǒng),userinterface子系統(tǒng),memory子系統(tǒng) 和audio子系統(tǒng).圖3.3描述了這個劃分.后續(xù)章節(jié)將對每個子 系統(tǒng)深入研究并逐步擴展。Alarm Clock圖3.3數(shù)字錄音機的子系統(tǒng)音頻子系統(tǒng)類圖每條信息由一組音頻塊(audio blocks)組成,而每個音頻塊又包含了一組音頻樣本。音頻子系統(tǒng)總是記錄/回放一個完整的音頻塊。音頻輸入和輸出類是實時工作的,Timer類是硬件定時器的封裝類,它為AudioInput和AudioOutput類提供精確定時。Microphone是麥克
19、的封裝類。一個 Microphone類記錄一個聲音樣本。Speaker類能夠通過揚聲器回放聲音樣本。圖3.4音頻子系統(tǒng)類圖為什么需要3個不同的類來播放信息呢?因為回放和記錄一條信息是一個復(fù)雜的過程,需要精確的定時以及同硬件交互。而且,我們認為在一個處理過程中逐步處理信息的方案會增加設(shè)計的復(fù)雜度。另外,這樣的設(shè)計能夠很容易擴展成可以處理包含2聲道音頻塊或使用管道壓縮(pipelined compression )技術(shù)的立體聲信息。圖3.5聲首信息的內(nèi)部表不圖3.5顯示信息(Message)、音頻塊(AudioBlock)和聲音樣本(SoundSample)之間的分解關(guān) 系,以及播放(play)各
20、元素所需要的類。粒度 /Granularity播放/Play錄制 /Record音頻樣本,1/6000秒Speaker.playSample()Microphone.recordSample()音頻塊,2000個音頻樣本。1/3秒AudioOutput.playAudioBlockAudioInput.RecordAudioBlock聲音信息(不足長)舉例:60個音頻塊,20秒AudioControler.playMessageAudioControler.recordMessage圖3.6顯示進行聲音回放操作時的信息變換。該順序圖針對可讀性進行了優(yōu)化。實際情況是,一個AudioOutput對
21、象在處理一個音頻塊時會調(diào)用2000次playSample方法。一 AijdioGonirdier1 p)idy Message ()2; tAWeBhcK ()3 play Compressed Audio Block ()、7. LjeiAudi&Btcck ()H p;dyC;ui濾Fnfudi:;EirK:kl I 1d playSdmpk* ()二5 對jySamEn .: i 、6 playSampie ()比 playSampte ()10:的y&atn削白)_【1:2產(chǎn)前m網(wǎng)U LHT圖3.6回放信息的順序圖信息內(nèi)存子系統(tǒng)類圖 /The Message Memory Subsys
22、tem Class DiagramMessageMemory類負責(zé)管理系統(tǒng)的存儲空間,它維護了一個目錄來保存已有的信息同時為新信息分配存儲空間。圖 3.7為內(nèi)存子系統(tǒng)的類圖。用戶接口通過 MessageMemory類取得已有信息清單,但不能對之進行修改。如果想修改Audio Controller 類回放或中的相關(guān)方法對信息進行刪除Message Memory管理的內(nèi)容,只能通過 AudioController類的進行。如果用戶接口需要刪除一 條信息,可以通過 MessageMemory類的deleteMessage過程。該過程將調(diào)用 AudioController類 .這個技術(shù)避免了用戶刪除一
23、條正在被記錄地信息。圖 3.8描述了這種情況。圖 3.7 Message memory 類圖:U盟flEerfag: AudibCcarWIlTr : Mesb/qH X :M的豆叫后 :AMigulM白 nvory1: plmyMessage ( X 】|2: gelMessage ()“3: getAudioBlock ()I,I4:而yAudi陽lock)5 (ieleteMessage ( X )6: stop ()圖3.8刪除一條正在播放信息的情況AlarmClock 類圖AlarmClock 類保存當(dāng)前日期、時間及鬧鐘定時。AlarmClock 通過一個定時器來測量時間,每秒鐘都調(diào)
24、用 nextSecond 方法更新內(nèi)部時鐘。當(dāng)時間增加到新的一天時,調(diào)用 nextDay 方法更新日期。 AlarmClock 類在圖 3.9.中描述。UserInterface 類圖UserInterface 類管理系統(tǒng)與使用者之間的交互行為。它接收使用者的鍵盤輸入,然后在屏幕上作出反應(yīng)。 Display 類是硬件的顯示接口, 為了節(jié)約能量在不用的時候可以關(guān)閉。 抽象的繪圖區(qū)用來在屏幕上畫圖,它提供一些基本的作圖功能如畫點、線、文本或者用某個顏色填充一個矩形區(qū)域。 一個繪圖區(qū)就是屏幕上的一個矩形區(qū)域。 它負責(zé)本地坐標(biāo)到全局坐標(biāo)的幾何轉(zhuǎn)換。View 類利用繪圖區(qū)提供的簡單的作圖功能顯示系統(tǒng)對象
25、,如當(dāng)前時間或者菜單等。每個View對象都擁有自己的繪圖區(qū),圖 3.10 對這些對象進行了可視化描述。UserInterface 還接收從 AlarmClock 類和 Battery 類傳來的消息。某些事件,如電池電量不足等稱為非模態(tài)事件,這類事件不管什么時候發(fā)生,系統(tǒng)總會作出響應(yīng)。非模態(tài)事件由 UserInterface 對象進行管理。相對的,另外一些事件,比如在當(dāng)前用戶模式下用戶按了一個按鍵。如果用戶按的是 DowrWt,系統(tǒng)所做的操作可能是選中下一個菜單項或者減少當(dāng)前事件。這類事件被稱為模態(tài)事件。它們是由 UserInterface 的常規(guī)事件處理器傳遞給具體的 User Mode 類的
26、進行處理的。二 口匕1/ h* -, hnuntex =- A門117 L 0二色i七 a.口第口向甘音頻控制器/Audio ControlleUgnWig ; _G空出1道 8r!-4圖3.10圖形對象的可視化描述圖3.11用戶接口子系統(tǒng)類圖MenuUserMode類和MenuView類允許用戶通過屏幕菜單選擇不同的選項。SettingDateUserMode和SettingTimeUserModes負責(zé)改變當(dāng)前日期和時間,并通過DateView和TimeView 對象在屏幕上顯示日期和時間。4分析:定義對象的行為類圖是我們系統(tǒng)的靜態(tài)視圖。為了更好的理解系統(tǒng)的行為,我們將建立新的圖表來表現(xiàn)設(shè)
27、計的動態(tài)內(nèi)容。狀態(tài)圖(statechart diagrams),協(xié)作圖(collaboration diagrams)以及順序圖(sequence diagrams)用來描述系統(tǒng)的動態(tài)行為。我們將利用狀態(tài)圖來描述某單個類的內(nèi)部變化。一個音頻控制器對象負責(zé)控制聲道。聲道是用來錄制/回放聲音信息或播放鬧鈴的聲音。音頻輸入/Audio Input一個Audio Input對象控制一個聲道.在DMA通道的幫助下,通過麥克記錄一個音頻塊并 將之壓縮。圖 4.1描述了 Audio Input對象的行為。I,一kjbMA Compre is exit Natul/ :jr11g.先時卜打iiw33rirMu
28、Mi小-J2 KhlM1 I 串,力ini riXm” XlatfnW*fii j:h :JM-115*rJUjrATimCi|NiB空M AS-jnrOn Q&bciifftAkirmfrogn J D詞邛TM 1 I圖4.7菜單用戶模式狀態(tài)圖時鐘設(shè)置用戶模式/Setting Clock User Mode用戶在時鐘設(shè)置模式可以設(shè)置當(dāng)前時間和鬧鐘定時。通過“l(fā)eft和“right按鈕在分鐘和小時位置上進行切換。“up”和“down按鈕用來修改當(dāng)前位置的內(nèi)容。日期設(shè)置用戶模式/Setting Date User Mode日期設(shè)置用戶模式用來修改當(dāng)前日期,“l(fā)eft和“right按鈕用來在日、月
29、、年位置之間進行切換,“up”和“down按鈕修改當(dāng)前位置的內(nèi)容。圖4.8時鐘設(shè)置用戶模式狀態(tài)圖圖4.9日期設(shè)置用戶模式狀態(tài)圖5 構(gòu)架設(shè)計 /Architectural Design在本節(jié)中,我們將描述設(shè)計中所涉及的所有硬件資源。在我們的最終產(chǎn)品中,硬件和軟件 是同樣重要。一個消費者不會只買軟件而不要配套的硬件或只買硬件設(shè)備而沒有相應(yīng)的軟件, 他需要的是一個由硬件和軟件共同構(gòu)成產(chǎn)品。需要提的一點是,我們沒有試圖對系統(tǒng)硬件作任何優(yōu)化工作。舉例來說,目前我們采用的 處理器比系統(tǒng)實際需要的功能要強,這可能造成系統(tǒng)的成本增加,體積和耗電量變大。但也正 是因為這一點,我們可以集中精力進行系統(tǒng)設(shè)計,從而避
30、免在系統(tǒng)實現(xiàn)方案的選擇和優(yōu)化上花 費更多的時間。5.1 物理構(gòu)架 /Physical architecture主處理器采用 Hitachi SH7032 16MHz 工作主頻, 帶 8Kb 內(nèi)置 RAM , 內(nèi)核采用常規(guī)的 RISC整數(shù)管道技術(shù),負責(zé)運行機器指令。系統(tǒng)內(nèi)置外設(shè)包括一個模數(shù)轉(zhuǎn)換器、 一些定時器和計數(shù)器、DMA 通道和一個監(jiān)控器.手冊 HSH1 中包含處理器內(nèi)核指令描述, 硬件設(shè)備和內(nèi)置外設(shè)的描述在手冊 HSH2 中。 圖5.2 顯示了建議構(gòu)架。 本系統(tǒng)原型配置了 64Kb EPROM, 256Kb SRAM 和 128Kb 顯存。 EPROM 包含引導(dǎo)代碼和一個調(diào)試程序。系統(tǒng)的兩
31、個RS-232 兼容串口 MAX232 用來下載和調(diào)試軟件,它們與處理器的串行通道連接。初始化串口的程序也保存在EPROM 中,串口的收發(fā)速率可達到最大38400 bps。模數(shù)轉(zhuǎn)換器有7 個輸入通道,采樣頻率為 60KHz ,采樣精度12 位.它的作用是通過麥克錄制聲音。主板描述在手冊 HEVB 中。聲音回放裝置為外置數(shù)模轉(zhuǎn)換器AD7524 。液晶顯示器HLCD 為 320x240 象素、黑白顯示,有背景照明功能。LCD 控制器采用一個Yamaha YGV610B ,支持 16 級灰度。 LCD 控制器產(chǎn)生所有液晶屏幕顯示的信號。它具有獨立的顯示內(nèi)存。它通過系統(tǒng)總線與處理器交換信息。 LCD
32、控制器的端 口和顯示內(nèi)存將映射到系統(tǒng)內(nèi)存中。5.3 構(gòu)架模式系統(tǒng)對軟件沒有安全和可靠性方面的要求,也不支持硬件容錯。或許會出現(xiàn)在設(shè)備報廢之前,由于用戶使用不慎如進水或掉到地上而造成某些部件損壞的情況。監(jiān)控器負責(zé)在發(fā)生障礙的情況下重新啟動系統(tǒng)。監(jiān)控器重新啟動系統(tǒng)會造成內(nèi)存中內(nèi)容的丟失。因為是封閉式嵌入系統(tǒng),所以數(shù)字錄音機不具備與其它系統(tǒng)進行通信的功能。同時,也沒必要提供僅供測試和診斷使用的通信功能,因為系統(tǒng)很簡單,通過屏幕所顯示的提示進行測試即可。 事實上,本系統(tǒng)在設(shè)計上就是不能測試和維修的。 處理器通過內(nèi)存地址空間訪問外設(shè),它們被緊密的結(jié)合在一起,根本就不需要任何特殊的通信機制。5.4 并行性
33、設(shè)計并行模式必須明確軟件中所使用的線程以及線程之間的通信機制。為了使設(shè)計盡可能簡 單,我們決定在當(dāng)前的設(shè)計中不采用實時操作系統(tǒng)而在將來的設(shè)計中采用。在當(dāng)前設(shè)計中,有 兩個可執(zhí)行線程。用戶線程是一個交互線程,用來管理使用者與系統(tǒng)之間通過按鍵和屏幕進行 的交互行為。音頻系統(tǒng)線負責(zé)調(diào)度響應(yīng)對象和實時對象。音頻系統(tǒng)線程在處理器收到中斷請求的時候被激活。它享有比用戶線程更高的優(yōu)先級。在 音頻系統(tǒng)線程中有一個調(diào)度對象來負責(zé)調(diào)度其它對象的運行。硬件定時器周期性激活該調(diào)度對 象來處理任務(wù)表。任務(wù)表中每個任務(wù)元素都包含一個方法的指針及該任務(wù)的執(zhí)行周期信息。調(diào) 度對象具有最高優(yōu)先級,目的是為了盡可能快的執(zhí)行任務(wù)并
34、得到返回結(jié)果。不同線程中的兩個 對象通過Reactive Subject模式(詳見附錄 A)進行通信。UcraphoM圖5.1數(shù)字錄音機系統(tǒng)硬件結(jié)構(gòu)Reactive Subjecl 圖5.2任務(wù)圖6 機制設(shè)計 /Mechanistic Design在本章中,我們將討論不同的軟件對象是怎樣通過協(xié)作而完成它們各自的功能。第四章介紹了每個獨立對象的內(nèi)部行為。然后我們又描述了在收到消息的時候?qū)ο蟮臓顟B(tài)變換。現(xiàn)在,我們將關(guān)注一下對象之間是怎樣交換消息的。我們還將使用軟件模式對不同的對象的外部行為進行描述。6.1 硬件與反應(yīng)對象之間的協(xié)作我們可以將硬件視為一個參與者。這些參與者可能在分析階段已經(jīng)定義了。硬
35、件可以通過中斷請求發(fā)送給運行程序一個事件。當(dāng)一個硬件設(shè)備需要給程序發(fā)送時間的時候便會產(chǎn)生一個中斷請求,在某個時間點處理器會接受中斷請求,并停止當(dāng)前正在執(zhí)行的程序流程,然后調(diào)用中斷處理過程。中斷處理過程處理硬件請求后必須盡快返回,以允許當(dāng)前程序進程繼續(xù)進行。不幸的是,中斷服務(wù)程序 (ISR-interrupt service routine)不能是一個對象的方法,因此,沒有任何相關(guān)的背景信息,也不能使用大多數(shù)OO語言支持的thi或者sef旨針功能。所以,設(shè)計者必須建立一個將硬件中斷請求轉(zhuǎn)換為對象信息的機制。我們將這種機制封裝在ISR抽象類中。ISR類的子類就可以象實現(xiàn)普通方法那樣實現(xiàn)中斷服務(wù)程序
36、。6.2 反應(yīng)對象與用戶接口之間的協(xié)作鍵盤、電量表(Battery Level Meter)、鬧鐘(alarm clock)、音頻控制器(audio controller)與 用 戶接口( user interface)之間的協(xié)作遵循 條件反應(yīng)模式(Reactive Subject pattern)。反應(yīng)對象只向 事件代理發(fā)送事件,并不需要等待用戶接口讀取事件。用戶接口定期檢查時間代理中是否有新事件。一旦發(fā)現(xiàn)有新事件則委托屏幕和控制器產(chǎn)生響應(yīng)。6.3 Scheduler 和 Alarm Clock, Keyboard 和 Battery Level Meter 之間 的協(xié)作Scheduler對
37、象為依賴時間信息的類提供精確定時和時序安排。AlarmClock從scheduler類訂閱信息。每秒鐘 Scheduler都會通報AlarmClock類有一秒鐘時間已經(jīng)結(jié)束。圖 6.1 Scheduler 類圖Keyboard對象需要定期取得物理鍵盤所有按鍵的狀態(tài)。我們決定每秒鐘檢測10次鍵盤輸入。所以,如果用戶按下并放開一個按鍵的時間小于1/20秒,則該按鍵輸入會丟失。3: attach )圖6.2 Scheduler對象與其客戶對象之間的協(xié)作物理鍵盤還能夠在按鍵時產(chǎn)生一個硬件中斷,與定時檢測方法相比,中斷法能夠減輕CPU的負載,但是需要增加所需的硬件。BatteryLevelMeter類每
38、5秒鐘測量一次電池的電量。Scheduler 負責(zé)周期性的激活Keyboard 和 BatterylevelMeter 類。圖 6.2 顯示了 scheduler是如何周期性的喚醒系統(tǒng)的反應(yīng)類的。6.4 MessageMemory、Message和 AudioController對象之間的協(xié)作MessageMemory 是 Message對象的 容器.這種協(xié)作關(guān)系遵循 Container模 式。AudioController在需要訪問Message對象的時候會用到 MessageMemory類。6.5 SettingTimeUserMode, AlarmClock , Keyboard 和 C
39、lockView 對象之間的協(xié)作這些對象都遵循Model View Controller 模式 . AlarmClock 為 ClockView 提供一個模型用來在 顯示屏上顯示時間。 UserMode 對象控制系統(tǒng)與用戶之間的交互行為。 由于 AlarmClock 是反應(yīng)對象, ClockView 是交互對象。它們之間的協(xié)作將遵循Reactive Subject 模式。 Keyboard 對象向 UserInterface 類 通 告 用 戶 按 鍵 事 件 也 遵 循 該 模 式 。 圖 6.3 顯 示 了 當(dāng) 前 用 戶 模 式 為和 AudioOutput 對象SettingTimeU
40、serMode.時,用戶按下u健后所產(chǎn)生一系列消息的順序過程。6.6 UserInterface, AudioController, Messages之間的協(xié)作UserInterface 和 AudioController 之間的協(xié)作采用了 Reactive Subject 模式。AudioController, Message , AudioInput 和 AudioOutput 之間的協(xié)作采用 Observer 模式。圖6.7 顯示了播放一條聲音信息所的消息傳遞順序。為了簡化,聲音信息用一個音頻塊表示。這種合作有點復(fù)雜但支持回放和錄制兩個不同的信息。同時,還支持錄制和回放立體聲聲音,但每條
41、信息將有兩個音頻塊流組成。Ctocxv的0: drawT&idOY.GraphicGofliesi贏“3日獨出 、ContfdterAlarmClOckW 4 MlTime ()iQ?Ji5Dlav:EwntProKy1 postE. enl (KeyPressKa.boai d3: updal&( Key-Up) |ReactiveSub)ed| 6 getEvent (,UsrlniedH&1 jpdate ()圖 6.3 Model-View-Controller 協(xié)作A6 update ()圖6.4 Userinterface 和AudioController 對象之間的協(xié)作關(guān)系7 詳
42、細設(shè)計 /Detailed Design7.1 硬件的對象建模一個硬件封裝類是對一個硬件設(shè)備的軟件對象化描述,是應(yīng)用程序與硬件之間的接口。硬 件封裝類的構(gòu)造函數(shù)將初始化硬件設(shè)備,然后該類所對應(yīng)的硬件就可以使用了。可以通過封裝 類的方法對硬件進行配置、啟動或停止等操作。由于硬件的狀態(tài)將由封裝類的狀態(tài)表示,通常 情況下封裝類都不會有太多的屬性。詳細設(shè)計和實現(xiàn)硬件封裝類需要很準(zhǔn)確的硬件方面的知識。本系統(tǒng)中的硬件封裝類包括 speaker, microphone, timer 和 keyboard 對象。7.2 音頻壓縮算法一個很明確的需求就是,必須以 6Khz 頻率 ,8 位采樣樣本錄制聲音。這表示
43、在錄制過程中,每秒鐘需要至少6KB 內(nèi)存。 我們可以通過對輸入信號的壓縮處理來減少內(nèi)存的需要量。 最簡單的音頻壓縮是適應(yīng)性Delta 脈沖編碼調(diào)制技術(shù)( Adaptive Delta Pulse Code Modulation ADPCM ) ITU727. ADPCM 很容易實現(xiàn)并且CPU 占用率很低。7.3 使用直接內(nèi)存訪問通道在錄制聲音信息的時候,一個AudioInput 對象每秒鐘需要從麥克獲得6000 個樣本。有多個途徑可以完成這個任務(wù)。第一個方案是使用 scheduler 來計時,由一個定時器在每秒鐘內(nèi)激活Scheduler6000 次。scheduler 被激活后便通過Audio
44、Input 對象采集一個聲音樣本。 很顯然, 由于只需要傳輸一個字節(jié), CPU 周期的大部分事件被浪費了。另一個解決方案是通過一個新的定時器直接激活A(yù)udioInput 對象采集聲音樣本。 這種情況下, CUP 占用率會低一些但仍是相當(dāng)可觀的。中斷服務(wù)程序在大多數(shù)RISC 處理器系統(tǒng)中的表現(xiàn)都大打折扣,也不宜采用。所以第三個可選方案是使用直接內(nèi)存訪問通道( direct memory access channel DMAC ) 。一個 DMAC 一次可以將幾個word 由內(nèi)存的一處移到另一處而不需要占用 CPU 資源。由于所有內(nèi)置外設(shè)的端口都映像到了內(nèi)存地址空間中, 所以通過 DMAC 實現(xiàn)外
45、設(shè)之間和外設(shè)與內(nèi)存之間的數(shù)據(jù)傳送是可能的。 在我們的設(shè)計中, 我們將使用 DMAC 由麥克向一個音頻塊傳輸聲音樣本,或者將音頻塊傳送給揚聲器。一個DMAC 單元擁有一些寄存器來控制它的行為,其中主要有源地址寄存器、目的地址寄存器、傳輸計數(shù)寄存器和一些標(biāo)志寄存器。標(biāo)志寄存器用來保存是否在每次傳輸結(jié)束后需要增加源/目的地址的空間,或者用來標(biāo)識被傳輸?shù)膯卧且粋€word還是一個 byte 。寄存器的使用使數(shù)據(jù)能夠以更快的速度傳輸并與定時器保持同步。在編程時,我們將DMAC 的 A/D 轉(zhuǎn)換器的地址作為錄制聲音操作的源地址。目的地址指向一個能夠在每次傳輸后根據(jù)傳輸內(nèi)容自動調(diào)整空間的內(nèi)部緩沖區(qū)。傳輸單元
46、是一個字節(jié)與聲音樣本的大小相同。 我們使用一個定時器,通過編程實現(xiàn)每秒產(chǎn)生6000 次中斷以及對每次傳輸初始化。當(dāng)定時器向CPU發(fā)送中斷請求后,DMAC單元開始傳輸數(shù)據(jù)。如果 CPU的中斷響應(yīng)被屏蔽的話,DMAC也會傳輸數(shù)據(jù),但不會被接收。因此而造成數(shù)據(jù)丟失。實際上,我們需要中斷被屏蔽, 所以定時器不干擾 CPU。在聲音樣本被存儲到緩沖區(qū)后,DMAC單元產(chǎn)生并發(fā)送中斷請求給AudioInput。AudioInput對象接收到請求后,將緩沖區(qū)的內(nèi)容壓縮成一個音頻塊。圖 7.1顯示了 錄制一個音頻塊的過程。一條聲音信息的所有音頻塊都是重復(fù)此過程而獲得的。圖7.1記錄一個音頻塊設(shè)計中還需要討論的一點
47、是音頻塊的尺寸。如果太小,CPU將花費大量時間用于對象間的信息傳遞以及控制 DMAC操作同步上。所有聲音信息都是由 n(n為整數(shù))個音頻塊組成。一條 聲音信息回放時間長短以及尺寸大小取決于音頻塊的長度和尺寸大小。如果音頻塊的尺寸過大 則造成內(nèi)存浪費和系統(tǒng)響應(yīng)緩慢。聲音回放與聲音錄制的機制很類似的。先由AudioOutput對象將音頻塊解壓縮為聲音樣本并存儲到緩沖區(qū)。然后由DMAC將聲音樣本傳送給 D/A轉(zhuǎn)換器。此機制只有在 CPU能夠很快速的壓縮和解壓聲音樣本的情況下才能被接受。否則,用戶會在兩個回放音頻塊的間隙聽到低頻噪音。但這個問題可以通過以下途徑解決:優(yōu)化傳輸音頻塊的過程或者考慮以音頻塊
48、流的方式傳輸音頻塊。由于 CPU和DMAC是同步工作的,我們可以通過一個管道( pipeline)處理音頻流,使DMAC在傳輸一個音頻塊的時候,CPU解壓下一個音頻塊。圖7.2回放一個音頻塊7.4 硬件資源的分配我們必須將硬件和外設(shè)資源分配給不同的反應(yīng)對象。由于中斷向量、 DMA 通道、定時器和輸入/輸出端口的數(shù)量限制。我們不得不仔細計劃如何使用它們。. 值得注意的是,很難(也許是根本不可能)并行使用大部分上述硬件資源。對象資源顯小器(Display)硬件定時器0調(diào)度(Scheduler)硬件定時器1IMA1 中斷麥克(Microphone)模擬信號輸入7A/D轉(zhuǎn)換器(自動轉(zhuǎn)換模式)揚產(chǎn)器(S
49、peaker)Digital outputs: PB7 toPB0硬件定時器2DMA通道DMA Channels屏蔽IMIA2, IMA3 中斷首頻輸入AudioInputDMA通道1DMAC1 DEI 中斷向量音頻輸出AudioOutputDMA通道2DMAC2 DEI 中斷向量數(shù)字輸出端口: PB4 to PB12數(shù)字輸入端口: PC3 to PC07.5 內(nèi)存分配MessageMemory對象的作用是分配和釋放存儲聲音信息的內(nèi)存空間。由于有效內(nèi)存很有限而且系統(tǒng)沒有虛擬內(nèi)存,所以我們不得不設(shè)計一種能夠保證內(nèi)存的使用優(yōu)化的機制。這包括通過內(nèi)存碎片整理和對象排列技術(shù)來避免內(nèi)存空間的浪費。當(dāng)一個
50、聲音信息對象被創(chuàng)建時,它將分配一個數(shù)組用來存儲音頻塊,數(shù)組中的每個元素包含一個使用標(biāo)記和一個指向信息流中下一個音頻塊的指針。我們通過內(nèi)存塊重用以及預(yù)分配技術(shù)避免出現(xiàn)內(nèi)存碎片,不采用在每次錄制 聲音信息的時候分配而在刪除信息的時候釋放內(nèi)存的做法。通常情況下,內(nèi)存分配函數(shù)只能由存儲隊列中分配尺寸確定的內(nèi)存空間,音頻塊的尺寸是存儲隊列組成因子尺寸的整數(shù)倍。這樣 就可以保證不浪費一個字節(jié)。8 實現(xiàn)考慮到嵌入式系統(tǒng)的最終軟件產(chǎn)品不是軟件映射到內(nèi)存中,而是常駐在永久性內(nèi)存中。因此,程序的所有連接庫必須靜態(tài)調(diào)用,必須為程序的所有符號分配絕對地址。程序中必須包含硬件初始化、硬件檢查以及重新排列 RAM 中可執(zhí)行程序的代碼。程序能夠初始化處理器堆棧,將只讀存儲器中的變量拷貝到隨機存儲器中,將未初始化的變量置為0 。在目標(biāo)原型產(chǎn)品中包含帶有一個小型調(diào)試器的永久性內(nèi)存。系統(tǒng)打開后調(diào)試器被激活,它等待從主機通過通信連接如串口線或網(wǎng)絡(luò)連接下載主程序。主程序被下載后可以運行或?qū)ζ溥M行調(diào)試。當(dāng)軟件開發(fā)完成后并通過測試后, 可以保存在永久性內(nèi)存中如 ROM 或 EPROM 。 這些內(nèi)存可以被插到目標(biāo)機器 上,只要機器啟動程序就能運行。8.1 開發(fā)語言和軟件工具我們采用C+編程語言實現(xiàn)系統(tǒng)軟件
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025勞動合同編寫指南
- 2025投資合作協(xié)議范文合同協(xié)議范文
- 2025中國大陸出版合同范本
- 2025深圳經(jīng)濟特區(qū)房屋租賃合同書
- 2025年股票發(fā)行與上市事務(wù)法律服務(wù)合同協(xié)議樣本
- 2025建筑工程合同模板
- 2025合同法制的政策基礎(chǔ)與功能沖突
- 2025養(yǎng)殖產(chǎn)品買賣合同模板
- 2025貸款擔(dān)保的合同范本
- 2025項目管理合同文本
- 重慶市渝北區(qū)六校聯(lián)盟2024-2025學(xué)年七年級下學(xué)期第一次(半期)教學(xué)大練兵語文試卷
- 小學(xué)生閱讀指導(dǎo)課課件
- 生活污水合同協(xié)議
- 工程建設(shè)全過程流程
- 北京市房山區(qū)2025屆高三下學(xué)期一模試題 數(shù)學(xué) 含解析
- 管幕預(yù)筑法施工技術(shù)規(guī)范
- 剎車創(chuàng)意測試題及答案
- 復(fù)古插畫重溫五四運動牢記青春使命五四運動偉大覺醒
- 講課股骨頸骨折課件
- 礦山修復(fù)框架協(xié)議書
- 2023-2024學(xué)年內(nèi)蒙古呼和浩特市賽罕區(qū)八年級(下)期中數(shù)學(xué)試卷(含解析)
評論
0/150
提交評論