第13章 數(shù)碼錄音機(jī)UML建模實(shí)例介_(kāi)第1頁(yè)
第13章 數(shù)碼錄音機(jī)UML建模實(shí)例介_(kāi)第2頁(yè)
第13章 數(shù)碼錄音機(jī)UML建模實(shí)例介_(kāi)第3頁(yè)
第13章 數(shù)碼錄音機(jī)UML建模實(shí)例介_(kāi)第4頁(yè)
第13章 數(shù)碼錄音機(jī)UML建模實(shí)例介_(kāi)第5頁(yè)
已閱讀5頁(yè),還剩43頁(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、 l 1.能夠存儲(chǔ)能夠存儲(chǔ)10條信息,消息的長(zhǎng)度有內(nèi)置的存儲(chǔ)器容量來(lái)決定。條信息,消息的長(zhǎng)度有內(nèi)置的存儲(chǔ)器容量來(lái)決定。l 2.屏幕上的操作菜單要簡(jiǎn)單,方便用戶的使用。屏幕上的操作菜單要簡(jiǎn)單,方便用戶的使用。l 3.用戶可以直接訪問(wèn)任何的信息。用戶可以直接訪問(wèn)任何的信息。l 4.具有一個(gè)帶日歷的鬧鐘,用戶可以設(shè)置鬧鐘。鬧鐘啟動(dòng)后,用具有一個(gè)帶日歷的鬧鐘,用戶可以設(shè)置鬧鐘。鬧鐘啟動(dòng)后,用戶需要按下某個(gè)按鍵或者戶需要按下某個(gè)按鍵或者60秒后,鬧鐘會(huì)停止。秒后,鬧鐘會(huì)停止。l 5.屏幕上顯示當(dāng)前的日期和時(shí)間。另外,當(dāng)前的操作和用戶幫助屏幕上顯示當(dāng)前的日期和時(shí)間。另外,當(dāng)前的操作和用戶幫助還要顯示在上面

2、。還要顯示在上面。l 6.屏幕上應(yīng)該有一個(gè)電壓指示器,當(dāng)電池的電量低于一定值時(shí),屏幕上應(yīng)該有一個(gè)電壓指示器,當(dāng)電池的電量低于一定值時(shí),系統(tǒng)要提示用戶需要充電。系統(tǒng)要提示用戶需要充電。l 7.要求具有待機(jī)模式,當(dāng)用戶長(zhǎng)時(shí)間不使用時(shí),系統(tǒng)能進(jìn)入待機(jī)要求具有待機(jī)模式,當(dāng)用戶長(zhǎng)時(shí)間不使用時(shí),系統(tǒng)能進(jìn)入待機(jī)的狀態(tài),當(dāng)用戶按下某一個(gè)按鍵時(shí),還可以繼續(xù)操作,這樣可以的狀態(tài),當(dāng)用戶按下某一個(gè)按鍵時(shí),還可以繼續(xù)操作,這樣可以節(jié)省能量。節(jié)省能量。l 8.數(shù)碼錄音機(jī)的聲音質(zhì)量要好,使用數(shù)碼錄音機(jī)的聲音質(zhì)量要好,使用8位位6Khz的采樣頻率。的采樣頻率。圖圖13.1 系統(tǒng)總體模塊圖系統(tǒng)總體模塊圖 l 1.系統(tǒng)范圍圖系

3、統(tǒng)范圍圖l 系統(tǒng)范圍圖描述了整個(gè)系統(tǒng)和外部環(huán)境之間的交互,系統(tǒng)范圍圖描述了整個(gè)系統(tǒng)和外部環(huán)境之間的交互,把整個(gè)系統(tǒng)看成一個(gè)整體,不具體的描述系統(tǒng)的內(nèi)部把整個(gè)系統(tǒng)看成一個(gè)整體,不具體的描述系統(tǒng)的內(nèi)部實(shí)現(xiàn),只說(shuō)明系統(tǒng)的參與者和系統(tǒng)之間連接問(wèn)題。根實(shí)現(xiàn),只說(shuō)明系統(tǒng)的參與者和系統(tǒng)之間連接問(wèn)題。根據(jù)上述的系統(tǒng)功能需求的分析,可以得出系統(tǒng)的主要據(jù)上述的系統(tǒng)功能需求的分析,可以得出系統(tǒng)的主要參與者有:用戶參與者有:用戶(user),電池,電池(battery)和時(shí)間(和時(shí)間(time)。)。l 2.事件事件l 事件是外部環(huán)境和系統(tǒng)之間傳遞的重要消息。對(duì)于一事件是外部環(huán)境和系統(tǒng)之間傳遞的重要消息。對(duì)于一個(gè)實(shí)時(shí)

4、系統(tǒng),系統(tǒng)必須在規(guī)定的時(shí)間內(nèi)對(duì)外部事件作個(gè)實(shí)時(shí)系統(tǒng),系統(tǒng)必須在規(guī)定的時(shí)間內(nèi)對(duì)外部事件作出響應(yīng)。出響應(yīng)。l 用例是從使用者的角度所描述的系統(tǒng)的功能。使用者用例是從使用者的角度所描述的系統(tǒng)的功能。使用者可能是一個(gè)人或者某個(gè)設(shè)備。每個(gè)用例表示對(duì)系統(tǒng)使可能是一個(gè)人或者某個(gè)設(shè)備。每個(gè)用例表示對(duì)系統(tǒng)使用的一種方法,每個(gè)用例完成后產(chǎn)生不同的結(jié)果。在用的一種方法,每個(gè)用例完成后產(chǎn)生不同的結(jié)果。在本系統(tǒng)中共有本系統(tǒng)中共有6個(gè)用例。數(shù)碼錄音機(jī)的用例圖如圖個(gè)用例。數(shù)碼錄音機(jī)的用例圖如圖 13.3所示。所示。 UserRecord a messagePlayback a messageDelete a message

5、Set the alarm timeSet the clock timeWatch the time圖 13.3 用例圖l 1.記錄一條信息(記錄一條信息(Record a message) l 使用者在錄制的信息時(shí),要將信息存儲(chǔ)在某個(gè)目錄中,使用者在錄制的信息時(shí),要將信息存儲(chǔ)在某個(gè)目錄中,所以在記錄一條信息時(shí)首先是選中要某個(gè)存儲(chǔ)目錄,所以在記錄一條信息時(shí)首先是選中要某個(gè)存儲(chǔ)目錄,按下按下“錄音錄音”(Recording)鍵。如果在該位置已經(jīng)有)鍵。如果在該位置已經(jīng)有一條存儲(chǔ)信息,該記錄將被刪除。系統(tǒng)開(kāi)始通過(guò)麥克一條存儲(chǔ)信息,該記錄將被刪除。系統(tǒng)開(kāi)始通過(guò)麥克風(fēng)錄音,直到用戶按下風(fēng)錄音,直到用戶

6、按下“停止停止”(Stop)鍵或者是將)鍵或者是將系統(tǒng)的內(nèi)存耗盡。系統(tǒng)的內(nèi)存耗盡。l 2.回放一條信息(回放一條信息(Playback a message) l 用戶找到某個(gè)信息的存儲(chǔ)位置,然后按用戶找到某個(gè)信息的存儲(chǔ)位置,然后按“播放播放”(Play)按鈕。如果在該位置有信息,則系統(tǒng)通過(guò)揚(yáng)聲器回放按鈕。如果在該位置有信息,則系統(tǒng)通過(guò)揚(yáng)聲器回放該聲音,直到播放完畢或是用戶按下該聲音,直到播放完畢或是用戶按下停止停止按鈕。按鈕。l 3.刪除一條信息(刪除一條信息(Delete a message) l 用戶選中某個(gè)信息的存儲(chǔ)位置,按下用戶選中某個(gè)信息的存儲(chǔ)位置,按下“刪除刪除”(Delete)按

7、鈕,該位置存儲(chǔ)的信息將被永久的刪除,并釋放其按鈕,該位置存儲(chǔ)的信息將被永久的刪除,并釋放其占用的內(nèi)存空間。占用的內(nèi)存空間。l 4. 定時(shí)鬧鐘(定時(shí)鬧鐘(Set the alarm time) l 用戶可以設(shè)定是否開(kāi)啟或是關(guān)閉鬧鐘,以及響鈴的時(shí)用戶可以設(shè)定是否開(kāi)啟或是關(guān)閉鬧鐘,以及響鈴的時(shí)間。這些操作在鬧鐘菜單中進(jìn)行設(shè)置。間。這些操作在鬧鐘菜單中進(jìn)行設(shè)置。l 5.設(shè)定系統(tǒng)的時(shí)鐘(設(shè)定系統(tǒng)的時(shí)鐘(Set the clock time)l 用戶可以通過(guò)此設(shè)定系統(tǒng)的時(shí)鐘來(lái)調(diào)整和校準(zhǔn)系統(tǒng)的用戶可以通過(guò)此設(shè)定系統(tǒng)的時(shí)鐘來(lái)調(diào)整和校準(zhǔn)系統(tǒng)的時(shí)間,也可將系統(tǒng)的時(shí)間改為當(dāng)前時(shí)區(qū)的時(shí)間。時(shí)間,也可將系統(tǒng)的時(shí)間改為當(dāng)

8、前時(shí)區(qū)的時(shí)間。l 6.顯示系統(tǒng)時(shí)間(顯示系統(tǒng)時(shí)間(Watch the time)l 用戶可以查看屏幕上顯示的系統(tǒng)當(dāng)前時(shí)間和日期。用戶可以查看屏幕上顯示的系統(tǒng)當(dāng)前時(shí)間和日期。 l 用例的內(nèi)容描述使我們對(duì)系統(tǒng)的功能有了一個(gè)整體的用例的內(nèi)容描述使我們對(duì)系統(tǒng)的功能有了一個(gè)整體的認(rèn)知,可以知道有哪些參與者會(huì)與系統(tǒng)發(fā)生交互,每認(rèn)知,可以知道有哪些參與者會(huì)與系統(tǒng)發(fā)生交互,每一個(gè)參與者需要系統(tǒng)為它提供什么樣的服務(wù)。用例描一個(gè)參與者需要系統(tǒng)為它提供什么樣的服務(wù)。用例描述的是參與者與系統(tǒng)之間的對(duì)話,但是這個(gè)對(duì)話的細(xì)述的是參與者與系統(tǒng)之間的對(duì)話,但是這個(gè)對(duì)話的細(xì)節(jié)并沒(méi)有在用例圖中表述出來(lái),針對(duì)每一個(gè)用例可以節(jié)并沒(méi)有

9、在用例圖中表述出來(lái),針對(duì)每一個(gè)用例可以用事件流來(lái)描述其內(nèi)容細(xì)節(jié)。用事件流來(lái)描述其內(nèi)容細(xì)節(jié)。l 場(chǎng)景就是用來(lái)描述系統(tǒng)與外部參與者之間的交互行為。場(chǎng)景就是用來(lái)描述系統(tǒng)與外部參與者之間的交互行為。比如,我們必須要研究在系統(tǒng)回放聲音的時(shí)候,如果比如,我們必須要研究在系統(tǒng)回放聲音的時(shí)候,如果電池電量不足以及當(dāng)系統(tǒng)播放聲音時(shí)鬧鐘響起來(lái),這電池電量不足以及當(dāng)系統(tǒng)播放聲音時(shí)鬧鐘響起來(lái),這兩種情況系統(tǒng)將如何處理。播放聲音信息的用例場(chǎng)景兩種情況系統(tǒng)將如何處理。播放聲音信息的用例場(chǎng)景的事件流如表的事件流如表13.2所示。所示。l 當(dāng)播放聲音時(shí)鬧鈴響起來(lái)時(shí),系統(tǒng)將如何處理呢?設(shè)當(dāng)播放聲音時(shí)鬧鈴響起來(lái)時(shí),系統(tǒng)將如何處理

10、呢?設(shè)計(jì)時(shí)給鬧鐘響鈴一個(gè)較高的優(yōu)先級(jí),回放聲音時(shí)鬧鐘計(jì)時(shí)給鬧鐘響鈴一個(gè)較高的優(yōu)先級(jí),回放聲音時(shí)鬧鐘響鈴的場(chǎng)景的事件流描述如表響鈴的場(chǎng)景的事件流描述如表13.3所示。所示。l 系統(tǒng)可以關(guān)閉顯示屏幕的背景燈、麥克風(fēng)和揚(yáng)聲器。系統(tǒng)可以關(guān)閉顯示屏幕的背景燈、麥克風(fēng)和揚(yáng)聲器。這些部件在系統(tǒng)中都是要耗費(fèi)大量電池電量的。通過(guò)這些部件在系統(tǒng)中都是要耗費(fèi)大量電池電量的。通過(guò)關(guān)閉這些功能可以節(jié)省能源以及延長(zhǎng)電池的使用壽命。關(guān)閉這些功能可以節(jié)省能源以及延長(zhǎng)電池的使用壽命。當(dāng)電池電量不足的時(shí)候能夠向系統(tǒng)發(fā)出報(bào)警,系統(tǒng)能當(dāng)電池電量不足的時(shí)候能夠向系統(tǒng)發(fā)出報(bào)警,系統(tǒng)能關(guān)閉所有外設(shè)并切換到待機(jī)狀態(tài)。當(dāng)用戶給電池充電關(guān)閉所有

11、外設(shè)并切換到待機(jī)狀態(tài)。當(dāng)用戶給電池充電后,系統(tǒng)將離開(kāi)待機(jī)模式。當(dāng)系統(tǒng)處于待機(jī)模式時(shí),后,系統(tǒng)將離開(kāi)待機(jī)模式。當(dāng)系統(tǒng)處于待機(jī)模式時(shí),將所有信息保存在內(nèi)存中。當(dāng)系統(tǒng)進(jìn)入待機(jī)模式,被將所有信息保存在內(nèi)存中。當(dāng)系統(tǒng)進(jìn)入待機(jī)模式,被鬧鐘喚醒,然后接收到電量不足的警告后,重新進(jìn)入鬧鐘喚醒,然后接收到電量不足的警告后,重新進(jìn)入待機(jī)模式場(chǎng)景的事件流如表待機(jī)模式場(chǎng)景的事件流如表13.4所示。所示。l 前面介紹了系統(tǒng)的需求分析,下面將根據(jù)已有的需求,前面介紹了系統(tǒng)的需求分析,下面將根據(jù)已有的需求,給出問(wèn)題整體解決方案的類圖。圖中將包含系統(tǒng)需要給出問(wèn)題整體解決方案的類圖。圖中將包含系統(tǒng)需要的主要的類以及其相互關(guān)系。

12、的主要的類以及其相互關(guān)系。l 建立類圖的第一步是找出系統(tǒng)中的相關(guān)的對(duì)象。在本建立類圖的第一步是找出系統(tǒng)中的相關(guān)的對(duì)象。在本系統(tǒng)中涉及的對(duì)象描述如表系統(tǒng)中涉及的對(duì)象描述如表13.5所示。所示。l 使用者通過(guò)使用者通過(guò)Display類(顯示器)和類(顯示器)和keyboard(鍵盤(pán))(鍵盤(pán))與系統(tǒng)交互。這些都是被動(dòng)對(duì)象,因此系統(tǒng)提供了一與系統(tǒng)交互。這些都是被動(dòng)對(duì)象,因此系統(tǒng)提供了一個(gè)個(gè)UserInterface(用戶接口)類來(lái)管理上述的交互行為。(用戶接口)類來(lái)管理上述的交互行為。l UserInterface類依賴類依賴AudioContoller(音頻控制器)類(音頻控制器)類來(lái)完成其任務(wù)。來(lái)

13、完成其任務(wù)。Display+On()+Off()UserInterface+setUserModel()+Alarm!()Keyboard+getLastKey()Battery+getLevel()AlarmClock+getTime()+getDate()+getAlarm()+getAlarmState()+setAlarmstate()AudioController+playMessage(A: Message)+recordMessage()+deleteMessage(A: Message)+playAlarm()+stop()MessageMemory+newMessage()+

14、deleteMessage()+getMessage()1Microphone+getSample()Speaker+playSample()AudioInput+recordCompressedAudioBlock()+selectinputFilter()AudioOutput+playCompressedAudioBlock()+playAudioBlock(Block)+selectOutputFilter()Message+getAudioBlock()+appendAudioBlock()+getHeader()+setHeader()*圖 13.4 數(shù)字錄音機(jī)系統(tǒng)類Alarm C

15、lockUser Interface Message MemoryBatteryAudio圖圖13.5數(shù)字錄音機(jī)的子系統(tǒng)數(shù)字錄音機(jī)的子系統(tǒng)l 1.音頻子系統(tǒng)類圖(音頻子系統(tǒng)類圖(Audio Subsystem)l 每條信息是由一組音頻塊組成,而每個(gè)音頻塊又包含每條信息是由一組音頻塊組成,而每個(gè)音頻塊又包含了一組音頻樣本。音頻子系統(tǒng)總是記錄或是回放一個(gè)了一組音頻樣本。音頻子系統(tǒng)總是記錄或是回放一個(gè)完整的音頻塊。音頻的輸入類完整的音頻塊。音頻的輸入類AudioInput和輸出類和輸出類AudioOutput是實(shí)時(shí)工作的,是實(shí)時(shí)工作的,Timer類是硬件定時(shí)器的類是硬件定時(shí)器的封裝類,它為封裝類,它

16、為AudioInput和和AudioOutput類提供精確定類提供精確定時(shí)。時(shí)。Display+On()+Off()UserInterface+setUserModel()+Alarm!()Keyboard+getLastKey()Battery+getLevel()AlarmClock+getTime()+getDate()+getAlarm()+getAlarmState()+setAlarmstate()AudioController+playMessage(A: Message)+recordMessage()+deleteMessage(A: Message)+playAlarm()

17、+stop()MessageMemory+newMessage()+deleteMessage()+getMessage()1Microphone+getSample()Speaker+playSample()AudioInput+recordCompressedAudioBlock()+selectinputFilter()AudioOutput+playCompressedAudioBlock()+playAudioBlock(Block)+selectOutputFilter()Message+getAudioBlock()+appendAudioBlock()+getHeader()+

18、setHeader()*圖13.6音頻子系統(tǒng)類圖l 回放一條信息和記錄一條信息是一個(gè)比較復(fù)雜的過(guò)程,回放一條信息和記錄一條信息是一個(gè)比較復(fù)雜的過(guò)程,需要精確的定時(shí)以及和硬件進(jìn)行交互。因此在系統(tǒng)中需要精確的定時(shí)以及和硬件進(jìn)行交互。因此在系統(tǒng)中使用使用3個(gè)不同的類來(lái)播放信息。而且,這樣的設(shè)計(jì)能夠個(gè)不同的類來(lái)播放信息。而且,這樣的設(shè)計(jì)能夠很容易將系統(tǒng)擴(kuò)展成可以處理包含很容易將系統(tǒng)擴(kuò)展成可以處理包含2聲道音頻塊或使用聲道音頻塊或使用管道壓縮技術(shù)的立體聲信息。管道壓縮技術(shù)的立體聲信息。Message+getAudioBlock()+appendAudioBlock()+getHeader()+setHe

19、ader()AudioBlock+getSample()+addSample()is a sequence of10.*SoundSampleAudioController+playMessage(A: Message)+recordMessage()+deleteMessage(A: Message)+playAlarm()+stop()playsAudioOutput+playCompressedAudioBlock()+playAudioBlock(Block)+selectOutputFilter()Speaker+playSample()is a sequence of*0.*pla

20、ysplays圖13.7聲音信息的內(nèi)部表示 : UserInterface : AudioController : Message : AudioOutput : Speaker1 : playMessage()2 : getAudioBlock()3 : playCompressedAudioBlock()4 : playSample()5 : playSample()6 : playSample()7 : getAudioBlock()8 : playCompressedAudioBlock()9 : playSample()10 : playSample()11 : playSample

21、()圖圖13.8回放信息的順序圖回放信息的順序圖l 2.信息內(nèi)存子系統(tǒng)類圖(信息內(nèi)存子系統(tǒng)類圖(Message Memory Subsystem)l MessageMemory 類主要負(fù)責(zé)管理系統(tǒng)的存儲(chǔ)空間,它類主要負(fù)責(zé)管理系統(tǒng)的存儲(chǔ)空間,它維護(hù)了一個(gè)目錄來(lái)保存已有的信息,同時(shí)為新信息分維護(hù)了一個(gè)目錄來(lái)保存已有的信息,同時(shí)為新信息分配存儲(chǔ)空間。配存儲(chǔ)空間。l 用戶接口通過(guò)用戶接口通過(guò)MessageMemory 類取得已有的信息清單,類取得已有的信息清單,但不能對(duì)其進(jìn)行修改。只能通過(guò)但不能對(duì)其進(jìn)行修改。只能通過(guò)AudioController類來(lái)類來(lái)修改修改MessageMemory管理的內(nèi)容。用

22、戶可以通過(guò)管理的內(nèi)容。用戶可以通過(guò)MessageMemory類的類的deleteMessage刪除一條信息。實(shí)刪除一條信息。實(shí)際上際上deleteMessage將調(diào)用將調(diào)用AudioController類中的相關(guān)類中的相關(guān)方法對(duì)信息進(jìn)行刪除。刪除一條正在播放信息的情況方法對(duì)信息進(jìn)行刪除。刪除一條正在播放信息的情況如圖如圖13.9所示。所示。Display+On()+Off()UserInterface+setUserModel()+Alarm!()Keyboard+getLastKey()Battery+getLevel()AlarmClock+getTime()+getDate()+getA

23、larm()+getAlarmState()+setAlarmstate()AudioController+playMessage(A: Message)+recordMessage()+deleteMessage(A: Message)+playAlarm()+stop()MessageMemory+newMessage()+deleteMessage()+getMessage()1Microphone+getSample()Speaker+playSample()AudioInput+recordCompressedAudioBlock()+selectinputFilter()Audio

24、Output+playCompressedAudioBlock()+playAudioBlock(Block)+selectOutputFilter()Message+getAudioBlock()+appendAudioBlock()+getHeader()+setHeader()*圖圖 13.9Message memory類圖類圖 : UserInterface : AudioController : MessageMemoryA : Message : AudioOutput1 : playMessage(A)2 : getMessage()3 : getAudioBlock()4 :

25、playAudioBlock(Block)5 : deleteMessage(A)6 : stop()7 : deleteMessage()圖圖13.10刪除一條正在播放信息的情況刪除一條正在播放信息的情況l 3.Alarm Clock子系統(tǒng)類圖子系統(tǒng)類圖 (Alarm Clock Subsystem)l AlarmClock類保存當(dāng)前日期、時(shí)間和鬧鐘定時(shí)的設(shè)定。類保存當(dāng)前日期、時(shí)間和鬧鐘定時(shí)的設(shè)定。l 4.User Interface子系統(tǒng)類圖子系統(tǒng)類圖 (.User Interface Subsystem) l 1.音頻控制器(音頻控制器(AudioController)l 一個(gè)音頻控制器

26、對(duì)象負(fù)責(zé)控制聲道。聲道是用來(lái)錄制一個(gè)音頻控制器對(duì)象負(fù)責(zé)控制聲道。聲道是用來(lái)錄制或是回放聲音信息以及播放鬧鈴的聲音。或是回放聲音信息以及播放鬧鈴的聲音。 l 2.音頻輸入音頻輸入/AudioInputl 一個(gè)一個(gè)AudioInput對(duì)象控制一個(gè)聲道。在對(duì)象控制一個(gè)聲道。在DMA通道的幫通道的幫助下,通過(guò)麥克風(fēng)記錄一個(gè)音頻塊并將其進(jìn)行壓縮。助下,通過(guò)麥克風(fēng)記錄一個(gè)音頻塊并將其進(jìn)行壓縮。 l 3.音頻輸出音頻輸出/AudioOutput l 一個(gè)一個(gè)AudioOutput對(duì)象控制一個(gè)聲道,能夠通過(guò)揚(yáng)聲器對(duì)象控制一個(gè)聲道,能夠通過(guò)揚(yáng)聲器播放一個(gè)音頻塊。播放一個(gè)音頻塊。 l 4.麥克風(fēng)麥克風(fēng)/Micro

27、phonel Microphone對(duì)象是硬件麥克風(fēng)的包裝類,它具有一個(gè)對(duì)象是硬件麥克風(fēng)的包裝類,它具有一個(gè)可開(kāi)關(guān)的輸入放大器,當(dāng)麥克風(fēng)打開(kāi)的時(shí)候,它能夠可開(kāi)關(guān)的輸入放大器,當(dāng)麥克風(fēng)打開(kāi)的時(shí)候,它能夠周期性的捕獲聲音采樣。周期性的捕獲聲音采樣。l 5.揚(yáng)聲器揚(yáng)聲器/Speaker l Speaker對(duì)象是揚(yáng)聲器的包裝類,它具有一個(gè)可開(kāi)關(guān)的對(duì)象是揚(yáng)聲器的包裝類,它具有一個(gè)可開(kāi)關(guān)的輸出放大器。輸出放大器。 l 6.時(shí)鐘時(shí)鐘/Timer l 一個(gè)硬件時(shí)鐘負(fù)責(zé)測(cè)量時(shí)間,一個(gè)硬件時(shí)鐘負(fù)責(zé)測(cè)量時(shí)間,Timer對(duì)象是時(shí)鐘的包裝對(duì)象是時(shí)鐘的包裝類。類。 l 數(shù)碼錄音機(jī)系統(tǒng)涉及很多的硬件資源,下面將對(duì)系統(tǒng)數(shù)碼錄音

28、機(jī)系統(tǒng)涉及很多的硬件資源,下面將對(duì)系統(tǒng)中的所有硬件資源進(jìn)行描述。中的所有硬件資源進(jìn)行描述。l 主處理器采用主處理器采用Hitachi SH7032 16MHz工作主頻,帶工作主頻,帶8Kb內(nèi)置內(nèi)置RAM,內(nèi)核采用常規(guī)的,內(nèi)核采用常規(guī)的RISC整數(shù)管道技術(shù),整數(shù)管道技術(shù),負(fù)責(zé)運(yùn)行機(jī)器指令。系統(tǒng)內(nèi)置外設(shè)包括一個(gè)模數(shù)轉(zhuǎn)換負(fù)責(zé)運(yùn)行機(jī)器指令。系統(tǒng)內(nèi)置外設(shè)包括一個(gè)模數(shù)轉(zhuǎn)換器、一些定時(shí)器和計(jì)數(shù)器、器、一些定時(shí)器和計(jì)數(shù)器、DMA通道和一個(gè)監(jiān)控器。通道和一個(gè)監(jiān)控器。 l 系統(tǒng)對(duì)軟件沒(méi)有安全和可靠性方面的要求,也不支持系統(tǒng)對(duì)軟件沒(méi)有安全和可靠性方面的要求,也不支持硬件容錯(cuò)?;蛟S會(huì)出現(xiàn)在設(shè)備報(bào)廢之前,由于用戶使硬件

29、容錯(cuò)?;蛟S會(huì)出現(xiàn)在設(shè)備報(bào)廢之前,由于用戶使用不慎,如進(jìn)水或掉到地上而造成某些部件損壞的情用不慎,如進(jìn)水或掉到地上而造成某些部件損壞的情況。況。l 監(jiān)控器負(fù)責(zé)在發(fā)生障礙的情況下重新啟動(dòng)系統(tǒng)。監(jiān)控監(jiān)控器負(fù)責(zé)在發(fā)生障礙的情況下重新啟動(dòng)系統(tǒng)。監(jiān)控器重新啟動(dòng)系統(tǒng)會(huì)造成內(nèi)存中內(nèi)容的丟失。因?yàn)槭欠馄髦匦聠?dòng)系統(tǒng)會(huì)造成內(nèi)存中內(nèi)容的丟失。因?yàn)槭欠忾]式嵌入系統(tǒng),所以數(shù)碼錄音機(jī)不具備與其它系統(tǒng)進(jìn)閉式嵌入系統(tǒng),所以數(shù)碼錄音機(jī)不具備與其它系統(tǒng)進(jìn)行通信的功能。同時(shí),也沒(méi)必要提供僅供測(cè)試和診斷行通信的功能。同時(shí),也沒(méi)必要提供僅供測(cè)試和診斷使用的通信功能,因?yàn)橄到y(tǒng)很簡(jiǎn)單,通過(guò)屏幕所顯示使用的通信功能,因?yàn)橄到y(tǒng)很簡(jiǎn)單,通過(guò)屏幕

30、所顯示的提示進(jìn)行測(cè)試即可。事實(shí)上,本系統(tǒng)在設(shè)計(jì)上就是的提示進(jìn)行測(cè)試即可。事實(shí)上,本系統(tǒng)在設(shè)計(jì)上就是不能測(cè)試和維修的。處理器通過(guò)內(nèi)存地址空間訪問(wèn)外不能測(cè)試和維修的。處理器通過(guò)內(nèi)存地址空間訪問(wèn)外設(shè),它們被緊密的結(jié)合在一起,根本就不需要任何特設(shè),它們被緊密的結(jié)合在一起,根本就不需要任何特殊的通信機(jī)制。殊的通信機(jī)制。l 并行模式必須明確軟件中所使用的線程以及線程之間并行模式必須明確軟件中所使用的線程以及線程之間的通信機(jī)制。為了使設(shè)計(jì)盡可能簡(jiǎn)單,我們決定在當(dāng)?shù)耐ㄐ艡C(jī)制。為了使設(shè)計(jì)盡可能簡(jiǎn)單,我們決定在當(dāng)前的設(shè)計(jì)中不采用實(shí)時(shí)操作系統(tǒng)而在將來(lái)的設(shè)計(jì)中采前的設(shè)計(jì)中不采用實(shí)時(shí)操作系統(tǒng)而在將來(lái)的設(shè)計(jì)中采用。在當(dāng)前

31、設(shè)計(jì)中,有兩個(gè)可執(zhí)行線程。用戶線程是用。在當(dāng)前設(shè)計(jì)中,有兩個(gè)可執(zhí)行線程。用戶線程是一個(gè)交互線程,用來(lái)管理使用者與系統(tǒng)之間通過(guò)按鍵一個(gè)交互線程,用來(lái)管理使用者與系統(tǒng)之間通過(guò)按鍵和屏幕進(jìn)行的交互行為。音頻系統(tǒng)線負(fù)責(zé)調(diào)度響應(yīng)對(duì)和屏幕進(jìn)行的交互行為。音頻系統(tǒng)線負(fù)責(zé)調(diào)度響應(yīng)對(duì)象和實(shí)時(shí)對(duì)象。象和實(shí)時(shí)對(duì)象。 l 下面將描述系統(tǒng)中不同的軟件對(duì)象是怎樣通過(guò)協(xié)作而下面將描述系統(tǒng)中不同的軟件對(duì)象是怎樣通過(guò)協(xié)作而完成各自的功能,即對(duì)象之間是怎樣交換消息的。完成各自的功能,即對(duì)象之間是怎樣交換消息的。l 我們可以將硬件視為一個(gè)參與者。硬件可以通過(guò)中斷我們可以將硬件視為一個(gè)參與者。硬件可以通過(guò)中斷請(qǐng)求發(fā)送給運(yùn)行程序一個(gè)事

32、件。當(dāng)一個(gè)硬件設(shè)備需要請(qǐng)求發(fā)送給運(yùn)行程序一個(gè)事件。當(dāng)一個(gè)硬件設(shè)備需要給程序發(fā)送事件的時(shí)候便會(huì)產(chǎn)生一個(gè)中斷請(qǐng)求,在某給程序發(fā)送事件的時(shí)候便會(huì)產(chǎn)生一個(gè)中斷請(qǐng)求,在某個(gè)時(shí)間點(diǎn)處理器會(huì)接受中斷請(qǐng)求,并停止當(dāng)前正在執(zhí)個(gè)時(shí)間點(diǎn)處理器會(huì)接受中斷請(qǐng)求,并停止當(dāng)前正在執(zhí)行的程序流程,然后調(diào)用中斷處理過(guò)程。中斷處理過(guò)行的程序流程,然后調(diào)用中斷處理過(guò)程。中斷處理過(guò)程處理硬件請(qǐng)求后必須盡快返回,繼續(xù)進(jìn)行。由于中程處理硬件請(qǐng)求后必須盡快返回,繼續(xù)進(jìn)行。由于中斷服務(wù)程序不能是一個(gè)對(duì)象的方法,所以,設(shè)計(jì)者必?cái)喾?wù)程序不能是一個(gè)對(duì)象的方法,所以,設(shè)計(jì)者必須建立一個(gè)將硬件中斷請(qǐng)求轉(zhuǎn)換為對(duì)象信息的機(jī)制。須建立一個(gè)將硬件中斷請(qǐng)求轉(zhuǎn)

33、換為對(duì)象信息的機(jī)制。本系統(tǒng)將這種機(jī)制封裝在本系統(tǒng)將這種機(jī)制封裝在ISR抽象類中。抽象類中。ISR類的子類類的子類就可以像實(shí)現(xiàn)普通方法那樣實(shí)現(xiàn)中斷服務(wù)程序。就可以像實(shí)現(xiàn)普通方法那樣實(shí)現(xiàn)中斷服務(wù)程序。l 鍵盤(pán)、電量表、鬧鐘、音頻控制器與用戶接口之間的鍵盤(pán)、電量表、鬧鐘、音頻控制器與用戶接口之間的協(xié)作遵循條件反應(yīng)模式。反應(yīng)對(duì)象只向事件代理發(fā)送協(xié)作遵循條件反應(yīng)模式。反應(yīng)對(duì)象只向事件代理發(fā)送事件,并不需要等待用戶接口讀取事件。用戶接口定事件,并不需要等待用戶接口讀取事件。用戶接口定期檢查事件代理中是否有新事件。一旦發(fā)現(xiàn)有新事件期檢查事件代理中是否有新事件。一旦發(fā)現(xiàn)有新事件則委托屏幕和控制器產(chǎn)生響應(yīng)。則委

34、托屏幕和控制器產(chǎn)生響應(yīng)。 l Scheduler對(duì)象為依賴時(shí)間信息的類提供精確定時(shí)和時(shí)對(duì)象為依賴時(shí)間信息的類提供精確定時(shí)和時(shí)序安排。序安排。AlarmClock從從Scheduler類訂閱信息。每秒鐘類訂閱信息。每秒鐘Scheduler都會(huì)通報(bào)都會(huì)通報(bào)AlarmClock類有一秒鐘時(shí)間已經(jīng)結(jié)類有一秒鐘時(shí)間已經(jīng)結(jié)束。束。l Keyboard對(duì)象需要定期取得物理鍵盤(pán)所有按鍵的狀態(tài)。對(duì)象需要定期取得物理鍵盤(pán)所有按鍵的狀態(tài)。如果每秒鐘檢測(cè)如果每秒鐘檢測(cè)10次鍵盤(pán)輸入。那么用戶按下并放開(kāi)次鍵盤(pán)輸入。那么用戶按下并放開(kāi)一個(gè)按鍵的時(shí)間小于一個(gè)按鍵的時(shí)間小于1/20秒,則該按鍵輸入會(huì)丟失。秒,則該按鍵輸入會(huì)丟

35、失。l BatteryLevelMeter 類每類每5秒鐘測(cè)量一次電池的電量。秒鐘測(cè)量一次電池的電量。l Scheduler負(fù)責(zé)周期性的激活負(fù)責(zé)周期性的激活Keyboard 和和BatterylevelMeter類。圖類。圖13.22顯示了顯示了Scheduler是如何是如何周期性的喚醒系統(tǒng)的反應(yīng)類的。周期性的喚醒系統(tǒng)的反應(yīng)類的。 l MessageMemory是是Message對(duì)象的容器。這種協(xié)作關(guān)系對(duì)象的容器。這種協(xié)作關(guān)系遵循遵循Container模式。模式。AudioController在需要訪問(wèn)在需要訪問(wèn)Message對(duì)象的時(shí)候會(huì)用到對(duì)象的時(shí)候會(huì)用到MessageMemory類。類。l

36、 AlarmClock為為ClockView提供一個(gè)模型用來(lái)在顯示屏上提供一個(gè)模型用來(lái)在顯示屏上顯示時(shí)間。顯示時(shí)間。UserMode對(duì)象控制系統(tǒng)與用戶之間的交互對(duì)象控制系統(tǒng)與用戶之間的交互行為。由于行為。由于AlarmClock是反應(yīng)對(duì)象,是反應(yīng)對(duì)象,ClockView是交互是交互對(duì)象。它們之間的協(xié)作將遵循對(duì)象。它們之間的協(xié)作將遵循Reactive Subject 模式。模式。Keyboard對(duì)象向?qū)ο笙騏serInterface類通告用戶按鍵事件也類通告用戶按鍵事件也遵循該模式。圖遵循該模式。圖13.23顯示了當(dāng)前用戶模式為顯示了當(dāng)前用戶模式為SettingTimeUserMode.時(shí),用戶

37、按下時(shí),用戶按下up 鍵后所產(chǎn)生鍵后所產(chǎn)生一系列消息的順序過(guò)程。一系列消息的順序過(guò)程。l UserInterface 和和AudioController 之間的協(xié)作采用了之間的協(xié)作采用了Reactive Subject 模式。模式。AudioController, Message,AudioInput 和和AudioOutput 之間的協(xié)作采用之間的協(xié)作采用Observer模式。圖模式。圖13.24顯示了播放一條聲音信息所的消息傳遞顯示了播放一條聲音信息所的消息傳遞順序。為了簡(jiǎn)化,聲音信息用一個(gè)音頻塊表示。這種順序。為了簡(jiǎn)化,聲音信息用一個(gè)音頻塊表示。這種合作有點(diǎn)復(fù)雜但支持回放和錄制兩個(gè)不同的

38、信息。同合作有點(diǎn)復(fù)雜但支持回放和錄制兩個(gè)不同的信息。同時(shí),還支持錄制和回放立體聲聲音,但每條信息將有時(shí),還支持錄制和回放立體聲聲音,但每條信息將有兩個(gè)音頻塊流組成。兩個(gè)音頻塊流組成。l 本部分主要包括:硬件的對(duì)象建模本部分主要包括:硬件的對(duì)象建模 、音頻壓縮算法、音頻壓縮算法 、使用直接內(nèi)存訪問(wèn)通道使用直接內(nèi)存訪問(wèn)通道 、硬件資源的分配、硬件資源的分配 和內(nèi)存分配。和內(nèi)存分配。 l 一個(gè)硬件封裝類是對(duì)一個(gè)硬件設(shè)備的軟件對(duì)象化描述,一個(gè)硬件封裝類是對(duì)一個(gè)硬件設(shè)備的軟件對(duì)象化描述,是應(yīng)用程序與硬件之間的接口。硬件封裝類的構(gòu)造函是應(yīng)用程序與硬件之間的接口。硬件封裝類的構(gòu)造函數(shù)將初始化硬件設(shè)備,然后該

39、類所對(duì)應(yīng)的硬件就可以數(shù)將初始化硬件設(shè)備,然后該類所對(duì)應(yīng)的硬件就可以使用了??梢酝ㄟ^(guò)封裝類的方法對(duì)硬件進(jìn)行配置、啟使用了??梢酝ㄟ^(guò)封裝類的方法對(duì)硬件進(jìn)行配置、啟動(dòng)或停止等操作。由于硬件的狀態(tài)將由封裝類的狀態(tài)動(dòng)或停止等操作。由于硬件的狀態(tài)將由封裝類的狀態(tài)表示,通常情況下封裝類都不會(huì)有太多的屬性。表示,通常情況下封裝類都不會(huì)有太多的屬性。l 詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)硬件封裝類需要很準(zhǔn)確的硬件方面的詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)硬件封裝類需要很準(zhǔn)確的硬件方面的知識(shí)。本系統(tǒng)中的硬件封裝類包括知識(shí)。本系統(tǒng)中的硬件封裝類包括speaker、microphone、timer和和keyboard對(duì)象。對(duì)象。l 一個(gè)很明確的需求就是,必須

40、以一個(gè)很明確的需求就是,必須以8位采樣樣本,位采樣樣本,6Khz頻頻率錄制聲音。這表示在錄制過(guò)程中,每秒鐘需要至少率錄制聲音。這表示在錄制過(guò)程中,每秒鐘需要至少6KB內(nèi)存??梢酝ㄟ^(guò)對(duì)輸入信號(hào)的壓縮處理來(lái)減少內(nèi)內(nèi)存??梢酝ㄟ^(guò)對(duì)輸入信號(hào)的壓縮處理來(lái)減少內(nèi)存的需要量。最簡(jiǎn)單的音頻壓縮是適應(yīng)性存的需要量。最簡(jiǎn)單的音頻壓縮是適應(yīng)性Delta脈沖編脈沖編碼調(diào)制技術(shù)(碼調(diào)制技術(shù)(Adaptive Delta Pulse Code ModulationADPCM) 。ADPCM很容易實(shí)現(xiàn)并且很容易實(shí)現(xiàn)并且CPU占用率很占用率很低。低。l 在錄制聲音信息的時(shí)候,一個(gè)在錄制聲音信息的時(shí)候,一個(gè)AudioInput

41、對(duì)象每秒鐘對(duì)象每秒鐘需要從麥克風(fēng)獲得需要從麥克風(fēng)獲得6000個(gè)樣本。有多個(gè)途徑可以完成個(gè)樣本。有多個(gè)途徑可以完成這個(gè)任務(wù)。這個(gè)任務(wù)。 : AudioController : AudioInput : Microphone : TimerA : AudioBlock : D/A Converter : DMAC : Input Buffer1 : recordAudioBlock()7 : Notify()2 : Start()5 : isr()4 : Write Samples to Buffer()6 : compress and store samples()3 : Wake Up DMA

42、C every 6Khz()Samples are taken and converted constantly圖圖13.25記錄一個(gè)音頻塊記錄一個(gè)音頻塊 : AudioController : D/A Converter : DMAC : Output Buffer : Timer : Speaker : AudioBlock : AudioOutputD/A Converter holds a sample indefitely1 : playAudioBlock()2 : Expand data into buffer()3 : Start()4 : Wake up every period()5 : read a sample every per

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論