freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

疲勞駕駛實(shí)時(shí)監(jiān)測(cè)系統(tǒng)的研究與實(shí)現(xiàn)論文-資料下載頁(yè)

2025-06-20 01:15本頁(yè)面
  

【正文】 ,在一個(gè)開(kāi)放式的插件(plugin)結(jié)構(gòu)下,CCS內(nèi)部集成了以下軟件工具:l C6000代碼產(chǎn)生工具(包括C6000的C編譯器、匯編優(yōu)化器、匯編器和連接器)l 軟件模擬器l 實(shí)時(shí)基礎(chǔ)軟件DSP/BIOSTMl 主機(jī)與目標(biāo)機(jī)之間的實(shí)時(shí)數(shù)據(jù)交換軟件RTDXTMl 實(shí)時(shí)分析(realtime analysis)和數(shù)據(jù)可視化(data visualization capabilities)軟件通過(guò)CCS,DSP開(kāi)發(fā)人員可以在平臺(tái)下對(duì)用戶程序進(jìn)行透明調(diào)試,在CCS平臺(tái)里,開(kāi)發(fā)人員可以在線查看系統(tǒng)所有存儲(chǔ)單元以及內(nèi)部寄存器,從而大大降低了DSP系統(tǒng)開(kāi)發(fā)的難度,使用戶將精力集中于應(yīng)用開(kāi)發(fā)上?!CS開(kāi)發(fā)環(huán)境界面圖CCS工作在Windows操作系統(tǒng)下,類似于VC++的集成開(kāi)發(fā)環(huán)境,采用圖形接口界面,提供編輯工具和工程管理工具,右半部分是CDB文件設(shè)計(jì)窗口。下面介紹該開(kāi)發(fā)環(huán)境的開(kāi)發(fā)流程,CCS調(diào)試分軟件仿真及硬件仿真兩種,兩種仿真方式在調(diào)試時(shí)基本一樣,主要區(qū)別在于采用軟件仿真時(shí),并不需要DSP硬件的支持,開(kāi)發(fā)人員在PC機(jī)上運(yùn)行即可,這時(shí)在CCS中的所有資源均為PC仿真得到;硬件仿真則必須與相應(yīng)的DSP硬件通過(guò)仿真器相接,這時(shí)在CCS中所顯示的所有資源都為當(dāng)前DSP芯片的真實(shí)情況。: CCS程序開(kāi)發(fā)流程圖 C6000 DSP軟件開(kāi)發(fā)流程C6000系列DSP軟件開(kāi)發(fā)流程包括三個(gè)階段:第一階段:采用C編寫(xiě)應(yīng)用程序,而無(wú)需考慮C6000 DSP的內(nèi)部結(jié)構(gòu)以及相關(guān)的編程規(guī)則。然后對(duì)該應(yīng)用程序進(jìn)行編譯,使用Profile(代碼性能分析)工具測(cè)試應(yīng)用程序的效率是否己經(jīng)達(dá)到了規(guī)定的要求。一般情況下,這一階段的程序效率很難滿足實(shí)際的要求。為此,需要使用profile工具找出程序中耗時(shí)最長(zhǎng)(也即效率最低)的代碼。由于達(dá)不到系統(tǒng)的規(guī)定要求,需要進(jìn)入第二階段的開(kāi)發(fā)。第二階段:這一階段的重點(diǎn)主要是在考慮DSP內(nèi)部結(jié)構(gòu)以及編程規(guī)則的情況下,改進(jìn)C語(yǔ)言編寫(xiě)的應(yīng)用程序代碼。各種優(yōu)化方法包括使用const常量和內(nèi)聯(lián)函數(shù)(intrinsics)、使用字訪問(wèn)等。這一階段的主要任務(wù)是去除相關(guān)性和循環(huán)展開(kāi)。如果經(jīng)過(guò)各種優(yōu)化措施,程序代碼依然不能達(dá)到規(guī)定的要求,則需要進(jìn)入下一階段的開(kāi)發(fā)。第三階段:這一階段主要是抽出應(yīng)用程序中效率不高的C語(yǔ)言代碼,改用線性匯編語(yǔ)言重新編寫(xiě)。[65]: 軟件編程流程 算法移植在CCS上支持采用C++,C,匯編語(yǔ)言編寫(xiě)的程序,因此在VC++等開(kāi)發(fā)環(huán)境里編寫(xiě)的C語(yǔ)言程序同樣可以在CCS里運(yùn)行,下面以C語(yǔ)言為例介紹移植的步驟:1)建立工程,通過(guò)工具條的Project選項(xiàng)建立一新的工程,此時(shí)的工程為一空工程,里面沒(méi)有任何的可運(yùn)行代碼;2)加入C文件,在C文件里必須有main函數(shù);3)加入相應(yīng)DSP的庫(kù)文件,對(duì)于不同的DSP庫(kù)文件不同,DM642 ;4)在其它編譯環(huán)境里編譯的程序在移植到CCS上時(shí)必須注意數(shù)據(jù)格式的對(duì)應(yīng)。在移植前必須清楚原編譯環(huán)境里各種數(shù)據(jù)類型的實(shí)際長(zhǎng)度。在使用Long和pointer數(shù)據(jù)類型時(shí),應(yīng)避免溢出而導(dǎo)致的程序錯(cuò)誤?!M642與32位PC和64位PC的數(shù)據(jù)類型比較charshortintlongpointeri386(32位)8 bit16 bit32 bit64 bit32 bitX86(64位)8 bit16 bit32 bit64 bit64bitDM6428 bit16 bit32 bit40 bit32 bit5).cmd文件的編寫(xiě),.cmd文件是用于對(duì)程序存放空間定位的文件,在CCS中非常重要,由于各程序段的運(yùn)行次數(shù)不盡相同,而在DSP系統(tǒng)中內(nèi)部存儲(chǔ)器一般不夠,所以在許多DSP平臺(tái)里一般會(huì)擴(kuò)展一部分存儲(chǔ)器空間,但是擴(kuò)展存儲(chǔ)器的速度較片內(nèi)存儲(chǔ)器的要慢許多,因此開(kāi)發(fā)人員一般要把程序里最重要的程序或是數(shù)據(jù)安排在片內(nèi)。通過(guò)以上步驟,順利完成了程序在CCS平臺(tái)上的實(shí)現(xiàn)。 程序優(yōu)化方法 概述用C語(yǔ)言編寫(xiě)的算法代碼,若直接加載到DSP軟件開(kāi)發(fā)平臺(tái)中進(jìn)行編譯,生成的可執(zhí)行文件會(huì)很龐大,一般很難與實(shí)際的DSP硬件環(huán)境相匹配。即使利用DSP自帶的優(yōu)化編譯器,雖然可將代碼的容量及速度優(yōu)化到原來(lái)的70%左右,但效果仍不夠理想,這就需要充分開(kāi)發(fā)DSP內(nèi)部資源來(lái)優(yōu)化算法?,F(xiàn)代微處理器是用結(jié)構(gòu)的復(fù)雜性來(lái)?yè)Q取速度的提高的。它把指令的處理分成幾個(gè)子操作,每個(gè)子操作在微處理器內(nèi)部由不同部件來(lái)完成。對(duì)微處理器的每個(gè)部件來(lái)說(shuō),每隔一個(gè)時(shí)鐘周期即可進(jìn)入一條新指令,這樣在同一時(shí)間內(nèi),就有多條指令交疊的在不同部件內(nèi)處理,這種方式稱為流水線(pipeline)方式。TMS320DM642的特殊結(jié)構(gòu)又可使多個(gè)指令包(每包最多可達(dá)到八條指令)交疊在不同部件內(nèi)處理,大大提高了微處理器的吞吐量。 變量級(jí)的優(yōu)化浮點(diǎn)代碼定點(diǎn)化DSP可以分為定點(diǎn)和浮點(diǎn)兩種。本系統(tǒng)中采用的是定點(diǎn)DSP,在優(yōu)化中碰到的第一個(gè)問(wèn)題就是浮點(diǎn)代碼定點(diǎn)化問(wèn)題。浮點(diǎn)算法轉(zhuǎn)換為定點(diǎn)算法,不可避免會(huì)影響運(yùn)算精度,減小輸出的動(dòng)態(tài)范圍。所以,應(yīng)該首先對(duì)定點(diǎn)運(yùn)算的精度進(jìn)行分析,然后在精度允許的范圍內(nèi)做好定點(diǎn)化工作。在編程時(shí)要大致估計(jì)數(shù)據(jù)的范圍,做到所采用的數(shù)據(jù)類型剛好滿足要求,并盡量做到在一個(gè)CPU指令周期內(nèi)完成數(shù)據(jù)載入。數(shù)值計(jì)算的優(yōu)化在數(shù)值計(jì)算時(shí),可以用以下方法來(lái)提高代碼執(zhí)行效率■ 計(jì)算乘除法時(shí),如果是乘以或者除以一個(gè)2的冪的數(shù),可以用移位操作來(lái)代替乘除法。此外,C語(yǔ)言編寫(xiě)的乘加操作一般遵循兩個(gè)數(shù)先相乘(利用MPY指令),再利用ADD指令將結(jié)果累加到某一個(gè)寄存器中,這樣既需要眾多的寄存器暫存數(shù)據(jù),又會(huì)因指令的繁多(乘、加、裝載、存儲(chǔ)等)而增加運(yùn)算時(shí)間。優(yōu)化代碼過(guò)程中可以充分利用DSP擅長(zhǎng)的乘加一次性操作,即MAC指令,使得系統(tǒng)可以在一個(gè)指令周期內(nèi)完成乘加操作,還可以結(jié)合寄存器的合理安排,實(shí)現(xiàn)連續(xù)乘加,而不需暫存中間數(shù)據(jù),從而大大提高了運(yùn)算效率?!觥】梢园研枰谶\(yùn)行時(shí)計(jì)算的參數(shù)做成查找表或常數(shù)數(shù)值,這樣可以用編譯時(shí)的計(jì)算代替運(yùn)行時(shí)的計(jì)算達(dá)到提高程序效率的目的。比如說(shuō),可以用查表法代替三角函數(shù)運(yùn)算和FFT等函數(shù)的計(jì)算。 ■ 盡量避免數(shù)值的上下溢出,除非是算法本身的需要?!觥〕浞掷肈SP提供的32位寄存器,可以在32位寄存器的高16位和低16位分別存儲(chǔ)2個(gè)16位數(shù)據(jù)。這樣程序讀取數(shù)據(jù)的速度會(huì)變成原先的2倍。 變量定義以及使用方面的優(yōu)化C語(yǔ)言把局部變量放在堆棧中,這種訪問(wèn)是間接的,因此較慢。更為有效的方法是將變量放在堆(heap)中,有兩種方法實(shí)現(xiàn):一種是聲明為全局變量。另一種是聲明變量為static。同時(shí),要注意提高全局變量的重復(fù)利用率。對(duì)于需要多次重復(fù)訪問(wèn)的變量,如for循環(huán)中的變量值,一般可以設(shè)置為register變量。聲明變量為register能夠提高效率,但必須小心使用。在某些編譯器中,優(yōu)化器會(huì)自動(dòng)分配一些變量為register。在C語(yǔ)言程序中指針和數(shù)組是可以相互替代的。對(duì)數(shù)組的尋址是非常耗時(shí)的,特別是多維數(shù)組。因此,首先應(yīng)降低數(shù)組的維數(shù),再指針化。同時(shí),配合DSP中尋址機(jī)構(gòu)所支持的增量尋址,效率會(huì)大大提高,代價(jià)是降低了可讀性。 函數(shù)級(jí)的優(yōu)化函數(shù)調(diào)用的優(yōu)化函數(shù)調(diào)用往往產(chǎn)生大量代碼。當(dāng)C調(diào)用一個(gè)函數(shù)時(shí),它首先把參數(shù)傳遞給寄存器或堆棧。如果函數(shù)參數(shù)很多,則調(diào)用開(kāi)銷將很大。此外,還需要大量堆??臻g。最壞的情況是函數(shù)參數(shù)傳遞的是結(jié)構(gòu),編譯器在調(diào)用函數(shù)時(shí)必須首先復(fù)制整個(gè)結(jié)構(gòu)到堆棧。此外,若函數(shù)返回的是結(jié)構(gòu),調(diào)用程序保留堆??臻g,傳遞結(jié)構(gòu)地址給函數(shù),調(diào)用函數(shù),然后函數(shù)返回。最后,調(diào)用程序還要清除堆棧,并將返回的結(jié)構(gòu)復(fù)制到另一個(gè)結(jié)構(gòu)。代碼和堆棧的開(kāi)銷將是驚人的,特別是資源有限的DSP或其它片上嵌入式系統(tǒng)。為了避免這種開(kāi)銷,應(yīng)禁止傳遞結(jié)構(gòu),一般用結(jié)構(gòu)指針替代。如果結(jié)構(gòu)是不可修改的,可用常量結(jié)構(gòu)指針替代。函數(shù)調(diào)用的另一方面開(kāi)銷是局部變量。這些變量定位于堆棧,因此增加了對(duì)堆棧的要求。如果這些變量需要被初始化,則在程序每次被調(diào)用時(shí)均需做一次初始化。可以這樣說(shuō),限制局部變量的數(shù)目也就是對(duì)堆??臻g的限制。第三方面的開(kāi)銷是調(diào)用函數(shù)的返回值。如果要返回值,一般需要在函數(shù)返回前復(fù)制返回值到返回位置,然后把結(jié)果復(fù)制到調(diào)用程序中。如果函數(shù)的返回值賦值給一個(gè)變量或很少使用,可以考慮傳遞指向返回值的指針。被調(diào)用的函數(shù)可以直接改變返回值。跳轉(zhuǎn)指令的優(yōu)化DSP的指令多為單周期指令,但是轉(zhuǎn)移類指令卻通常要耗費(fèi)較多的時(shí)鐘周期,一個(gè)跳轉(zhuǎn)需要5個(gè)延時(shí)間隙,如果跳轉(zhuǎn)指令過(guò)多就會(huì)明顯影響程序的性能,因此應(yīng)盡可能地減少程序中的分支。很多跳轉(zhuǎn)可以用其他簡(jiǎn)單指令來(lái)代替,如下面這一小段代碼:if(*(imgData+i*w+j)maxg){maxg = *(imgData+i*w+j)。}if(*(imgData+i*w+j)ming){ming = *(imgData+i*w+j)。}可以改為以下2條語(yǔ)句,其中_MAX和_MIN 是DSP支持的指令。maxg = _MAX(imgData+i*w+j,maxg)。ming = _MIN(imgData+i*w+j,ming)。這樣就完全避免了if語(yǔ)句所帶來(lái)的跳轉(zhuǎn)操作。另外一個(gè)需要考慮的是switch…case語(yǔ)句中參數(shù)可以是任意的整數(shù)類型,然而,若這些整數(shù)在case語(yǔ)句中生成一系列整數(shù),如enum類型,許多編譯器將產(chǎn)生跳轉(zhuǎn)表,這可以減少編譯代碼,而且平均下來(lái),執(zhí)行的效率也比較快。循環(huán)指令的優(yōu)化C語(yǔ)言提供3種類型的循環(huán)結(jié)構(gòu):for循環(huán)、dowhile循環(huán)和while循環(huán)。編譯器的任務(wù)是將指令映射為處理器的指令集。許多DSP設(shè)計(jì)有零開(kāi)銷循環(huán)處理能力。零開(kāi)銷循環(huán)不需要循環(huán)計(jì)數(shù)更新、測(cè)試和回跳指令,因此能夠加速處理能力。為了盡量實(shí)現(xiàn)循環(huán)的零開(kāi)銷,編譯器必須知道循環(huán)的初始化、更新和結(jié)束條件。當(dāng)循環(huán)表達(dá)式過(guò)于復(fù)雜或者含有的循環(huán)變量隨循環(huán)體本身中的條件變化而改變量值時(shí),許多編譯器不生成零開(kāi)銷的循環(huán)?;谶@種準(zhǔn)則,循環(huán)表達(dá)式應(yīng)寫(xiě)的盡可能清楚。并且盡量地對(duì)表達(dá)式做預(yù)處理,如將常數(shù)表達(dá)式移出循環(huán),預(yù)先計(jì)算結(jié)果等。在C語(yǔ)言中編寫(xiě)循環(huán)時(shí),代表循環(huán)次數(shù)的變量可以遞加實(shí)現(xiàn),也可以遞減實(shí)現(xiàn)。以下面兩段程序?yàn)槔篺or(i=0。im_Height。i++){ memset(m_Image[i],255,m_Width)。}for(i=m_Height1。i=0。i){ memset(m_Image[i],255,m_Width)。}這兩段程序完成同樣的功能,在C語(yǔ)言級(jí)區(qū)別不大。但是移植到DSP之后,后者比前者少用幾百個(gè)時(shí)鐘周期。此外,一般循環(huán)體都滿足并行處理的條件,并且循環(huán)體往往是程序中耗時(shí)最長(zhǎng)的。因此在進(jìn)行優(yōu)化時(shí)將重點(diǎn)放在循環(huán)體上。對(duì)循環(huán)體的優(yōu)化可以大致分為循環(huán)展開(kāi)和循環(huán)合并兩個(gè)部分?!觥⊙h(huán)展開(kāi):在循環(huán)次數(shù)比較多的程序(特別是多重循環(huán))中,內(nèi)層循環(huán)體運(yùn)行所需的時(shí)鐘數(shù)略有改變就會(huì)顯著影響程序性能。在這方面,將循環(huán)展開(kāi)是一個(gè)比較好的方法。循環(huán)展開(kāi)就是把循環(huán)計(jì)數(shù)小的循環(huán)展開(kāi),成為非循環(huán)形式的平鋪程序,或者把循環(huán)計(jì)數(shù)大的循環(huán)部分展開(kāi),減少循環(huán)迭代數(shù),增加單個(gè)循環(huán)內(nèi)的代碼,使得循環(huán)內(nèi)的操作可以均勻分布在各個(gè)功能部件上,保持DSP處理器各功能部件的滿負(fù)荷運(yùn)行。這樣做的目的是充分利用資源,消除循環(huán)指令所引起的延時(shí)和循環(huán)前后的開(kāi)銷,但循環(huán)展開(kāi)會(huì)增加程序的大小,所以要在循環(huán)展開(kāi)后節(jié)省的時(shí)鐘周期數(shù)和要求的程序內(nèi)存之間進(jìn)行平衡。循環(huán)展開(kāi)除了能節(jié)省循環(huán)執(zhí)行的時(shí)鐘周期數(shù)外,還節(jié)省啟動(dòng)循環(huán)的開(kāi)銷?!觥⊙h(huán)合并:如果兩個(gè)循環(huán)計(jì)數(shù)差不多的不同循環(huán)執(zhí)行互不相同的操作,在匯編語(yǔ)言中可以把它們合并到一起組成一個(gè)循環(huán),這稱之為循環(huán)合并。當(dāng)兩個(gè) 循環(huán)中ALU負(fù)荷都不滿時(shí),這是非常有用的。值得注意的是,在多重嵌套循環(huán)的情況下,可以重新排列程序代碼的結(jié)構(gòu),把盡可能多的內(nèi)循環(huán)計(jì)算移出到外循環(huán),提高循環(huán)的執(zhí)行效率。以下面這段程序?yàn)槔?1) for(i=0。inum1。i++){for(j=0。jnum2。j++){for(k=0。knum3。k++){out+=1/a[i]+b[j]*b[j]+c[k]。 } } }(2) for(i=num11。i=0。i){tmp1=1/a[i]。for(j=num21。j=0。j){tmp2=b[j]*b[j]+tmp1。for(k=num31。k=0。k){out+=c[k]+tmp2。 } }}當(dāng)num1=num2=num3=10時(shí),第一段代碼花費(fèi)83705MIPS,第二段代碼花費(fèi)9538MIPS。 函數(shù)編寫(xiě)的優(yōu)化C6000系列的DSP支持很多庫(kù)函數(shù),比如說(shuō)中值濾波,小波變換,DCT/IDCT變換等。如果在程序中要用到類似函數(shù),完全可以使用TI提供的這些庫(kù)函數(shù)。這些函數(shù)在在流水線方面都做過(guò)優(yōu)化,效率要比自己編制的程序高很多。此外,一些大于一個(gè)指令周期才能完成的指令,若在下一條指令中要用到它的結(jié)果時(shí),這兩條指令之間就必須錯(cuò)開(kāi)相應(yīng)的指令周期。對(duì)于這種情況的處理由C語(yǔ)言直接編譯生成的匯編代碼,往往插入空指令(即NOP指令,除延時(shí)一個(gè)周期外,不做任何操作),在直接用匯編編寫(xiě)的程序中就可以根據(jù)實(shí)際需要,運(yùn)行其它與前面的等待結(jié)果不相關(guān)的指令,提高系統(tǒng)的并行處理能力,從而提高程序運(yùn)算速度。 使用片內(nèi)存儲(chǔ)器優(yōu)化DSP的存儲(chǔ)空間是有限的。像TMS320DM642內(nèi)部存儲(chǔ)器并不能完全滿足程序的要求。雖然可以用片外存儲(chǔ)器,但是對(duì)片外存儲(chǔ)器的訪問(wèn)速度要大大低于片內(nèi)存儲(chǔ)器。因此,在片內(nèi)空間不足以裝下整個(gè)程序的情況下,要盡量把使用次數(shù)較多的代碼段和常數(shù)表放在片內(nèi)。 采用線性匯編優(yōu)化在使用CCS開(kāi)發(fā)和優(yōu)化C代碼后,對(duì)C代碼中低效率段可用線性匯編重新編寫(xiě),再用匯編優(yōu)化器優(yōu)化。線性匯編語(yǔ)言基本格式與匯編語(yǔ)言相同,它必須是ASCII碼文件,擴(kuò)展名為“.sa”, 用作匯編優(yōu)化器的輸入文件。一行線性匯編語(yǔ)句與匯編語(yǔ)句相似
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1