數(shù)字錄音機(jī)設(shè)計(jì)方案_第1頁(yè)
數(shù)字錄音機(jī)設(shè)計(jì)方案_第2頁(yè)
數(shù)字錄音機(jī)設(shè)計(jì)方案_第3頁(yè)
數(shù)字錄音機(jī)設(shè)計(jì)方案_第4頁(yè)
數(shù)字錄音機(jī)設(shè)計(jì)方案_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、數(shù)字錄音機(jī)設(shè)計(jì)方案:一個(gè)使用統(tǒng)一建模語(yǔ)言(uml)設(shè)計(jì)嵌入式系統(tǒng)的實(shí)例 摘要 本文內(nèi)容是采用統(tǒng)一建模語(yǔ)言(uml)對(duì)一個(gè)嵌入式系統(tǒng)進(jìn)行面向?qū)ο蠓治龊驮O(shè)計(jì)的實(shí)例。被分析的系統(tǒng)是一個(gè)數(shù)字錄音機(jī)或稱口授留聲機(jī)。設(shè)計(jì)實(shí)現(xiàn)采用一個(gè)嵌入式微處理器和c+編碼。關(guān)鍵字:面向?qū)ο蟮脑O(shè)計(jì),uml,嵌入式系統(tǒng) 1 簡(jiǎn)介 統(tǒng)一建模語(yǔ)言(unified modeling language-uml)bjr1,bjr2提供了一套標(biāo)準(zhǔn)的符號(hào)來(lái)表示面向?qū)ο蟮能浖治龊驮O(shè)計(jì)方法cy90,mo92,ss95。使用uml 圖表能夠?qū)軓?fù)雜的系統(tǒng)建模,包括實(shí)時(shí)嵌入式系統(tǒng)。然而,uml并不是軟件開發(fā)過(guò)程,也沒有嚴(yán)格區(qū)分軟件工程中各開發(fā)階

2、段。uml定義了一套由不同圖表組成的標(biāo)記符號(hào),但是并沒有描述怎樣創(chuàng)建和應(yīng)用這些圖表。dou98 介紹了使用uml和面向?qū)ο蟮姆治鲈O(shè)計(jì)技術(shù)建造實(shí)時(shí)嵌入式系統(tǒng)。本文由douglass撰寫,描述了使用uml對(duì)一個(gè)數(shù)字錄音機(jī)(或口授留聲機(jī))系統(tǒng)進(jìn)行面向?qū)ο笤O(shè)計(jì)和實(shí)現(xiàn)的過(guò)程。目前市場(chǎng)上已經(jīng)有一些數(shù)字錄音機(jī)商業(yè)化產(chǎn)品。本文我們描述的模型參照了一家著名廠商的類似產(chǎn)品的設(shè)計(jì)。相關(guān)需求說(shuō)明參見本文第二節(jié)。第三節(jié)討論系統(tǒng)的對(duì)象模型給出主類圖。第四節(jié)繼續(xù)進(jìn)行面向?qū)ο蟮姆治觯侵饕懻撁總€(gè)對(duì)象內(nèi)部的行為。第五節(jié)進(jìn)行系統(tǒng)結(jié)構(gòu)設(shè)計(jì)。包括數(shù)字錄音機(jī)的硬件結(jié)構(gòu),以及并行處理模型,在該模型內(nèi),為每個(gè)對(duì)象將分配一個(gè)可執(zhí)行的線程

3、。第六節(jié)將定義不同對(duì)象之間的合作關(guān)系。并通過(guò)設(shè)計(jì)模式ghjv95 將分析階段定義的類整合。詳細(xì)設(shè)計(jì)在第七節(jié)進(jìn)行討論。最后,第八節(jié)討論系統(tǒng)實(shí)現(xiàn)。我們使用c+進(jìn)行軟件的開發(fā),硬件平臺(tái)采用一個(gè)32位risc(精簡(jiǎn)指令集計(jì)算機(jī))嵌入處理器。2 需求分析 數(shù)字錄音機(jī)是一個(gè)電子消費(fèi)產(chǎn)品,用來(lái)錄制和回放語(yǔ)音。通過(guò)內(nèi)置的麥克錄制語(yǔ)音信息,然后將信息保存在數(shù)字內(nèi)存中。使用者可以很方便的在任何時(shí)候回放任意錄制好的信息,聲音將通過(guò)設(shè)備前端的揚(yáng)聲器播放。該產(chǎn)品將具有體積小、重量輕、使用方便等特點(diǎn)。圖 2.1 是我們?cè)O(shè)計(jì)的數(shù)字錄音機(jī)的外觀示意圖。它是一個(gè)手持系統(tǒng),具有一塊平面顯示屏以及一些按鈕。圖 2.1 外觀示意圖

4、在設(shè)計(jì)中將要考慮到的系統(tǒng)特性如下:l 最多存儲(chǔ)10條信息,每條信息的長(zhǎng)度將受系統(tǒng)剩余內(nèi)存的限制。l 簡(jiǎn)單易用的屏幕菜單。l 直接存取任意語(yǔ)音信息。l 具有時(shí)鐘功能(不存在2000年問(wèn)題),用戶可以每天設(shè)置鬧鐘,鬧鐘鈴聲60秒鐘后自動(dòng)停止,用戶也可以按任意鍵停止鈴聲。l 全功能液晶顯示屏. 屏幕上總是顯示當(dāng)前日期和時(shí)間。同時(shí)顯示提示信息如操作指南,當(dāng)前操作信息等。l 電池電量顯示,如果電量不足,系統(tǒng)會(huì)發(fā)出嗶嗶聲警告。l 為了節(jié)省電池. 在不使用的情況下,系統(tǒng)將關(guān)閉外部設(shè)備的電源,用戶可以通過(guò)按任意鍵使系統(tǒng)回復(fù)正常。l 提供好的聲音回放質(zhì)量。使用6khz的8位采樣頻率。2.1 外部事件 嵌入式系統(tǒng)

5、經(jīng)常要跟外部環(huán)境交互。在目前的分析階段,我們把系統(tǒng)視為一個(gè)可以響應(yīng)外部環(huán)境的請(qǐng)求和消息的黑盒子。 外部環(huán)境由一些參與者(actor)組成。每個(gè)參與者與我們的系統(tǒng)進(jìn)行不同目的的交互并交換一組不同的信息。系統(tǒng)范圍圖/context-level diagram 圖 2.2 顯示了所有與我們的系統(tǒng)進(jìn)行交互的參與者。圖中我們定義了3個(gè)參與者:用戶(user),電池(battery)和時(shí)鐘(time)。 圖中還顯示了接口和用于實(shí)現(xiàn)系統(tǒng)和參與者交換信息的傳感裝置和執(zhí)行裝置。這里指的信息可以是參與者向系統(tǒng)提出的請(qǐng)求,也可以是系統(tǒng)作出的響應(yīng)或提供給參與者的服務(wù)內(nèi)容。傳感裝置(sensors)包括麥克和按鈕。執(zhí)行

6、裝置(actuators)包括揚(yáng)聲器、電池電量顯示表。每當(dāng)一個(gè)時(shí)間計(jì)時(shí)結(jié)束時(shí),參與者時(shí)鐘向系統(tǒng)發(fā)送一個(gè)內(nèi)容類似于下一秒或者下一個(gè)小時(shí)的消息。在實(shí)際實(shí)現(xiàn)中,我們將用一個(gè)硬件定時(shí)器來(lái)控制具體時(shí)間。圖 2.2 系統(tǒng)范圍圖 事件/events 事件是環(huán)境與系統(tǒng)之間傳遞的的重要消息。一個(gè)實(shí)時(shí)響應(yīng)系統(tǒng)必須在某個(gè)限定的時(shí)間內(nèi)對(duì)外部事件作出響應(yīng)。下表中內(nèi)容顯示了針對(duì)我們的系統(tǒng)所有可能發(fā)生的外部事件。事件的方向:in表示該事件由環(huán)境傳遞給系統(tǒng),out表相反。事件發(fā)生模式(a):周期事件 (periodic):表示該事件的發(fā)生是遵循某個(gè)固定的時(shí)間周期的。在表格中用p表示。隨機(jī)事件:(episodic):表示該事件

7、隨機(jī)發(fā)生。在表格中用e表示。響應(yīng)時(shí)間:表示系統(tǒng)對(duì)該事件作出響應(yīng)所需時(shí)間的上限,如果在給出的時(shí)間內(nèi)系統(tǒng)沒有完成響應(yīng),將會(huì)引起系統(tǒng)錯(cuò)誤。 no事件系統(tǒng)響應(yīng)方向a響應(yīng)時(shí)間1某一秒計(jì)時(shí)結(jié)束a,更新內(nèi)部時(shí)鐘b,檢查鬧鐘設(shè)置c,更新時(shí)鐘顯示d,更新任務(wù)條inp0.5秒2一個(gè)采樣周期結(jié)束a,回放或記錄下個(gè)采樣inp1/2周期3用戶按下某個(gè)按鈕a,顯示任務(wù)條。b,開始錄音或回放一條記錄ine0.5秒4用戶按停止按鈕a,停止當(dāng)前任務(wù)。b,更新屏幕內(nèi)容ine0.5秒5電量不足告警a,警告用戶并終止當(dāng)前任務(wù)ine1秒6進(jìn)入等待模式a,關(guān)閉顯示器ine1秒7當(dāng)系統(tǒng)處于等待模式時(shí),用戶按任意鍵喚醒系統(tǒng)a,離開等待模式,

8、打開顯示器以及其它外設(shè)。ine1秒 2.2 用例/use cases 用例是從使用者的角度描述系統(tǒng)的功能。使用者可能是一個(gè)人或者某個(gè)設(shè)備。每個(gè)用例表示一種使用系統(tǒng)的方法,每個(gè)用例完成后產(chǎn)生不同的結(jié)果。在我們的系統(tǒng)中共有6個(gè)用例。如圖 2.3所示。用例描述如下記錄一條信息(record a message) 使用者選中信息存儲(chǔ)目錄中的某個(gè)信息存儲(chǔ)位置,并按下錄音(recording)鍵。如果在該位置已經(jīng)存儲(chǔ)了一條信息,該記錄將被刪除。. 系統(tǒng)開始通過(guò)麥克錄音,直到用戶按停止(stop)鍵或者內(nèi)存耗盡。50圖 2.3 用例圖 回放一條信息(playback a message) 用戶選擇某個(gè)信息存

9、儲(chǔ)位置,然后按播放(play)按鈕。如果該位置保存有信息,則系統(tǒng)通過(guò)揚(yáng)聲器回放該聲音信息,直到回放完畢或用戶按了停止. 按鈕。刪除一條信息(delete a message) 用戶選中一個(gè)存儲(chǔ)位置按刪除(delete)按鈕,該位置存儲(chǔ)的信息將被永久刪除,所占用的內(nèi)存將被釋放。鬧鐘定時(shí)(set the alarm time) 用戶可以設(shè)定是否開啟(關(guān)閉)鬧鐘,以及鬧鈴時(shí)間。這些操作將在鬧鐘菜單中進(jìn)行。設(shè)定系統(tǒng)時(shí)鐘/set the clock time 用戶可以通過(guò)此功能調(diào)整校準(zhǔn)系統(tǒng)時(shí)間,或者將系統(tǒng)時(shí)間改為當(dāng)前時(shí)區(qū)的時(shí)間。顯示系統(tǒng)時(shí)間/watch the time 用戶可查看顯示屏上連續(xù)顯示的當(dāng)前

10、時(shí)間、日期。2.3 場(chǎng)景/scenarios 場(chǎng)景用來(lái)描述系統(tǒng)與外部參與者(user,battery和time)之間的交互行為。一般來(lái)說(shuō),即使在每一個(gè)參與者的角色都很明確的情況下,仍然很難將所有可能的交互行為都考慮到,事實(shí)上也沒有必要這樣做。我們只要研究必須的場(chǎng)景以滿足系統(tǒng)需要就行了,比如,我們必須研究在系統(tǒng)回放聲音的時(shí)候電池電量不足以及當(dāng)系統(tǒng)播放聲音時(shí)鬧鐘響起來(lái)這兩種情況。圖 2.4 表示了播放聲音信息的用例。圖 2.4 播放聲音信息的場(chǎng)景 圖 2.5 顯示當(dāng)播放聲音時(shí)鬧鈴響起來(lái)的情況,我們決定給鬧鐘響鈴一個(gè)較高的優(yōu)先級(jí)。圖 2.5 回放聲音時(shí)鬧鐘響鈴的場(chǎng)景描述 系統(tǒng)可以關(guān)閉顯示屏背景燈、麥

11、克和揚(yáng)聲器。這些部件都是要耗費(fèi)大量電池電量的。通過(guò)關(guān)閉它們來(lái)接生能源以及延長(zhǎng)電池的使用壽命。電池在電量不足的時(shí)候能夠向系統(tǒng)發(fā)出警告,系統(tǒng)會(huì)關(guān)閉所有外設(shè)并切換到等待模式。用戶為電池充電后,系統(tǒng)離開等待模式。當(dāng)系統(tǒng)處于等待模式時(shí),所有信息會(huì)被保存在內(nèi)存中。圖 2.6 顯示系統(tǒng)進(jìn)入等待模式,被鬧鐘喚醒, 然后收到電量不足的警告,重新進(jìn)入等待模式的場(chǎng)景。圖 2.6 進(jìn)入和退出休眠模式的場(chǎng)景描述 3 分析:對(duì)象結(jié)構(gòu)/analysis: object structure 在需求分析之后ss95,我們將開始系統(tǒng)的領(lǐng)域分析。在這個(gè)階段, 我們會(huì)根據(jù)已有的需求,給出問(wèn)題整體解決方案的類圖。圖中將包含系統(tǒng)主要的類

12、及其相互關(guān)系,但是不包含它們之間接口的描述。建立主類圖的第一步實(shí)標(biāo)識(shí)出系統(tǒng)的相關(guān)對(duì)象。3.1 對(duì)象標(biāo)識(shí)/identifying objects 活動(dòng)對(duì)象 聲音信息的播放和錄制設(shè)備 一盒數(shù)字磁帶 按鈕,屏幕 用戶通過(guò)按鈕操作系統(tǒng)。屏幕將顯示菜單和提示信息。 鬧鐘 顯示時(shí)間和提醒功能 輔助設(shè)備 電池電量傳感器 測(cè)量電池剩余電量 模數(shù)轉(zhuǎn)換器 模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),是信號(hào)由麥克向處理器傳遞的接口 數(shù)模轉(zhuǎn)換器 數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào),是處理器向麥克傳遞信號(hào)的接口 屏幕控制器 在液晶屏幕上產(chǎn)生圖象 現(xiàn)實(shí)內(nèi)容 日期 時(shí)間 語(yǔ)音,聲音 物理設(shè)備麥克,揚(yáng)聲器 電池 鍵盤,顯示器 關(guān)鍵概念 語(yǔ)音,采樣,聲音采樣

13、 聲音信息 永久對(duì)象 已經(jīng)記錄的信息的集合 數(shù)字磁帶中的內(nèi)容 當(dāng)前時(shí)間,日期 鬧鐘定時(shí) 鬧鈴響起來(lái)的時(shí)間 事務(wù)處理 消息 可視元件 菜單,菜單設(shè)置選項(xiàng),菜單選擇 時(shí)鐘,鬧鈴開啟和關(guān)閉指示 日歷 狀態(tài)條,幫助行,任務(wù)進(jìn)度指示條 播放,錄音,停止,是,否,上,下,左,右等9個(gè)按鈕 使用者將通過(guò)上述按鈕操縱系統(tǒng)。 圖 3.1 用戶接口/user interface 圖 3.1 顯示了用戶接口的所有可視元件。系統(tǒng)操作采用菜單驅(qū)動(dòng),屏幕上將顯示當(dāng)前菜單。頂部顯示當(dāng)前時(shí)間,日期及鬧鐘定時(shí)。底部顯示提示信息。3.2 建造類圖/building the class diagrams 數(shù)字錄音機(jī)系統(tǒng)類圖/the

14、 sound recorder class diagram 使用者通過(guò)display類(顯示器)和keyboard(鍵盤)與系統(tǒng)交互。這些都是被動(dòng)對(duì)象,因此我們決定提供userinterface(用戶接口)類來(lái)管理上述交互行為。userinterface類依賴audiocontoller(音頻控制器)類來(lái)完成任務(wù)。audiocontoller類是整個(gè)系統(tǒng)的核心類,它將執(zhí)行用戶接口類要求執(zhí)行的任務(wù)。audiocontoller類通過(guò)audioinput(音頻輸入)類和audiooutput(音頻輸出)類來(lái)完成對(duì)聲音的處理。 這兩個(gè)類分別與硬件封裝類microphone(麥克)和speaker(揚(yáng)

15、聲器)相關(guān)聯(lián)。 akz96信息存儲(chǔ)將由messagememory類完成,該類維護(hù)一個(gè)信息存儲(chǔ)目錄,負(fù)責(zé)為新信息提供分配控件以及刪除舊信息。圖 3.2 數(shù)字錄音機(jī)系統(tǒng)類 alarmclock類更新內(nèi)部時(shí)鐘并檢查是否到了應(yīng)該響鈴的時(shí)間,如果是就發(fā)出鈴聲。在這種情況下,它會(huì)將鬧鈴事件通報(bào)給userinterface類,userinterface類收到消息后會(huì)在屏幕上顯示鬧鈴指示并通過(guò)audiocontrol類發(fā)出鬧鈴聲。圖 3.2 以圖形的方式描述了數(shù)字錄音機(jī)系統(tǒng)主要的類。類圖通過(guò)對(duì)每個(gè)類細(xì)節(jié)抽象,為我們提供了系統(tǒng)的概要描述。我們決定將類圖中的類歸總為5個(gè)子系統(tǒng)。分別為alarm clock子系統(tǒng),

16、 battery子系統(tǒng), user interface子系統(tǒng), memory子系統(tǒng) 和audio子系統(tǒng). 圖 3.3描述了這個(gè)劃分. 后續(xù)章節(jié)將對(duì)每個(gè)子系統(tǒng)深入研究并逐步擴(kuò)展。圖 3.3 數(shù)字錄音機(jī)的子系統(tǒng) 音頻子系統(tǒng)類圖 每條信息由一組音頻塊(audio blocks)組成,而每個(gè)音頻塊又包含了一組音頻樣本。音頻子系統(tǒng)總是記錄/回放一個(gè)完整的音頻塊。音頻輸入和輸出類是實(shí)時(shí)工作的,timer類是硬件定時(shí)器的封裝類,它為audioinput和audiooutput類提供精確定時(shí)。microphone是麥克的封裝類。一個(gè)microphone類記錄一個(gè)聲音樣本。speaker類能夠通過(guò)揚(yáng)聲器回放聲音

17、樣本。 . 圖 3.4 音頻子系統(tǒng)類圖 為什么需要3個(gè)不同的類來(lái)播放信息呢?因?yàn)榛胤藕陀涗浺粭l信息是一個(gè)復(fù)雜的過(guò)程,需要精確的定時(shí)以及同硬件交互。而且,我們認(rèn)為在一個(gè)處理過(guò)程中逐步處理信息的方案會(huì)增加設(shè)計(jì)的復(fù)雜度。另外,這樣的設(shè)計(jì)能夠很容易擴(kuò)展成可以處理包含2聲道音頻塊或使用管道壓縮(pipelined compression)技術(shù)的立體聲信息。圖 3.5 聲音信息的內(nèi)部表示 圖 3.5 顯示信息(message)、音頻塊(audioblock)和聲音樣本(soundsample)之間的分解關(guān)系,以及播放(play)各元素所需要的類。 粒度/granularity 播放/play 錄制/rec

18、ord 音頻樣本,1/6000秒 speaker.playsample() microphone.recordsample() 音頻塊,2000個(gè)音頻樣本。1/3秒 audiooutput.playaudioblock audioinput.recordaudioblock 聲音信息(不定長(zhǎng)) 舉例:60個(gè)音頻塊,20秒 audiocontroler.playmessage audiocontroler.recordmessage 圖 3.6 顯示進(jìn)行聲音回放操作時(shí)的信息變換。該順序圖針對(duì)可讀性進(jìn)行了優(yōu)化。實(shí)際情況是,一個(gè)audiooutput 對(duì)象在處理一個(gè)音頻塊時(shí)會(huì)調(diào)用2000次plays

19、ample 方法。圖 3.6 回放信息的順序圖 信息內(nèi)存子系統(tǒng)類圖/the message memory subsystem class diagram messagememory 類負(fù)責(zé)管理系統(tǒng)的存儲(chǔ)空間, 它維護(hù)了一個(gè)目錄來(lái)保存已有的信息同時(shí)為新信息分配存儲(chǔ)空間。圖 3.7 為內(nèi)存子系統(tǒng)的類圖。用戶接口通過(guò)messagememory 類取得已有信息清單,但不能對(duì)之進(jìn)行修改。如果想修改message memory管理的內(nèi)容,只能通過(guò)audiocontroller 類的進(jìn)行。如果用戶接口需要?jiǎng)h除一條信息,可以通過(guò)messagememory類的deletemessage過(guò)程。該過(guò)程將調(diào)用audi

20、ocontroller類中的相關(guān)方法對(duì)信息進(jìn)行刪除. 這個(gè)技術(shù)避免了用戶刪除一條正在被audio controller類回放或記錄地信息。圖 3.8 描述了這種情況。 圖 3.7 message memory 類圖 圖 3.8 刪除一條正在播放信息的情況 圖 3.9 alarmclock類圖 alarmclock類圖 alarmclock 類保存當(dāng)前日期、時(shí)間及鬧鐘定時(shí)。alarmclock 通過(guò)一個(gè)定時(shí)器來(lái)測(cè)量時(shí)間,每秒鐘都調(diào)用nextsecond 方法更新內(nèi)部時(shí)鐘。當(dāng)時(shí)間增加到新的一天時(shí),調(diào)用nextday方法更新日期。alarmclock類在圖 3.9.中描述。userinterface

21、類圖 userinterface 類管理系統(tǒng)與使用者之間的交互行為。它接收使用者的鍵盤輸入,然后在屏幕上作出反應(yīng)。display 類是硬件的顯示接口,為了節(jié)約能量在不用的時(shí)候可以關(guān)閉。抽象的繪圖區(qū)用來(lái)在屏幕上畫圖,它提供一些基本的作圖功能如畫點(diǎn)、線、文本或者用某個(gè)顏色填充一個(gè)矩形區(qū)域。一個(gè)繪圖區(qū)就是屏幕上的一個(gè)矩形區(qū)域。它負(fù)責(zé)本地坐標(biāo)到全局坐標(biāo)的幾何轉(zhuǎn)換。view 類利用繪圖區(qū)提供的簡(jiǎn)單的作圖功能顯示系統(tǒng)對(duì)象,如當(dāng)前時(shí)間或者菜單等。每個(gè)view對(duì)象都擁有自己的繪圖區(qū),圖3.10 對(duì)這些對(duì)象進(jìn)行了可視化描述。userinterface 還接收從alarmclock類和battery類傳來(lái)的消息。

22、某些事件,如電池電量不足等稱為非模態(tài)事件,這類事件不管什么時(shí)候發(fā)生,系統(tǒng)總會(huì)作出響應(yīng)。非模態(tài)事件由userinterface對(duì)象進(jìn)行管理。相對(duì)的,另外一些事件,比如在當(dāng)前用戶模式下用戶按了一個(gè)按鍵。如果用戶按的是down鍵,系統(tǒng)所做的操作可能是選中下一個(gè)菜單項(xiàng)或者減少當(dāng)前事件。這類事件被稱為模態(tài)事件。它們是由userinterface的常規(guī)事件處理器傳遞給具體的user mode類的進(jìn)行處理的。圖 3.10 圖形對(duì)象的可視化描述 圖 3.11 用戶接口子系統(tǒng)類圖 menuusermode 類和menuview 類允許用戶通過(guò)屏幕菜單選擇不同的選項(xiàng)。settingdateusermode和set

23、tingtimeusermodes負(fù)責(zé)改變當(dāng)前日期和時(shí)間,并通過(guò)dateview 和timeview 對(duì)象在屏幕上顯示日期和時(shí)間。4 分析:定義對(duì)象的行為 類圖是我們系統(tǒng)的靜態(tài)視圖。 為了更好的理解系統(tǒng)的行為,我們將建立新的圖表來(lái)表現(xiàn)設(shè)計(jì)的動(dòng)態(tài)內(nèi)容。狀態(tài)圖(statechart diagrams), 協(xié)作圖(collaboration diagrams)以及順序圖(sequence diagrams) 用來(lái)描述系統(tǒng)的動(dòng)態(tài)行為。我們將利用狀態(tài)圖來(lái)描述某單個(gè)類的內(nèi)部變化。音頻控制器/audio controlle 一個(gè)音頻控制器對(duì)象負(fù)責(zé)控制聲道。聲道是用來(lái)錄制/回放聲音信息或播放鬧鈴的聲音。圖 4

24、.1 audiocontroller的行為 音頻輸入/audio input 一個(gè)audio input 對(duì)象控制一個(gè)聲道. 在dma通道的幫助下,通過(guò)麥克記錄一個(gè)音頻塊并將之壓縮。圖 4.1描述了audio input 對(duì)象的行為。圖 4.2 audioinput 狀態(tài)圖 音頻輸出/audio output 一個(gè)audiooutput 對(duì)象控制一個(gè)聲道,能夠通過(guò)揚(yáng)聲器播放一個(gè)音頻塊。圖 4.3 audiooutput 狀態(tài)圖 麥克/microphone microphone 對(duì)象是硬件麥克的包裝類,它具有一個(gè)可開關(guān)的輸入放大器,當(dāng)麥克打開的時(shí)候,它能周期性的夠捕獲聲音采樣。圖 4.4 mic

25、rophone 狀態(tài)圖 揚(yáng)聲器/speaker speaker對(duì)象是真實(shí)揚(yáng)聲器的包裝類,它具有一個(gè)可開關(guān)的輸出放大器。圖 4.5 speaker 狀態(tài)圖 時(shí)鐘/timer 一個(gè)硬件時(shí)鐘負(fù)責(zé)測(cè)量時(shí)間,timer 對(duì)象是時(shí)鐘的包裝類。圖 4.6 timer 狀態(tài)圖 4.1 用戶接口 菜單用戶模式/menu user mode 菜單用戶模式是用戶接口中最主要的用戶模式,用戶可以通過(guò)按鈕瀏覽菜單并選擇想要的內(nèi)容。用“up” 和 “down” 按鈕下一個(gè)和上級(jí)菜單。用“right” 和 “yes” 按鈕調(diào)用菜單功能?!發(fā)eft” 按鈕選擇上級(jí)菜單。圖 4.7 菜單用戶模式狀態(tài)圖 時(shí)鐘設(shè)置用戶模式/set

26、ting clock user mode 用戶在時(shí)鐘設(shè)置模式可以設(shè)置當(dāng)前時(shí)間和鬧鐘定時(shí)。 通過(guò)“l(fā)eft” 和 “right”按鈕在分鐘和小時(shí)位置上進(jìn)行切換?!皍p” 和 “down” 按鈕用來(lái)修改當(dāng)前位置的內(nèi)容。日期設(shè)置用戶模式/setting date user mode 日期設(shè)置用戶模式用來(lái)修改當(dāng)前日期,“l(fā)eft”和“right” 按鈕用來(lái)在日、月、年位置之間進(jìn)行切換,“up” 和“down” 按鈕修改當(dāng)前位置的內(nèi)容。圖 4.8 時(shí)鐘設(shè)置用戶模式狀態(tài)圖 圖 4.9 日期設(shè)置用戶模式狀態(tài)圖 5 構(gòu)架設(shè)計(jì)/architectural design 在本節(jié)中,我們將描述設(shè)計(jì)中所涉及的所有硬件

27、資源。在我們的最終產(chǎn)品中,硬件和軟件是同樣重要。一個(gè)消費(fèi)者不會(huì)只買軟件而不要配套的硬件或只買硬件設(shè)備而沒有相應(yīng)的軟件,他需要的是一個(gè)由硬件和軟件共同構(gòu)成產(chǎn)品。需要提的一點(diǎn)是,我們沒有試圖對(duì)系統(tǒng)硬件作任何優(yōu)化工作。舉例來(lái)說(shuō),目前我們采用的處理器比系統(tǒng)實(shí)際需要的功能要強(qiáng),這可能造成系統(tǒng)的成本增加,體積和耗電量變大。但也正是因?yàn)檫@一點(diǎn),我們可以集中精力進(jìn)行系統(tǒng)設(shè)計(jì),從而避免在系統(tǒng)實(shí)現(xiàn)方案的選擇和優(yōu)化上花費(fèi)更多的時(shí)間。5.1 物理構(gòu)架/physical architecture 主處理器采用hitachi sh7032 16mhz工作主頻,帶8kb 內(nèi)置ram,內(nèi)核采用常規(guī)的risc整數(shù)管道技術(shù),負(fù)責(zé)

28、運(yùn)行機(jī)器指令。系統(tǒng)內(nèi)置外設(shè)包括一個(gè)模數(shù)轉(zhuǎn)換器、一些定時(shí)器和計(jì)數(shù)器、dma通道和一個(gè)監(jiān)控器.手冊(cè)hsh1中包含處理器內(nèi)核指令描述,硬件設(shè)備和內(nèi)置外設(shè)的描述在手冊(cè)hsh2中。圖 5.1 顯示了建議構(gòu)架。本系統(tǒng)原型配置了64kb eprom, 256kb sram 和128kb 顯存。eprom 包含引導(dǎo)代碼和一個(gè)調(diào)試程序。系統(tǒng)的兩個(gè)rs-232 兼容串口max232用來(lái)下載和調(diào)試軟件,它們與處理器的串行通道連接。初始化串口的程序也保存在eprom中,串口的收發(fā)速率可達(dá)到最大38400 bps。模數(shù)轉(zhuǎn)換器有7個(gè)輸入通道,采樣頻率為60khz,采樣精度12位.它的作用是通過(guò)麥克錄制聲音。主板描述在手冊(cè)

29、hevb中。聲音回放裝置為外置數(shù)模轉(zhuǎn)換器ad7524。液晶顯示器 hlcd為320x240象素、黑白顯示,有背景照明功能。lcd 控制器采用一個(gè)yamaha ygv610b,支持16級(jí)灰度。lcd 控制器產(chǎn)生所有液晶屏幕顯示的信號(hào)。它具有獨(dú)立的顯示內(nèi)存。它通過(guò)系統(tǒng)總線與處理器交換信息。lcd 控制器的端口和顯示內(nèi)存將映射到系統(tǒng)內(nèi)存中。5.2 構(gòu)架模式 系統(tǒng)對(duì)軟件沒有安全和可靠性方面的要求,也不支持硬件容錯(cuò)?;蛟S會(huì)出現(xiàn)在設(shè)備報(bào)廢之前,由于用戶使用不慎如進(jìn)水或掉到地上而造成某些部件損壞的情況。監(jiān)控器負(fù)責(zé)在發(fā)生障礙的情況下重新啟動(dòng)系統(tǒng)。監(jiān)控器重新啟動(dòng)系統(tǒng)會(huì)造成內(nèi)存中內(nèi)容的丟失。因?yàn)槭欠忾]式嵌入系統(tǒng),

30、所以數(shù)字錄音機(jī)不具備與其它系統(tǒng)進(jìn)行通信的功能。同時(shí),也沒必要提供僅供測(cè)試和診斷使用的通信功能,因?yàn)橄到y(tǒng)很簡(jiǎn)單,通過(guò)屏幕所顯示的提示進(jìn)行測(cè)試即可。事實(shí)上,本系統(tǒng)在設(shè)計(jì)上就是不能測(cè)試和維修的。處理器通過(guò)內(nèi)存地址空間訪問(wèn)外設(shè),它們被緊密的結(jié)合在一起,根本就不需要任何特殊的通信機(jī)制。5.3 并行性設(shè)計(jì) 并行模式必須明確軟件中所使用的線程以及線程之間的通信機(jī)制。為了使設(shè)計(jì)盡可能簡(jiǎn)單,我們決定在當(dāng)前的設(shè)計(jì)中不采用實(shí)時(shí)操作系統(tǒng)而在將來(lái)的設(shè)計(jì)中采用。在當(dāng)前設(shè)計(jì)中,有兩個(gè)可執(zhí)行線程。用戶線程是一個(gè)交互線程,用來(lái)管理使用者與系統(tǒng)之間通過(guò)按鍵和屏幕進(jìn)行的交互行為。音頻系統(tǒng)線負(fù)責(zé)調(diào)度響應(yīng)對(duì)象和實(shí)時(shí)對(duì)象。音頻系統(tǒng)線程在

31、處理器收到中斷請(qǐng)求的時(shí)候被激活。它享有比用戶線程更高的優(yōu)先級(jí)。在音頻系統(tǒng)線程中有一個(gè)調(diào)度對(duì)象來(lái)負(fù)責(zé)調(diào)度其它對(duì)象的運(yùn)行。硬件定時(shí)器周期性激活該調(diào)度對(duì)象來(lái)處理任務(wù)表。任務(wù)表中每個(gè)任務(wù)元素都包含一個(gè)方法的指針及該任務(wù)的執(zhí)行周期信息。調(diào)度對(duì)象具有最高優(yōu)先級(jí),目的是為了盡可能快的執(zhí)行任務(wù)并得到返回結(jié)果。不同線程中的兩個(gè)對(duì)象通過(guò)reactive subject模式(詳見附錄a)進(jìn)行通信。圖 5.1 數(shù)字錄音機(jī)系統(tǒng)硬件結(jié)構(gòu) 圖 5.2 任務(wù)圖 6 機(jī)制設(shè)計(jì)/mechanistic design 在本章中,我們將討論不同的軟件對(duì)象是怎樣通過(guò)協(xié)作而完成它們各自的功能。第四章介紹了每個(gè)獨(dú)立對(duì)象的內(nèi)部行為。然后我們

32、又描述了在收到消息的時(shí)候?qū)ο蟮臓顟B(tài)變換?,F(xiàn)在,我們將關(guān)注一下對(duì)象之間是怎樣交換消息的。我們還將使用軟件模式對(duì)不同的對(duì)象的外部行為進(jìn)行描述。6.1 硬件與反應(yīng)對(duì)象之間的協(xié)作 我們可以將硬件視為一個(gè)參與者。這些參與者可能在分析階段已經(jīng)定義了。硬件可以通過(guò)中斷請(qǐng)求發(fā)送給運(yùn)行程序一個(gè)事件。當(dāng)一個(gè)硬件設(shè)備需要給程序發(fā)送時(shí)間的時(shí)候便會(huì)產(chǎn)生一個(gè)中斷請(qǐng)求,在某個(gè)時(shí)間點(diǎn)處理器會(huì)接受中斷請(qǐng)求,并停止當(dāng)前正在執(zhí)行的程序流程,然后調(diào)用中斷處理過(guò)程。中斷處理過(guò)程處理硬件請(qǐng)求后必須盡快返回,以允許當(dāng)前程序進(jìn)程繼續(xù)進(jìn)行。不幸的是,中斷服務(wù)程序(isr-interrupt service routine)不能是一個(gè)對(duì)象的方法

33、,因此,沒有任何相關(guān)的背景信息,也不能使用大多數(shù)oo語(yǔ)言支持的this或者self指針功能。所以,設(shè)計(jì)者必須建立一個(gè)將硬件中斷請(qǐng)求轉(zhuǎn)換為對(duì)象信息的機(jī)制。我們將這種機(jī)制封裝在isr抽象類中。isr類的子類就可以象實(shí)現(xiàn)普通方法那樣實(shí)現(xiàn)中斷服務(wù)程序。6.2 反應(yīng)對(duì)象與用戶接口之間的協(xié)作 鍵盤、電量表(battery level meter)、鬧鐘(alarm clock) 、音頻控制器(audio controller) 與 用戶接口(user interface)之間的協(xié)作遵循條件反應(yīng)模式(reactive subject pattern)。反應(yīng)對(duì)象只向事件代理發(fā)送事件,并不需要等待用戶接口讀取事

34、件。用戶接口定期檢查時(shí)間代理中是否有新事件。一旦發(fā)現(xiàn)有新事件則委托屏幕和控制器產(chǎn)生響應(yīng)。6.3 scheduler 和 alarm clock, keyboard和battery level meter之間的協(xié)作 scheduler 對(duì)象為依賴時(shí)間信息的類提供精確定時(shí)和時(shí)序安排。alarmclock 從scheduler類訂閱信息。每秒鐘scheduler都會(huì)通報(bào)alarmclock類有一秒鐘時(shí)間已經(jīng)結(jié)束。圖 6.1 scheduler類圖 keyboard 對(duì)象需要定期取得物理鍵盤所有按鍵的狀態(tài)。我們決定每秒鐘檢測(cè)10次鍵盤輸入。所以,如果用戶按下并放開一個(gè)按鍵的時(shí)間小于1/20秒,則該按鍵

35、輸入會(huì)丟失。圖 6.2 scheduler對(duì)象與其客戶對(duì)象之間的協(xié)作 物理鍵盤還能夠在按鍵時(shí)產(chǎn)生一個(gè)硬件中斷,與定時(shí)檢測(cè)方法相比,中斷法能夠減輕cpu的負(fù)載,但是需要增加所需的硬件。batterylevelmeter 類每5秒鐘測(cè)量一次電池的電量。scheduler負(fù)責(zé)周期性的激活keyboard 和batterylevelmeter類。圖 6.2 顯示了scheduler是如何周期性的喚醒系統(tǒng)的反應(yīng)類的。6.4 messagememory、message和audiocontroller對(duì)象之間的協(xié)作 messagememory 是message對(duì)象的容器. 這種協(xié)作關(guān)系遵循container

36、模式。audiocontroller在需要訪問(wèn)message對(duì)象的時(shí)候會(huì)用到messagememory類。6.5 settingtimeusermode, alarmclock,keyboard 和clockview 對(duì)象之間的協(xié)作 這些對(duì)象都遵循model view controller模式. alarmclock為clockview提供一個(gè)模型用來(lái)在顯示屏上顯示時(shí)間。usermode 對(duì)象控制系統(tǒng)與用戶之間的交互行為。由于alarmclock 是反應(yīng)對(duì)象,clockview 是交互對(duì)象。它們之間的協(xié)作將遵循reactive subject 模式。keyboard 對(duì)象向userinterf

37、ace類通告用戶按鍵事件也遵循該模式。圖 6.3 顯示了當(dāng)前用戶模式為settingtimeusermode.時(shí),用戶按下up 鍵后所產(chǎn)生一系列消息的順序過(guò)程。6.6 userinterface, audiocontroller, messages 和audiooutput 對(duì)象之間的協(xié)作 userinterface 和audiocontroller 之間的協(xié)作采用了reactive subject 模式。audiocontroller, message,audioinput 和audiooutput 之間的協(xié)作采用observer模式。圖 6.4 顯示了播放一條聲音信息所的消息傳遞順序。為了

38、簡(jiǎn)化,聲音信息用一個(gè)音頻塊表示。這種合作有點(diǎn)復(fù)雜但支持回放和錄制兩個(gè)不同的信息。同時(shí),還支持錄制和回放立體聲聲音,但每條信息將有兩個(gè)音頻塊流組成。圖 6.3 model-view-controller 協(xié)作 圖 6.4 userinterface 和audiocontroller對(duì)象之間的協(xié)作關(guān)系 7 詳細(xì)設(shè)計(jì)/detailed design 7.1 硬件的對(duì)象建模 一個(gè)硬件封裝類是對(duì)一個(gè)硬件設(shè)備的軟件對(duì)象化描述,是應(yīng)用程序與硬件之間的接口。硬件封裝類的構(gòu)造函數(shù)將初始化硬件設(shè)備,然后該類所對(duì)應(yīng)的硬件就可以使用了??梢酝ㄟ^(guò)封裝類的方法對(duì)硬件進(jìn)行配置、啟動(dòng)或停止等操作。由于硬件的狀態(tài)將由封裝類的狀

39、態(tài)表示,通常情況下封裝類都不會(huì)有太多的屬性。詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)硬件封裝類需要很準(zhǔn)確的硬件方面的知識(shí)。本系統(tǒng)中的硬件封裝類包括speaker, microphone, timer和keyboard 對(duì)象。7.2 音頻壓縮算法 一個(gè)很明確的需求就是,必須以6khz頻率,8位采樣樣本錄制聲音。這表示在錄制過(guò)程中,每秒鐘需要至少6kb內(nèi)存。我們可以通過(guò)對(duì)輸入信號(hào)的壓縮處理來(lái)減少內(nèi)存的需要量。最簡(jiǎn)單的音頻壓縮是適應(yīng)性delta脈沖編碼調(diào)制技術(shù)(adaptive delta pulse code modulation adpcm) itu727. adpcm 很容易實(shí)現(xiàn)并且cpu占用率很低。7.3 使用直接內(nèi)

40、存訪問(wèn)通道 在錄制聲音信息的時(shí)候,一個(gè)audioinput 對(duì)象每秒鐘需要從麥克獲得6000個(gè)樣本。有多個(gè)途徑可以完成這個(gè)任務(wù)。第一個(gè)方案是使用scheduler來(lái)計(jì)時(shí),由一個(gè)定時(shí)器在每秒鐘內(nèi)激活scheduler6000次。scheduler 被激活后便通過(guò)audioinput對(duì)象采集一個(gè)聲音樣本。很顯然,由于只需要傳輸一個(gè)字節(jié),cpu周期的大部分事件被浪費(fèi)了。另一個(gè)解決方案是通過(guò)一個(gè)新的定時(shí)器直接激活audioinput 對(duì)象采集聲音樣本。這種情況下,cup占用率會(huì)低一些但仍是相當(dāng)可觀的。中斷服務(wù)程序在大多數(shù)risc處理器系統(tǒng)中的表現(xiàn)都大打折扣,也不宜采用。所以第三個(gè)可選方案是使用直接內(nèi)存

41、訪問(wèn)通道(direct memory access channeldmac)。一個(gè)dmac 一次可以將幾個(gè)word由內(nèi)存的一處移到另一處而不需要占用cpu資源。由于所有內(nèi)置外設(shè)的端口都映射到了內(nèi)存地址空間中,所以通過(guò)dmac實(shí)現(xiàn)外設(shè)之間和外設(shè)與內(nèi)存之間的數(shù)據(jù)傳送是可能的。在我們的設(shè)計(jì)中,我們將使用dmac由麥克向一個(gè)音頻塊傳輸聲音樣本,或者將音頻塊傳送給揚(yáng)聲器。一個(gè)dmac 單元擁有一些寄存器來(lái)控制它的行為,其中主要有源地址寄存器、目的地址寄存器、傳輸計(jì)數(shù)寄存器和一些標(biāo)志寄存器。標(biāo)志寄存器用來(lái)保存是否在每次傳輸結(jié)束后需要增加源/目的地址的空間,或者用來(lái)標(biāo)識(shí)被傳輸?shù)膯卧且粋€(gè)word還是一個(gè)by

42、te。寄存器的使用使數(shù)據(jù)能夠以更快的速度傳輸并與定時(shí)器保持同步。在編程時(shí),我們將dmac的a/d轉(zhuǎn)換器的地址作為錄制聲音操作的源地址。目的地址指向一個(gè)能夠在每次傳輸后根據(jù)傳輸內(nèi)容自動(dòng)調(diào)整空間的內(nèi)部緩沖區(qū)。傳輸單元是一個(gè)字節(jié)與聲音樣本的大小相同。我們使用一個(gè)定時(shí)器,通過(guò)編程實(shí)現(xiàn)每秒產(chǎn)生6000次中斷以及對(duì)每次傳輸初始化。當(dāng)定時(shí)器向cpu發(fā)送中斷請(qǐng)求后,dmac 單元開始傳輸數(shù)據(jù)。如果cpu的中斷響應(yīng)被屏蔽的話,dmac也會(huì)傳輸數(shù)據(jù),但不會(huì)被接收。因此而造成數(shù)據(jù)丟失。實(shí)際上,我們需要中斷被屏蔽,所以定時(shí)器不干擾cpu。在聲音樣本被存儲(chǔ)到緩沖區(qū)后,dmac單元產(chǎn)生并發(fā)送中斷請(qǐng)求給audioinput

43、。audioinput對(duì)象接收到請(qǐng)求后,將緩沖區(qū)的內(nèi)容壓縮成一個(gè)音頻塊。圖7.1 顯示了錄制一個(gè)音頻塊的過(guò)程。一條聲音信息的所有音頻塊都是重復(fù)此過(guò)程而獲得的。 圖 7.1 記錄一個(gè)音頻塊 設(shè)計(jì)中還需要討論的一點(diǎn)是音頻塊的尺寸。如果太小,cpu將花費(fèi)大量時(shí)間用于對(duì)象間的信息傳遞以及控制dmac操作同步上。所有聲音信息都是由n(n為整數(shù))個(gè)音頻塊組成。一條聲音信息回放時(shí)間長(zhǎng)短以及尺寸大小取決于音頻塊的長(zhǎng)度和尺寸大小。如果音頻塊的尺寸過(guò)大則造成內(nèi)存浪費(fèi)和系統(tǒng)響應(yīng)緩慢。聲音回放與聲音錄制的機(jī)制很類似的。先由audiooutput對(duì)象將音頻塊解壓縮為聲音樣本并存儲(chǔ)到緩沖區(qū)。然后由dmac將聲音樣本傳送給

44、d/a轉(zhuǎn)換器。此機(jī)制只有在cpu能夠很快速的壓縮和解壓聲音樣本的情況下才能被接受。否則,用戶會(huì)在兩個(gè)回放音頻塊的間隙聽到低頻噪音。但這個(gè)問(wèn)題可以通過(guò)以下途徑解決:優(yōu)化傳輸音頻塊的過(guò)程或者考慮以音頻塊流的方式傳輸音頻塊。由于cpu和dmac是同步工作的,我們可以通過(guò)一個(gè)管道(pipeline)處理音頻流,使dmac在傳輸一個(gè)音頻塊的時(shí)候,cpu解壓下一個(gè)音頻塊。 圖 7.2 回放一個(gè)音頻塊 7.4 硬件資源的分配 我們必須將硬件和外設(shè)資源分配給不同的反應(yīng)對(duì)象。由于中斷向量、dma通道、定時(shí)器和輸入/輸出端口的數(shù)量限制。我們不得不仔細(xì)計(jì)劃如何使用它們。. 值得注意的是,很難(也許是根本不可能)并行

45、使用大部分上述硬件資源。對(duì)象 資源 顯示器(display) 硬件定時(shí)器0 調(diào)度(scheduler) 硬件定時(shí)器1 ima1 中斷 麥克(microphone) 模擬信號(hào)輸入7 a/d 轉(zhuǎn)換器(自動(dòng)轉(zhuǎn)換模式) 揚(yáng)聲器(speaker) digital outputs: pb7 topb0 硬件定時(shí)器2 dma 通道 dma channels 屏蔽imia2, ima3 中斷 音頻輸入audioinput dma 通道1 dmac1 dei 中斷向量 音頻輸出 audiooutput dma 通道 2 dmac2 dei 中斷向量 鍵盤 數(shù)字輸出端口:pb4 to pb12 數(shù)字輸入端口:pc

46、3 to pc0 7.5 內(nèi)存分配 messagememory對(duì)象的作用是分配和釋放存儲(chǔ)聲音信息的內(nèi)存空間。由于有效內(nèi)存很有限而且系統(tǒng)沒有虛擬內(nèi)存,所以我們不得不設(shè)計(jì)一種能夠保證內(nèi)存的使用最佳化的機(jī)制。這包括通過(guò)內(nèi)存碎片整理和對(duì)象排列技術(shù)來(lái)避免內(nèi)存空間的浪費(fèi)。當(dāng)一個(gè)聲音信息對(duì)象被創(chuàng)建時(shí),它將分配一個(gè)數(shù)組用來(lái)存儲(chǔ)音頻塊,數(shù)組中的每個(gè)元素包含一個(gè)使用標(biāo)記和一個(gè)指向信息流中下一個(gè)音頻塊的指針。我們通過(guò)內(nèi)存塊重用以及預(yù)分配技術(shù)避免出現(xiàn)內(nèi)存碎片,不采用在每次錄制聲音信息的時(shí)候分配而在刪除信息的時(shí)候釋放內(nèi)存的做法。通常情況下,內(nèi)存分配函數(shù)只能由存儲(chǔ)隊(duì)列中分配尺寸確定的內(nèi)存空間,音頻塊的尺寸是存儲(chǔ)隊(duì)列組成因

47、子尺寸的整數(shù)倍。這樣就可以保證不浪費(fèi)一個(gè)字節(jié)。8 實(shí)現(xiàn) 考慮到嵌入式系統(tǒng)的最終軟件產(chǎn)品不是軟件映射到內(nèi)存中,而是常駐在永久性內(nèi)存中。因此,程序的所有連接庫(kù)必須靜態(tài)調(diào)用,必須為程序的所有符號(hào)分配絕對(duì)地址。程序中必須包含硬件初始化、硬件檢查以及重新排列ram中可執(zhí)行程序的代碼。程序能夠初始化處理器堆棧,將只讀存儲(chǔ)器中的變量拷貝到隨機(jī)存儲(chǔ)器中,將未初始化的變量置為0。在目標(biāo)原型產(chǎn)品中包含帶有一個(gè)小型調(diào)試器的永久性內(nèi)存。系統(tǒng)打開后調(diào)試器被激活,它等待從主機(jī)通過(guò)通信連接如串口線或網(wǎng)絡(luò)連接下載主程序。主程序被下載后可以運(yùn)行或?qū)ζ溥M(jìn)行調(diào)試。當(dāng)軟件開發(fā)完成后并通過(guò)測(cè)試后,可以保存在永久性內(nèi)存中如rom或epr

48、om。這些內(nèi)存可以被插到目標(biāo)機(jī)器上,只要機(jī)器啟動(dòng)程序就能運(yùn)行。8.1開發(fā)語(yǔ)言和軟件工具 我們采用c+編程語(yǔ)言實(shí)現(xiàn)系統(tǒng)軟件。 選擇何種開發(fā)語(yǔ)言編寫嵌入式系統(tǒng)取決于可供使用的工具的數(shù)量。因此,我們采用了gnu系列工具,包括c+交叉編譯器gnu g+,跨平臺(tái)調(diào)試工具gdb以及gdb的前端圖象界面ddd。8.2 生成軟件 目前的程序包括3500行c+代碼和2000原有c代碼。程序在宿主計(jì)算機(jī)上被編譯,可被下載到產(chǎn)品原型的rom或eprom中。目標(biāo)代碼占用40kb rom和10kb的ram空間。8.3 制造硬件 我們制造了一個(gè)數(shù)字錄音機(jī)的原型。在網(wǎng)站sr 中包含了該原型的硬件構(gòu)成的信息。硬件中包括了一些

49、模擬信號(hào)設(shè)備,如信號(hào)放大器、麥克的噪聲過(guò)濾器等。所有描述信息都是在本文討論范圍基礎(chǔ)上的擴(kuò)充。他們?yōu)榱烁倪M(jìn)聲音質(zhì)量做了很多努力,用戶會(huì)因此而更喜歡的我們的系統(tǒng)的。9 結(jié)論:使用uml進(jìn)行設(shè)計(jì) 本文對(duì)數(shù)字錄音機(jī)的主要元素進(jìn)行了定義、列舉、分析、設(shè)計(jì)和實(shí)現(xiàn)。我們使用uml作為設(shè)計(jì)的圖形符號(hào)化工具。在下個(gè)版本的設(shè)計(jì)中,我們就將使用更多的uml圖表,減少文字描述。為了達(dá)到這個(gè)目的,我們需要更多的面向?qū)崟r(shí)嵌入式系統(tǒng)的軟件模式。我們所加的文字信息將只是用來(lái)闡明,如何修改某個(gè)特定的軟件模式以實(shí)現(xiàn)設(shè)計(jì)。我們將模型以一些獨(dú)立的圖表表示,以便于管理,同時(shí)又可以從不同的角度展示系統(tǒng)。比如uml類圖顯示的是系統(tǒng)的靜態(tài)視

50、圖,順序圖則描述了系統(tǒng)的動(dòng)態(tài)行為。但是,在uml語(yǔ)法定義bjr2中,并不提供對(duì)上述兩種圖表一致性和有效性的判斷功能。uml幫助設(shè)計(jì)者表達(dá)他的設(shè)計(jì)思想,同時(shí)也幫助程序員理解它們。但是,uml只是設(shè)計(jì)的描述方法,不能使你的設(shè)計(jì)更完美。而且uml在圖表和實(shí)現(xiàn)語(yǔ)義方面仍然存一些缺陷。也沒有一個(gè)系統(tǒng)的方法能夠完成由uml圖表到最終實(shí)現(xiàn)的轉(zhuǎn)換,而且也不能檢查最終實(shí)現(xiàn)結(jié)果是否完全符合uml設(shè)計(jì)。圖 9.1 顯示了一個(gè)面向?qū)ο蟮那度胧较到y(tǒng)設(shè)計(jì)的所有內(nèi)容。uml的圖形符號(hào)不只局限于描述軟件系統(tǒng),同樣也用來(lái)描述如何構(gòu)造它們。本文中所描述的系統(tǒng)就是圖 9.1所示的uml類圖的一個(gè)實(shí)例。感謝 感謝marat vaga

51、pov,是他為我們提供了數(shù)字錄音機(jī)的所有硬件設(shè)備。 圖9.1 嵌入式系統(tǒng)設(shè)計(jì)類圖 附錄a. 模式: reactive subject 問(wèn)題 一個(gè)反應(yīng)實(shí)時(shí)對(duì)象(reactive real-time object)如何與一個(gè)交互非實(shí)時(shí)對(duì)象(interactive none real-time)通過(guò)事件進(jìn)行通信。環(huán)境 我們?cè)谝粋€(gè)程序中混合使用交互和反應(yīng)對(duì)象,交互對(duì)象需要反應(yīng)對(duì)象的信息來(lái)更新自己的狀態(tài)。反應(yīng)對(duì)象通常實(shí)現(xiàn)一個(gè)實(shí)時(shí)系統(tǒng)的核心。而交互對(duì)象則實(shí)現(xiàn)的是用戶接口、系統(tǒng)監(jiān)視或者數(shù)據(jù)記錄等功能。約束 嵌入式系統(tǒng)必須嚴(yán)格按照規(guī)定時(shí)間完成某些任務(wù)。交互系統(tǒng)就沒有這個(gè)限制。因此也更易于設(shè)計(jì)和實(shí)現(xiàn)。反應(yīng)對(duì)象不

52、能規(guī)定交互對(duì)象的響應(yīng)時(shí)間。在某些應(yīng)用中,交互對(duì)象需要處理反應(yīng)對(duì)象產(chǎn)生的所有事件,而有些情況只需要處理最后一個(gè)包含有足夠更新信息的事件即可。解決方案 反應(yīng)對(duì)象(reactive object)向事件代理(event proxy object)發(fā)送事件。事件代理保存該事件的指針。這個(gè)保存過(guò)程必須在反應(yīng)對(duì)象發(fā)送下個(gè)事件 之前完成。交互對(duì)象(interactive object )定期調(diào)用事件代理對(duì)象的checkevent 檢查是否有新事件。如果存在新事件,事件代理返回該事件的指針給交互對(duì)象。否則返回一個(gè)空指針。交互對(duì)象通過(guò)返回的指針檢索狀態(tài)信息,在這個(gè)過(guò)程中,交互對(duì)象不執(zhí)行其它操作。事件代理對(duì)象提供一個(gè)checkclearevent方法來(lái)檢查某個(gè)事件是否被處理,如果是則從時(shí)間表中刪除該事件。 圖 a.1 事件代理(eventproxy)類圖 基本原理 通過(guò)對(duì)此系統(tǒng)模式的擴(kuò)展,我們把軟件中反應(yīng)的、面向控制的部分和交互的、面向用戶的部分解耦。這會(huì)帶來(lái)如下好處:首

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論