基于systemC和UML的語(yǔ)音備忘器設(shè)計(jì)_第1頁(yè)
基于systemC和UML的語(yǔ)音備忘器設(shè)計(jì)_第2頁(yè)
基于systemC和UML的語(yǔ)音備忘器設(shè)計(jì)_第3頁(yè)
基于systemC和UML的語(yǔ)音備忘器設(shè)計(jì)_第4頁(yè)
基于systemC和UML的語(yǔ)音備忘器設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 基于SystemC的語(yǔ)音備忘器設(shè)計(jì)摘要:隨著VLSI的集成度越來(lái)越高,設(shè)計(jì)也越趨復(fù)雜。傳統(tǒng)的設(shè)計(jì)方法如原理圖輸入、HDL語(yǔ)言描述在進(jìn)行復(fù)雜系統(tǒng)設(shè)計(jì)時(shí),設(shè)計(jì)效率往往比較低。特別是在算法由軟件轉(zhuǎn)化為硬件的環(huán)節(jié)上,傳統(tǒng)的設(shè)計(jì)方法的效率不是很高,設(shè)計(jì)者往往要耗費(fèi)大量的時(shí)間和精力手工進(jìn)行算法的轉(zhuǎn)化。為解決這些問(wèn)題,一種新的系統(tǒng)級(jí)的設(shè)計(jì)方法SYSTEM C 被提出。SYSTEM C是一種方法,也是一個(gè)C庫(kù),用SYSTEM C可以很方便地實(shí)現(xiàn)一個(gè)軟件算法的硬件實(shí)現(xiàn),以及完成一個(gè)系統(tǒng)級(jí)的設(shè)計(jì)。關(guān)鍵詞:SystemC、語(yǔ)音備忘器、UMLSystemC的開(kāi)發(fā)平臺(tái)概述隨著VLSI的集成度越來(lái)越高,設(shè)計(jì)也越趨復(fù)雜。

2、一個(gè)系統(tǒng)的設(shè)計(jì)往往不僅需要硬件設(shè)計(jì)人員的參與,也需要有軟件設(shè)計(jì)人員的參與。軟件設(shè)計(jì)人員與硬件設(shè)計(jì)人員之間的相互協(xié)調(diào)就變的格外重要,它直接關(guān)系到工作的效率以及整個(gè)系統(tǒng)設(shè)計(jì)的成敗。傳統(tǒng)的設(shè)計(jì)方法沒(méi)有使軟件設(shè)計(jì)工作與硬件設(shè)計(jì)工作協(xié)調(diào)一致,而是將兩者的工作割裂開(kāi)來(lái)。軟件算法的設(shè)計(jì)人員在系統(tǒng)設(shè)計(jì)后期不能為硬件設(shè)計(jì)人員的設(shè)計(jì)提供任何的幫助。同時(shí)現(xiàn)在有些大規(guī)模集成電路設(shè)計(jì)中往往帶有DSP Core或其它CPU Core。這些都使得單純地用原理圖或硬件描述語(yǔ)言來(lái)設(shè)計(jì)、仿真這么復(fù)雜的系統(tǒng)變得十分困難。System C就是在這些矛盾的背景下提出的。它的出現(xiàn)為復(fù)雜的系統(tǒng)設(shè)計(jì)提供了一條有效的解決途徑。 System

3、C 是由 Synospy Inc. 提出的,目前最新的版本為V2.0。它提出的目的就是以一種系統(tǒng)設(shè)計(jì)的思想進(jìn)行系統(tǒng)設(shè)計(jì)。它將軟件算法與硬件實(shí)現(xiàn)很好的結(jié)合在一起,提高了整個(gè)系統(tǒng)設(shè)計(jì)的效率和正確性。 System C 是一個(gè)C+ 庫(kù),也是一種使設(shè)計(jì)者可以有效地設(shè)計(jì)出一個(gè)軟件算法的準(zhǔn)確循環(huán)模型,硬件結(jié)構(gòu)以及系統(tǒng)級(jí)設(shè)計(jì)的方法。設(shè)計(jì)者可以用System C開(kāi)發(fā)工具或在標(biāo)準(zhǔn)C+開(kāi)發(fā)工具中加如System C庫(kù)制作系統(tǒng)級(jí)模型,快速地仿真和優(yōu)化設(shè)計(jì),以及研究不同的算法,并且為硬件和軟件設(shè)計(jì)人員提供一個(gè)設(shè)計(jì)系統(tǒng)的可執(zhí)行規(guī)范。可執(zhí)行規(guī)范本質(zhì)上是一個(gè)C+程序,它顯示了和設(shè)計(jì)系統(tǒng)同樣的性能,為軟件設(shè)計(jì)人員和硬件設(shè)計(jì)人

4、員提供了一個(gè)設(shè)計(jì)的標(biāo)準(zhǔn)。 System C 庫(kù)提供了創(chuàng)造系統(tǒng)結(jié)構(gòu)模型的必須結(jié)構(gòu),包括那些在C+沒(méi)有的功能如硬件時(shí)序,并行和觸發(fā)功能。C+這種面對(duì)象語(yǔ)言提供了通過(guò)增加類(lèi)來(lái)擴(kuò)展語(yǔ)言的能力,而這種能力是C語(yǔ)言所不具備的。因此,System C使用大家熟悉的C+語(yǔ)言和開(kāi)發(fā)工具。 SYSTEM C的特點(diǎn)System C 支持對(duì)硬件和軟件的聯(lián)合設(shè)計(jì),支持描述一個(gè)既包含硬件部分也包含軟件部分的復(fù)雜系統(tǒng)結(jié)構(gòu)。它也支持對(duì)接口的描述,有以下幾個(gè)顯著的特點(diǎn): 1System C可以為軟件設(shè)計(jì)人員和硬件設(shè)計(jì)人員提供一個(gè)系統(tǒng)的可執(zhí)行規(guī)范。設(shè)計(jì)人員使用該可執(zhí)行規(guī)范可以避免設(shè)計(jì)中矛盾和錯(cuò)誤的產(chǎn)生,并確保設(shè)計(jì)的完備性。這是應(yīng)

5、為在設(shè)計(jì)可執(zhí)行規(guī)范時(shí),系統(tǒng)設(shè)計(jì)者必須設(shè)計(jì)出也一個(gè)和系統(tǒng)具有同樣工作狀態(tài)的程序,通過(guò)這個(gè)程序可以發(fā)掘出潛在的矛盾和錯(cuò)誤,并將這些矛盾和錯(cuò)誤消除在整個(gè)設(shè)計(jì)的開(kāi)始階段,而不是在整個(gè)系統(tǒng)進(jìn)行調(diào)試階段才發(fā)現(xiàn)和解決這些矛盾和錯(cuò)誤。這個(gè)程序還可以幫助設(shè)計(jì)者確保整個(gè)系統(tǒng)設(shè)計(jì)的完備性。 2設(shè)計(jì)人員利用這個(gè)可執(zhí)行的系統(tǒng)規(guī)范,還可以發(fā)現(xiàn)設(shè)計(jì)中概念模糊的地方。無(wú)論什么時(shí)候,設(shè)計(jì)人員對(duì)設(shè)計(jì)產(chǎn)生疑惑,就可以運(yùn)行這個(gè)可執(zhí)行程序以明確在這個(gè)問(wèn)題上系統(tǒng)設(shè)計(jì)人員是如何處理的,從而確保系統(tǒng)設(shè)計(jì)的正確性。而現(xiàn)在的設(shè)計(jì)方法不能使設(shè)計(jì)人員方便迅速的解決這些疑惑。甚至這些疑惑是系統(tǒng)設(shè)計(jì)人員也不曾考慮過(guò),這可能導(dǎo)致系統(tǒng)要重新進(jìn)行設(shè)計(jì)。 3在

6、系統(tǒng)設(shè)計(jì)被實(shí)現(xiàn)以前,設(shè)計(jì)人員還可以通過(guò)用System C設(shè)計(jì)的系統(tǒng)可執(zhí)行規(guī)范來(lái)驗(yàn)證整個(gè)系統(tǒng)設(shè)計(jì)。這樣可以避免由于在系統(tǒng)設(shè)計(jì)上的失誤,而使系統(tǒng)實(shí)現(xiàn)不能達(dá)到要求?,F(xiàn)在的設(shè)計(jì)方法不能提供這樣的手段在設(shè)計(jì)完成前進(jìn)行系統(tǒng)的驗(yàn)證,對(duì)系統(tǒng)的驗(yàn)證必須是在系統(tǒng)設(shè)計(jì)完后。即使在完成前進(jìn)行驗(yàn)證,由于不能完全模擬實(shí)際系統(tǒng)的工作,其結(jié)果也只能作為一種參考。 4System C設(shè)計(jì)的可執(zhí)行規(guī)范所使用的TESTBENCH文件可以通過(guò)小范圍的修改或直接用在實(shí)現(xiàn)后的系統(tǒng)仿真。這就為設(shè)計(jì)實(shí)現(xiàn)人員帶來(lái)很大的好處,他們不必花很多的時(shí)間去編寫(xiě)用來(lái)驗(yàn)證實(shí)現(xiàn)后系統(tǒng)正確性的TESTBENCH文件。而現(xiàn)在采用的設(shè)計(jì)方法所使用的TESTBENC

7、H文件卻沒(méi)有提供這樣的便利條件。這是應(yīng)為軟件設(shè)計(jì)人員和硬件設(shè)計(jì)人員兩者的設(shè)計(jì)思想和設(shè)計(jì)手段都是不同的,一個(gè)軟件設(shè)計(jì)人員所使用的TESTBENCH文件并不能被硬件設(shè)計(jì)人員使用,甚至不能給硬件設(shè)計(jì)人員任何幫助。SYSTEM C設(shè)計(jì)與傳統(tǒng)設(shè)計(jì)比較現(xiàn)在的系統(tǒng)設(shè)計(jì)一般是由系統(tǒng)工程師用C語(yǔ)言或C+語(yǔ)言設(shè)計(jì)出一個(gè)系統(tǒng)模型,并在系統(tǒng)級(jí)層次上檢驗(yàn)概念和算法。當(dāng)這些概念和算法被檢驗(yàn)為正確無(wú)誤時(shí),C/C+模塊被分解為功能相對(duì)獨(dú)立的子模塊。這些相對(duì)對(duì)立的子模塊由硬件設(shè)計(jì)人員手工地轉(zhuǎn)化為VHDL或Verilog語(yǔ)言用以硬件實(shí)現(xiàn)。這一個(gè)設(shè)計(jì)流程被顯示在圖1中。圖1 傳統(tǒng)設(shè)計(jì)流程從圖1所示的設(shè)計(jì)流程中我們可以發(fā)現(xiàn)以下幾個(gè)問(wèn)

8、題: 1、人工將CC+程序轉(zhuǎn)換為HDL程序容易產(chǎn)生錯(cuò)誤。在現(xiàn)在的這種設(shè)計(jì)方法中,系統(tǒng)工程師先按期望的設(shè)計(jì)要求設(shè)計(jì)出一個(gè)C模塊,并驗(yàn)證這個(gè)模塊使其達(dá)到期望的設(shè)計(jì)要求。然后系統(tǒng)工程師所設(shè)計(jì)的C模塊被硬件設(shè)計(jì)人員手工轉(zhuǎn)換為HDL模塊。這個(gè)轉(zhuǎn)換過(guò)程不僅容易產(chǎn)生錯(cuò)誤,而且還很浪費(fèi)時(shí)間。這是因?yàn)镃C+語(yǔ)言和HDL語(yǔ)言有著顯著的區(qū)別。首先,HDL的處理方式比CC+的復(fù)雜。CC+程序采用順序執(zhí)行的處理方式,而HDL程序中既有順序執(zhí)行也有并行執(zhí)行的處理方式。要將CC+程序轉(zhuǎn)化為HDL程序必然要引入一些控制信號(hào),由這些信號(hào)控制HDL程序的運(yùn)行,但這樣也容易產(chǎn)生錯(cuò)誤。其次,CC+語(yǔ)言不涉及到時(shí)序關(guān)系。由于CC+語(yǔ)言

9、不支持對(duì)時(shí)序的描述,系統(tǒng)工程師設(shè)計(jì)的系統(tǒng)模型只是驗(yàn)證了概念和算法,而只能對(duì)時(shí)間耗費(fèi)上有一個(gè)大概的估計(jì)。這就使得硬件實(shí)現(xiàn)時(shí),為滿(mǎn)足系統(tǒng)在時(shí)間上的要求,硬件設(shè)計(jì)人員必須對(duì)軟件算法進(jìn)行一定的改造或優(yōu)化。而這些改造或優(yōu)化也有可能引入各種錯(cuò)誤。 2、系統(tǒng)模塊和HDL模塊間缺乏聯(lián)系。當(dāng)系統(tǒng)模塊被轉(zhuǎn)換為HDL模塊后,HDL模塊成為整個(gè)系統(tǒng)設(shè)計(jì)的焦點(diǎn)。為適應(yīng)硬件實(shí)現(xiàn)的特點(diǎn),硬件設(shè)計(jì)人員會(huì)更改系統(tǒng)設(shè)計(jì)人員的設(shè)計(jì),但這種更改只是在HDL模塊中進(jìn)行,而系統(tǒng)設(shè)計(jì)人員設(shè)計(jì)的C模塊并沒(méi)有因此更改。這就使得系統(tǒng)工程師設(shè)計(jì)的C模塊和當(dāng)前硬件設(shè)計(jì)人員設(shè)計(jì)的HDL模塊缺乏必要的聯(lián)系。當(dāng)硬件設(shè)計(jì)人員遇到概念模糊或理解錯(cuò)誤的地方時(shí),

10、往往不能馬上從C模塊中得到明確的解答。此時(shí),C模塊的設(shè)計(jì)人員也不一定能為HDL設(shè)計(jì)人員提供有效的幫助。 3、多系統(tǒng)測(cè)試。不但C模塊要轉(zhuǎn)換為HDL模塊,對(duì)C模塊的測(cè)試也要人工轉(zhuǎn)換為在HDL環(huán)境下的測(cè)試。這種轉(zhuǎn)換也很復(fù)雜,而且浪費(fèi)時(shí)間。HDL設(shè)計(jì)人員是根據(jù)他所設(shè)計(jì)的HDL模塊和系統(tǒng)要求來(lái)設(shè)計(jì)TESTBENCH,這使得硬件設(shè)計(jì)人員不可能利用軟件設(shè)計(jì)人員所使用的測(cè)試文件。同時(shí),HDL人員要設(shè)計(jì)出一個(gè)好的TESTBENCH也需要比較長(zhǎng)的時(shí)間。為解決在現(xiàn)在設(shè)計(jì)流程中所帶來(lái)的種種弊端,一種全新的設(shè)計(jì)流程被提出,這就是System C設(shè)計(jì)流程。它能很好的解決上面所提到的各種設(shè)計(jì)弊端,大大提高設(shè)計(jì)效率。圖2是S

11、ystem C的硬件設(shè)計(jì)流程。圖2 System C設(shè)計(jì)流程這種設(shè)計(jì)方法與現(xiàn)在常用的設(shè)計(jì)方法相比有很多優(yōu)點(diǎn): 1、精煉的設(shè)計(jì)方法。使用System C設(shè)計(jì)系統(tǒng),系統(tǒng)設(shè)計(jì)人員不必花費(fèi)很大的精力將整個(gè)系統(tǒng)設(shè)計(jì)由C語(yǔ)言描述轉(zhuǎn)換為HDL描述。系統(tǒng)設(shè)計(jì)人員可以通過(guò)在C模塊中很小的區(qū)域范圍內(nèi)加入必要的硬件和時(shí)序結(jié)構(gòu)描述,從而將C模塊方便準(zhǔn)確地轉(zhuǎn)化為一個(gè)有效的硬件設(shè)計(jì),而避免將另行設(shè)計(jì)一個(gè)硬件模塊。利用System C設(shè)計(jì)方法,設(shè)計(jì)人員可以很輕松地實(shí)現(xiàn)一個(gè)設(shè)計(jì)的更改,或在優(yōu)化算法時(shí)檢測(cè)出一些設(shè)計(jì)錯(cuò)誤并及時(shí)修改。 2、單一語(yǔ)言書(shū)寫(xiě)。使用System C設(shè)計(jì)系統(tǒng),整個(gè)設(shè)計(jì)都用一種語(yǔ)言設(shè)計(jì)系統(tǒng),降低了對(duì)設(shè)計(jì)人員的

12、要求,減少了語(yǔ)言轉(zhuǎn)換時(shí)所造成的錯(cuò)誤。這一優(yōu)點(diǎn)也使得設(shè)計(jì)人員可以在一個(gè)比較高的層次上進(jìn)行系統(tǒng)模塊設(shè)計(jì)。在較高層次的設(shè)計(jì)會(huì)導(dǎo)致產(chǎn)生小的設(shè)計(jì)代碼,使設(shè)計(jì)和仿真的速度比傳統(tǒng)的設(shè)計(jì)方法要快很多。這一點(diǎn)是很顯著的。SystemC的開(kāi)發(fā)流程用SystemC可以在抽象層次的不同級(jí)別描述系統(tǒng)。在系統(tǒng)最高層的系統(tǒng)級(jí)可以用C/C+描述系統(tǒng)的功能和算法。在系統(tǒng)的硬件實(shí)現(xiàn)部分可以在行為級(jí)到RTL級(jí)用SystemC的類(lèi)來(lái)進(jìn)行描述。系統(tǒng)的軟件部分自然可以用C/C+語(yǔ)言描述。由此可見(jiàn)針對(duì)系統(tǒng)的不同部分,SystemC都可以在不同的抽象層次對(duì)其進(jìn)行描述,而且這些描述在系統(tǒng)仿真時(shí)可以協(xié)同工作。用SystemC不僅可以描述要開(kāi)發(fā)的

13、系統(tǒng)本身,還可以描述系統(tǒng)的測(cè)試平臺(tái)以提供測(cè)試信號(hào)用于系統(tǒng)的仿真。一個(gè)熟悉C+語(yǔ)言的用戶(hù)只要了解類(lèi)庫(kù)中各種類(lèi)引入的語(yǔ)義就可以用SystemC編程。SystemC由一組描述類(lèi)的頭文件和一個(gè)包含仿真核的連接庫(kù)所組成,在用戶(hù)的描述程序中必須包括相應(yīng)的頭文件,然后可以用通常的ANSI C+編譯器編譯該程序。在連接時(shí)要調(diào)用SystemC的連接庫(kù)產(chǎn)生可執(zhí)行的系統(tǒng)仿真程序。整個(gè)開(kāi)發(fā)流程如圖3所示。圖3 SystemC開(kāi)發(fā)流程SystemC的建模特點(diǎn)SystemC語(yǔ)言的特點(diǎn)就是能夠支持對(duì)復(fù)雜系統(tǒng)的設(shè)計(jì)。一個(gè)復(fù)雜的系統(tǒng)設(shè)計(jì)一般都要涉及軟件和硬件兩個(gè)方面,SystemC在這兩個(gè)方面都有其獨(dú)到之處。它可以在任何C+集

14、成環(huán)境中描述硬件和軟件,以及它們之間的接口。SystemC語(yǔ)言平臺(tái)提供的建模元素和建模能力主要包括以下內(nèi)容:模塊語(yǔ)句:SystemC中定義了“模塊”類(lèi),它相當(dāng)于C+中的類(lèi)定義。它是一個(gè)層次式設(shè)計(jì)的入口,一個(gè)模塊可以嵌套其他模塊;進(jìn)程語(yǔ)言:進(jìn)程被包含在模塊中,用來(lái)描述模塊的功能。在SystemC中有三種不同類(lèi)型進(jìn)程以滿(mǎn)足不同軟、硬件設(shè)計(jì)人員的需求;端口語(yǔ)句:用來(lái)描述模塊和外界通信的端口。SystemC中支持單向和雙向的端口;信號(hào)語(yǔ)句:信號(hào)主要用來(lái)實(shí)現(xiàn)模塊間以及模塊內(nèi)部各進(jìn)程間的通訊。SystemC支持單驅(qū)動(dòng)和多驅(qū)動(dòng)的信號(hào)。多驅(qū)動(dòng)的信號(hào)可以有多個(gè)驅(qū)動(dòng),就是通常說(shuō)的總線(BUS);豐富的數(shù)據(jù)類(lèi)型:S

15、ystemC提供豐富的數(shù)據(jù)類(lèi)型以滿(mǎn)足多種抽象模型,固定精度的數(shù)據(jù)類(lèi)型可用于快速仿真,任意精度的數(shù)據(jù)類(lèi)型可用于大量數(shù)據(jù)的計(jì)算,定點(diǎn)數(shù)據(jù)類(lèi)型可用來(lái)實(shí)現(xiàn)DSP;時(shí)鐘語(yǔ)句:時(shí)鐘在同步電路設(shè)計(jì)中是一個(gè)非常重要的角色,而C/C+在描述系統(tǒng)時(shí)卻很難表達(dá)時(shí)鐘。SystemC中對(duì)時(shí)鐘進(jìn)行了描述,并把它當(dāng)作一種特殊的信號(hào)。時(shí)鐘為仿真過(guò)程提供了時(shí)間基準(zhǔn),SystemC同時(shí)還支持在同一系統(tǒng)中的多個(gè)時(shí)鐘,以及任意相位的時(shí)鐘;通訊協(xié)議:SystemC支持多層通訊協(xié)議,用來(lái)描述各種抽象級(jí)別的模型和系統(tǒng)I/O協(xié)議;波形跟蹤:SystemC支持VCD、WIF 和ISDB格式波形的跟蹤。UML統(tǒng)一建模語(yǔ)言概論UML與System

16、C的絕妙搭配形成一股新式的芯片設(shè)計(jì)風(fēng)潮。他們都可以用來(lái)呈現(xiàn)軟硬件設(shè)計(jì),最大的不同之處在于,UML是一種圖形語(yǔ)言,而SystemC則是程序語(yǔ)言。當(dāng)芯片設(shè)計(jì)的復(fù)雜度不斷增高時(shí),SystemC代碼機(jī)會(huì)變得越來(lái)越難以掌握,所以會(huì)需要通過(guò)UML的圖形式設(shè)計(jì)來(lái)呈現(xiàn)真題的設(shè)計(jì),再對(duì)應(yīng)生成SystemC代碼以得出更細(xì)致的設(shè)計(jì)。UML的目標(biāo)是以面向?qū)ο髨D的方式來(lái)描述任何類(lèi)型的系統(tǒng),具有很寬的應(yīng)用領(lǐng)域。其中最常用的是建立軟件系統(tǒng)的模型,但它同樣可以用于描述非軟件領(lǐng)域的系統(tǒng),如機(jī)械系統(tǒng)、企業(yè)機(jī)構(gòu)或業(yè)務(wù)過(guò)程,以及處理復(fù)雜數(shù)據(jù)的信息系統(tǒng)、具有實(shí)時(shí)要求的工業(yè)系統(tǒng)或工業(yè)過(guò)程等??傊?,UML是一個(gè)通用的標(biāo)準(zhǔn)建模語(yǔ)言,可以對(duì)任

17、何具有靜態(tài)結(jié)構(gòu)和動(dòng)態(tài)行為的系統(tǒng)進(jìn)行建模。此外,UML適用于系統(tǒng)開(kāi)發(fā)過(guò)程中從需求規(guī)格描述到系統(tǒng)完成后測(cè)試的不同階段。在需求分析階段,可以用用例來(lái)捕獲用戶(hù)需求。通過(guò)用例建模,描述對(duì)系統(tǒng)感興趣的外部角色及其對(duì)系統(tǒng)(用例)的功能要求。分析階段主要關(guān)心問(wèn)題域中的主要概念(如抽象、類(lèi)和對(duì)象等)和機(jī)制,需要識(shí)別這些類(lèi)以及它們相互間的關(guān)系,并用UML類(lèi)圖來(lái)描述。為實(shí)現(xiàn)用例,類(lèi)之間需要協(xié)作,這可以用UML動(dòng)態(tài)模型來(lái)描述。在分析階段,只對(duì)問(wèn)題域的對(duì)象(現(xiàn)實(shí)世界的概念)建模,而不考慮定義軟件系統(tǒng)中技術(shù)細(xì)節(jié)的類(lèi)(如處理用戶(hù)接口、數(shù)據(jù)庫(kù)、通訊和并行性等問(wèn)題的類(lèi))。這些技術(shù)細(xì)節(jié)將在設(shè)計(jì)階段引入,因此設(shè)計(jì)階段為構(gòu)造階段提供

18、更詳細(xì)的規(guī)格說(shuō)明。編程(構(gòu)造)是一個(gè)獨(dú)立的階段,其任務(wù)是用面向?qū)ο缶幊陶Z(yǔ)言將來(lái)自設(shè)計(jì)階段的類(lèi)轉(zhuǎn)換成實(shí)際的代碼。在用UML建立分析和設(shè)計(jì)模型時(shí),應(yīng)盡量避免考慮把模型轉(zhuǎn)換成某種特定的編程語(yǔ)言。因?yàn)樵谠缙陔A段,模型僅僅是理解和分析系統(tǒng)結(jié)構(gòu)的工具,過(guò)早考慮編碼問(wèn)題十分不利于建立簡(jiǎn)單正確的模型。UML模型還可作為 HYPERLINK /wiki/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95 o 軟件測(cè)試 軟件測(cè)試階段的依據(jù)。系統(tǒng)通常需要經(jīng)過(guò)單元測(cè)試、集成測(cè)試、系統(tǒng)測(cè)試和驗(yàn)收測(cè)試。不同的測(cè)試小組使用不同的UML圖作為測(cè)試依據(jù):?jiǎn)卧獪y(cè)試使用類(lèi)圖和類(lèi)規(guī)格說(shuō)明;集成測(cè)試使用部件圖和合

19、作圖;系統(tǒng)測(cè)試使用用例圖來(lái)驗(yàn)證系統(tǒng)的行為;驗(yàn)收測(cè)試由用戶(hù)進(jìn)行,以驗(yàn)證系統(tǒng)測(cè)試的結(jié)果是否滿(mǎn)足在分析階段確定的需求??傊?,標(biāo)準(zhǔn)建模語(yǔ)言UML適用于以面向?qū)ο蠹夹g(shù)來(lái)描述任何類(lèi)型的系統(tǒng),而且適用于系統(tǒng)開(kāi)發(fā)的不同階段,從需求規(guī)格描述直至系統(tǒng)完成后的測(cè)試和維護(hù)。UML的特點(diǎn)標(biāo)準(zhǔn)建模語(yǔ)言UML的主要特點(diǎn)可以歸結(jié)為三點(diǎn):(1) UML統(tǒng)一了 HYPERLINK /wiki/Booch o Booch Booch、 HYPERLINK /wiki/OMT o OMT OMT和 HYPERLINK javascript:linkredwin(OOSE); o OOSE t OOSE等方法中的基本概念。(2) UM

20、L還吸取了面向?qū)ο蠹夹g(shù)領(lǐng)域中其他流派的長(zhǎng)處,其中也包括非OO方法的影響。UML符號(hào)表示考慮了各種方法的圖形表示,刪掉了大量易引起混亂的、多余的和極少使用的符號(hào),也添加了一些新符號(hào)。因此,在UML中匯入了面向?qū)ο箢I(lǐng)域中很多人的思想。這些思想并不是UML的開(kāi)發(fā)者們發(fā)明的,而是開(kāi)發(fā)者們依據(jù)最優(yōu)秀的OO方法和豐富的計(jì)算機(jī)科學(xué)實(shí)踐經(jīng)驗(yàn)綜合提煉而成的。(3)UML在演變過(guò)程中還提出了一些新的概念。在UML標(biāo)準(zhǔn)中新加了模板(Stereotypes)、職責(zé)(Responsibilities)、擴(kuò)展機(jī)制(Extensibility mechanisms)、線程(Threads)、過(guò)程(Processes)、分布

21、式(Distribution)、并發(fā)(Concurrency)、模式(Patterns)、合作(Collaborations)、活動(dòng)圖(Activity diagram)等新概念,并清晰地區(qū)分類(lèi)型(Type)、類(lèi)(Class)和實(shí)例(Instance)、細(xì)化(Refinement)、 HYPERLINK /wiki/%E6%8E%A5%E5%8F%A3 o 接口 接口(Interfaces)和組件(Components)等概念。因此可以認(rèn)為,UML是一種先進(jìn)實(shí)用的標(biāo)準(zhǔn)建模語(yǔ)言,但其中某些概念尚待實(shí)踐來(lái)驗(yàn)證,UML也必然存在一個(gè)進(jìn)化過(guò)程。語(yǔ)音備忘器設(shè)計(jì)設(shè)計(jì)目的及意義人們經(jīng)常會(huì)有重短暫忘記的感覺(jué),

22、比如正在運(yùn)動(dòng)場(chǎng)上跑步,突然想到回去時(shí)順便買(mǎi)瓶酸奶帶回家,這樣的念頭一閃而過(guò),沒(méi)有趕快記錄下來(lái),跑完步回家時(shí), 會(huì)這樣想“記得跑完步我要做什么的”,但總是想不起來(lái)。等回到家后要喝酸奶時(shí)才想起沒(méi)有買(mǎi)。如果有語(yǔ)音備忘器在口袋里,就可以在計(jì)劃要做什么的時(shí)候錄下音。用UML開(kāi)始圖形化設(shè)計(jì)用例設(shè)計(jì)語(yǔ)音備忘器的用例圖包括兩個(gè)模塊,錄制語(yǔ)音和播放語(yǔ)音。在starUML中新建工程更名為Recorder,Add-Model新建模塊更名為用例,選擇Add Diagram -Use Case Diagram。然后建立如圖4所示的語(yǔ)音備忘器的用例.圖4 語(yǔ)音備忘器的用例模塊設(shè)計(jì)在模塊設(shè)計(jì)中,畫(huà)兩種類(lèi)圖,一種是展現(xiàn)全部模

23、塊的整體類(lèi)圖,如圖5所示為整體類(lèi)圖。另一種是個(gè)體類(lèi)圖,特別用來(lái)展現(xiàn)單一模塊設(shè)置端口及接口的情況,如圖6-圖10所示為。在Recorder工程中新建模塊,更名為模塊設(shè)計(jì),選擇Add Diagram -Class Diagram。建立如圖5-圖10的類(lèi)圖:圖5 整體類(lèi)圖圖6 Recorder個(gè)體類(lèi)圖圖7 Memory個(gè)體類(lèi)圖圖8 Controller個(gè)體類(lèi)圖圖9 ADC個(gè)體類(lèi)圖圖10 DAC個(gè)體類(lèi)圖結(jié)構(gòu)設(shè)計(jì)在進(jìn)行結(jié)構(gòu)設(shè)計(jì)時(shí),通過(guò)組合結(jié)構(gòu)圖來(lái)展現(xiàn)對(duì)象內(nèi)部,數(shù)個(gè)部件之間的整合組裝細(xì)節(jié)。在Recorder工程中新建模塊,更名為結(jié)構(gòu)設(shè)計(jì),選擇Add Diagram -Composite Structure

24、 Diagram。如圖11-15所示。圖11 Recorder模塊對(duì)象的組合結(jié)構(gòu)圖圖12 Memoryr模塊對(duì)象的組合結(jié)構(gòu)圖圖13 Controller模塊對(duì)象的組合結(jié)構(gòu)圖圖14 ADC模塊對(duì)象的組合結(jié)構(gòu)圖圖15 DAC模塊對(duì)象的組合結(jié)構(gòu)圖線程設(shè)計(jì)在Recorder工程中新建模塊,更名為進(jìn)程設(shè)計(jì),在選擇Add Diagram -Activity Diagram新建活動(dòng)圖。然后開(kāi)始繪制如下活動(dòng)圖。圖16 Memory模塊的ReadIn活動(dòng)圖圖17 Memory模塊的ReadIn活動(dòng)圖圖18 ADC模塊的Convert活動(dòng)圖圖19 DAC模塊的Convert活動(dòng)圖編寫(xiě)System代碼下載syste

25、mC 后在Microsoft Visual Studio 10.0 中編譯出systemc.lib文件。新建工程Recorder。在工程的properties中設(shè)置如下選項(xiàng):選項(xiàng)值C/C+GenneralAdditional Include DierctoriesD:Program FilesMicrosoft Visual Studio 0.0systemc-2.2.0-0221srcCode GeneratinRuntime LibraryMulti-threaded Debug (/MTd)LanguageEnable Run-Time InformationYes (/GR)Comma

26、nd LineAdditional options鍵入“/vmg”LinkerGenneralAdditional Library DierctoriesD:Program FilesMicrosoft Visual Studio 10.0systemc-2.2.0-0221 msvc71SystemCDebugInputAdditional Dependenciessystemc.lib設(shè)置完后選擇菜單欄的Build- Build Solution.開(kāi)始在工程中編寫(xiě).h文件和.cpp文件,包括有main.cpp、Recorder.h、Recorder.cpp、Controller .h、Co

27、ntroller.cpp、Memory.h、Memory.cpp、ADC.h、ADC.cpp、DAC.h,DAC.cpp。(具體SyatemC的代碼則分置于附件)仿真結(jié)果案例的一開(kāi)始,外界會(huì)通過(guò)xpiOpCode端口,傳送操作嗎給Recoder模塊對(duì)象;操作碼1是仿真錄音功能,2是仿真播放功能。模擬錄音已經(jīng)啟動(dòng),外界會(huì)通過(guò)xpiAudioIn端口,將四組8位字符串“00000000”,“00000001”,“00000010”,“000000011”寫(xiě)進(jìn)sc_fifo通道,路經(jīng)Recorder、Controller、ADC模塊對(duì)象,最后存到Memory模塊對(duì)象,內(nèi)部bvSample4數(shù)組(Ar

28、ray)里。在創(chuàng)建Memory模塊對(duì)象的同時(shí),我們先預(yù)存了四組8位字符串“11111111”、“11111110”、“11111101”、“11111100”到bvSample4數(shù)組里。一旦執(zhí)行仿真錄音的功能后,將會(huì)從外界寫(xiě)進(jìn)“00000000”,“00000001”,“00000010”,“000000011”字符串取代預(yù)存字符串。這樣一來(lái),如果錄音動(dòng)作有誤的話(huà),執(zhí)行畫(huà)面的錄音數(shù)字會(huì)跟播放數(shù)字不一致。圖20是模擬錄音的執(zhí)行畫(huà)面,圖21是模擬播放的執(zhí)行畫(huà)面。附件:/ main.cpp : Defines the entry point for the console application.#

29、include stdafx.h#include systemc.h#include Recorder.hint sc_main(int argc, char* argv)Recorder *myRecorder= new Recorder(myRecorder);coutiOp;switch(iOp) case 1:cout錄音模擬開(kāi)始.xpiOpCode-write(1);myRecorder-xpiAudioIn-write(00000000);myRecorder-xpiAudioIn-write(00000001);myRecorder-xpiAudioIn-write(000000

30、10);myRecorder-xpiAudioIn-write(00000011);sc_start();cout錄音模擬結(jié)束.endlendl;break;case 2:cout播放模擬開(kāi)始.xpiOpCode-write(2);sc_start();for(int i=0;ixpoAudioOut-num_available()=0)wait(myRecorder-xpoAudioOut-data_written_event();coutxpoAudioOut-read()endl;/end forcout播放模擬結(jié)束.endlendl; break;default:return 0; /

31、end switchsystem(PAUSE);return 0; / Recorder.h #pragma once#include Memory.h#include Controller.hclass Recorder :public sc_modulepublic:sc_exportsc_signal_out_if xpiOpCode;sc_exportsc_fifo_out_ifsc_bv xpiAudioIn;sc_exportsc_fifo_in_ifsc_bv xpoAudioOut;SC_HAS_PROCESS(Recorder);Recorder(sc_module_name

32、 mn);private:Memory* myMemory;Controller* myController;sc_signal chOpCode;/ Recorder.cpp#include stdafx.h#include systemc.h#include Recorder.hRecorder:Recorder(sc_module_name mn) : sc_module(mn)myMemory =new Memory(myMemory);myController = new Controller(myController);xpiOpCode(chOpCode);xpiAudioIn(

33、myController-xpiAudioIn);xpoAudioOut(myController-xpoAudioOut);myMemory-piOpCode(chOpCode);myMemory-piSampleIn(myController-xpoDataOut);myMemory-poSampleOut(myController-xpiDataIn);/ Controller.h #pragma once#include ADC.h#include DAC.hclass Controller :public sc_modulepublic:sc_portsc_signal_in_if

34、piOpCode;sc_exportsc_fifo_out_ifsc_bv xpiAudioIn;sc_exportsc_fifo_in_ifsc_bv xpoDataOut;sc_exportsc_fifo_out_ifsc_bv xpiDataIn;sc_exportsc_fifo_in_ifsc_bv xpoAudioOut;SC_HAS_PROCESS(Controller);Controller(sc_module_name mn);private:ADC* myADC;DAC* myDAC;/ Recorder.cpp #include stdafx.h#include syste

35、mc.h#include Controller.hController:Controller(sc_module_name mn) : sc_module(mn)myADC =new ADC(myADC);myDAC = new DAC(myDAC);myADC-piOpCode(piOpCode);xpiAudioIn(myADC-xpiAudioIn);xpoDataOut(myADC-xpoDataOut);myDAC-piOpCode(piOpCode);xpiDataIn(myDAC-xpiDataIn);xpoAudioOut(myDAC-xpoAudioOut);/ Memory

36、.h #pragma onceclass Memory : public sc_modulepublic:sc_portsc_signal_in_if piOpCode;sc_portsc_fifo_in_ifsc_bv piSampleIn;sc_portsc_fifo_out_ifsc_bv poSampleOut;SC_HAS_PROCESS(Memory);Memory(sc_module_name mn);void ReadIn(void);void WriteOut(void);private:sc_bv bvSample4;/ Memory.cpp #include stdafx

37、.h#include systemc.h#include Recorder.hMemory:Memory(sc_module_name mn) : sc_module(mn)bvSample0=11111111;bvSample0=11111110;bvSample0=11111101;bvSample0=11111100;SC_THREAD(ReadIn);SC_THREAD(WriteOut);void Memory:ReadIn(void)for( ; ;)if(piOpCode-read()=1) for(int i=0;inum_available()=0)wait(piSample

38、In-data_written_event();bvSamplei=piSampleIn-read(); cout bvSampleivalue_changed_event();/end for;void Memory:WriteOut(void) for( ; ;) if(piOpCode-read()=2) for(int i=0;iwrite(bvSamplei); /end for/end ifwait(piOpCode-value_changed_event(); /end for;/ ADC.h #pragma onceclass ADC : public sc_modulepub

39、lic:sc_portsc_signal_in_if piOpCode;sc_exportsc_fifo_out_ifsc_bv xpiAudioIn;sc_exportsc_fifo_in_ifsc_bv xpoDataOut;SC_HAS_PROCESS(ADC);ADC(sc_module_name mn);void Convert(void);private:sc_fifosc_bv chAudioIn;sc_fifosc_bv chDataOut;/ ADC.h #pragma onceclass ADC : public sc_modulepublic:sc_portsc_sign

40、al_in_if piOpCode;sc_exportsc_fifo_out_ifsc_bv xpiAudioIn;sc_exportsc_fifo_in_ifsc_bv xpoDataOut;SC_HAS_PROCESS(ADC);ADC(sc_module_name mn);void Convert(void);private:sc_fifosc_bv chAudioIn;sc_fifosc_bv chDataOut;/ DAC.h #pragma onceclass DAC : public sc_modulepublic:sc_portsc_signal_in_if piOpCode;

41、sc_exportsc_fifo_out_ifsc_bv xpiDataIn;sc_exportsc_fifo_in_ifsc_bv xpoAudioOut;SC_HAS_PROCESS(DAC);DAC(sc_module_name mn);void Convert(void);private:sc_fifosc_bv chDataIn;sc_fifosc_bv chAudioOut; DAC.cpp #include stdafx.h#include systemc.h#include DAC.hDAC:DAC(sc_module_name mn) : sc_module(mn)xpiDa

42、taIn(chDataIn);xpoAudioOut(chAudioOut);SC_THREAD(Convert);void DAC:Convert(void) for( ; ;) if(piOpCode-read()=2) for(int i=0;ivalue_changed_event(); /end for;附錄資料:不需要的可以自行刪除Abstract: Based on the comprehensive analysis on the plastic parts structure service requirement, mounding quality and mould me

43、nu factoring cost. A corresponding injection mould of internal side core pulling was designed. By adopting the multi-direction and multi-combination core-pulling. A corresponding injection mould of internal side core pulling was designed, the working process of the mould was introducedC語(yǔ)言詳解 - 枚舉類(lèi)型注:

44、以下全部代碼的執(zhí)行環(huán)境為VC+ 6.0在程序中,可能需要為某些整數(shù)定義一個(gè)別名,我們可以利用預(yù)處理指令#define來(lái)完成這項(xiàng)工作,您的代碼可能是:#define MON 1#define TUE 2#define WED 3#define THU 4#define FRI 5#define SAT 6#define SUN 7在此,我們定義一種新的數(shù)據(jù)類(lèi)型,希望它能完成同樣的工作。這種新的數(shù)據(jù)類(lèi)型叫枚舉型。1. 定義一種新的數(shù)據(jù)類(lèi)型 - 枚舉型 以下代碼定義了這種新的數(shù)據(jù)類(lèi)型 - 枚舉型enum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN;(1) 枚舉型是

45、一個(gè)集合,集合中的元素(枚舉成員)是一些命名的整型常量,元素之間用逗號(hào),隔開(kāi)。(2) DAY是一個(gè)標(biāo)識(shí)符,可以看成這個(gè)集合的名字,是一個(gè)可選項(xiàng),即是可有可無(wú)的項(xiàng)。(3) 第一個(gè)枚舉成員的默認(rèn)值為整型的0,后續(xù)枚舉成員的值在前一個(gè)成員上加1。(4) 可以人為設(shè)定枚舉成員的值,從而自定義某個(gè)范圍內(nèi)的整數(shù)。(5) 枚舉型是預(yù)處理指令#define的替代。(6) 類(lèi)型定義以分號(hào);結(jié)束。2. 使用枚舉類(lèi)型對(duì)變量進(jìn)行聲明新的數(shù)據(jù)類(lèi)型定義完成后,它就可以使用了。我們已經(jīng)見(jiàn)過(guò)最基本的數(shù)據(jù)類(lèi)型,如:整型int, 單精度浮點(diǎn)型float, 雙精度浮點(diǎn)型double, 字符型char, 短整型short等等。用這些

46、基本數(shù)據(jù)類(lèi)型聲明變量通常是這樣:char a; /變量a的類(lèi)型均為字符型charchar letter;int x, y, z; /變量x,y和z的類(lèi)型均為整型intint number;double m, n;double result; /變量result的類(lèi)型為雙精度浮點(diǎn)型double既然枚舉也是一種數(shù)據(jù)類(lèi)型,那么它和基本數(shù)據(jù)類(lèi)型一樣也可以對(duì)變量進(jìn)行聲明。方法一:枚舉類(lèi)型的定義和變量的聲明分開(kāi)enum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN;enum DAY yesterday;enum DAY today;enum DAY tomorrow; /

47、變量tomorrow的類(lèi)型為枚舉型enum DAYenum DAY good_day, bad_day; /變量good_day和bad_day的類(lèi)型均為枚舉型enum DAY方法二:類(lèi)型定義與變量聲明同時(shí)進(jìn)行:enum /跟第一個(gè)定義不同的是,此處的標(biāo)號(hào)DAY省略,這是允許的。 saturday, sunday = 0, monday, tuesday, wednesday, thursday, friday workday; /變量workday的類(lèi)型為枚舉型enum DAYenum week Mon=1, Tue, Wed, Thu, Fri Sat, Sun days; /變量days

48、的類(lèi)型為枚舉型enum weekenum BOOLEAN false, true end_flag, match_flag; /定義枚舉類(lèi)型并聲明了兩個(gè)枚舉型變量方法三:用typedef關(guān)鍵字將枚舉類(lèi)型定義成別名,并利用該別名進(jìn)行變量聲明:typedef enum workday saturday, sunday = 0, monday, tuesday, wednesday, thursday, friday workday; /此處的workday為枚舉型enum workday的別名workday today, tomorrow; /變量today和tomorrow的類(lèi)型為枚舉型work

49、day,也即enum workdayenum workday中的workday可以省略:typedef enum saturday, sunday = 0, monday, tuesday, wednesday, thursday, friday workday; /此處的workday為枚舉型enum workday的別名workday today, tomorrow; /變量today和tomorrow的類(lèi)型為枚舉型workday,也即enum workday也可以用這種方式:typedef enum workday saturday, sunday = 0, monday, tuesda

50、y, wednesday, thursday, friday;workday today, tomorrow; /變量today和tomorrow的類(lèi)型為枚舉型workday,也即enum workday注意:同一個(gè)程序中不能定義同名的枚舉類(lèi)型,不同的枚舉類(lèi)型中也不能存在同名的命名常量。錯(cuò)誤示例如下所示:錯(cuò)誤聲明一:存在同名的枚舉類(lèi)型typedef enum wednesday, thursday, friday workday;typedef enum WEEK saturday, sunday = 0, monday, workday; 錯(cuò)誤聲明二:存在同名的枚舉成員typedef enu

51、m wednesday, thursday, friday workday_1;typedef enum WEEK wednesday, sunday = 0, monday, workday_2;3. 使用枚舉類(lèi)型的變量3.1 對(duì)枚舉型的變量賦值。實(shí)例將枚舉類(lèi)型的賦值與基本數(shù)據(jù)類(lèi)型的賦值進(jìn)行了對(duì)比:方法一:先聲明變量,再對(duì)變量賦值#include/* 定義枚舉類(lèi)型 */enum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN ;void main() /* 使用基本數(shù)據(jù)類(lèi)型聲明變量,然后對(duì)變量賦值 */ int x, y, z; x = 10; y = 20;

52、 z = 30; /* 使用枚舉類(lèi)型聲明變量,再對(duì)枚舉型變量賦值 */ enum DAY yesterday, today, tomorrow; yesterday = MON; today = TUE; tomorrow = WED; printf(%d %d %d n, yesterday, today, tomorrow);方法二:聲明變量的同時(shí)賦初值#include /* 定義枚舉類(lèi)型 */enum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN ;void main() /* 使用基本數(shù)據(jù)類(lèi)型聲明變量同時(shí)對(duì)變量賦初值 */ int x=10, y=20

53、, z=30; /* 使用枚舉類(lèi)型聲明變量同時(shí)對(duì)枚舉型變量賦初值 */ enum DAY yesterday = MON, today = TUE, tomorrow = WED; printf(%d %d %d n, yesterday, today, tomorrow);方法三:定義類(lèi)型的同時(shí)聲明變量,然后對(duì)變量賦值。#include /* 定義枚舉類(lèi)型,同時(shí)聲明該類(lèi)型的三個(gè)變量,它們都為全局變量 */enum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN yesterday, today, tomorrow;/* 定義三個(gè)具有基本數(shù)據(jù)類(lèi)型的變量,它們都為

54、全局變量 */int x, y, z;void main() /* 對(duì)基本數(shù)據(jù)類(lèi)型的變量賦值 */ x = 10; y = 20; z = 30; /* 對(duì)枚舉型的變量賦值 */ yesterday = MON; today = TUE; tomorrow = WED; printf(%d %d %d n, x, y, z); /輸出:10 20 30 printf(%d %d %d n, yesterday, today, tomorrow); /輸出:1 2 3方法四:類(lèi)型定義,變量聲明,賦初值同時(shí)進(jìn)行。#include /* 定義枚舉類(lèi)型,同時(shí)聲明該類(lèi)型的三個(gè)變量,并賦初值。它們都為全局

55、變量 */enum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN yesterday = MON, today = TUE, tomorrow = WED;/* 定義三個(gè)具有基本數(shù)據(jù)類(lèi)型的變量,并賦初值。它們都為全局變量 */int x = 10, y = 20, z = 30;void main() printf(%d %d %d n, x, y, z); /輸出:10 20 30 printf(%d %d %d n, yesterday, today, tomorrow); /輸出:1 2 33.2 對(duì)枚舉型的變量賦整數(shù)值時(shí),需要進(jìn)行類(lèi)型轉(zhuǎn)換。#inclu

56、de enum DAY MON=1, TUE, WED, THU, FRI, SAT, SUN ;void main() enum DAY yesterday, today, tomorrow; yesterday = TUE; today = (enum DAY) (yesterday + 1); /類(lèi)型轉(zhuǎn)換 tomorrow = (enum DAY) 30; /類(lèi)型轉(zhuǎn)換 /tomorrow = 3; /錯(cuò)誤 printf(%d %d %d n, yesterday, today, tomorrow); /輸出:2 3 303.3 使用枚舉型變量#includeenum BELL = a, BACKSPACE = b, HTAB = t, RETURN = r, NEWLINE = n, V

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論