久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区

以文本方式查看主題

-  曙海教育集團(tuán)論壇  (http://www.rfoamep.cn/bbs/index.asp)
--  DSP5000技術(shù)討論  (http://www.rfoamep.cn/bbs/list.asp?boardid=28)
----  TI 5000 DSP C/C++和匯編語言混合編程  (http://www.rfoamep.cn/bbs/dispbbs.asp?boardid=28&id=1577)

--  作者:wangxinxin
--  發(fā)布時(shí)間:2010-11-22 8:41:30
--  TI 5000 DSP C/C++和匯編語言混合編程
引言
  
TI 公司的5000系列低功耗16 b定點(diǎn)DSP,因其良好的性價(jià)比,在國內(nèi)獲得了很大的普及。如何對(duì)5000系列DSP進(jìn)行軟件開發(fā)也一直是業(yè)界關(guān)注的熱點(diǎn)。5000系列DSP的軟件設(shè)計(jì)通常有3種方法。

1.1用C/C++語言開發(fā)
  
TI公司提供了用于C/C++?語言開發(fā)的CCS平臺(tái)。該平臺(tái)包括優(yōu)化ANSI C/C++ 編譯器,從而可以在源程序級(jí)進(jìn)行開發(fā)調(diào)試。這種方法大大提高了軟件的開發(fā)速度和可讀性,方便了軟件的修改和移植。但是,C/C++代碼的效率還是無法與手工編寫的匯編代碼效率相比,如FFT程序。因?yàn)榧词故亲罴训腃/C++編譯器,也無法在所有的情況下都能合理的利用DSP芯片提供的各種資源。此外,用C/C++語言實(shí)現(xiàn)DSP芯片某些硬件控制也不如匯編方便,有些甚至無法用C/C++語言實(shí)現(xiàn)。

1.2全匯編語言開發(fā)
  
TI公司提供了用于匯編語言開發(fā)的針對(duì)5000系列DSP的匯編語言。用戶可以用他進(jìn)行軟件開發(fā)。這種方式可以更為合理的利用芯片提供的硬件資源,其代碼效率高,程序執(zhí)行速度快。但是用匯編語言編寫程序是比較復(fù)雜的,一般來說,不同公司的芯片匯編語言是不同的,即使是同一公司的芯片,由于芯片的類型不同(如定點(diǎn)和浮點(diǎn))、芯片的升級(jí)換代,其匯編語言也不同。因此,用匯編語言開發(fā)基于某種芯片的產(chǎn)品周期較長,并且軟件的修改和升級(jí)較困難。而且匯編語言的可讀性和可移植性較差。

1.3C/C++?語言和匯編語言混合編程開發(fā)
  
為了充分利用DSP芯片的硬件資源,更好發(fā)揮C/C++?語言和匯編語言進(jìn)行軟件開發(fā)的各自優(yōu)點(diǎn),可以將兩者有機(jī)的結(jié)合起來,兼顧兩者優(yōu)點(diǎn),避免其弊端。因此,在很多情況下,采用混合編程方法能更好地達(dá)到設(shè)計(jì)要求,完成設(shè)計(jì)任務(wù)。

2 C/C++語言和匯編語言混合編程方法討論
  
C/C++語言和匯編語言混合編程的具體方法有以下幾種:
  
(1)獨(dú)立編寫C/C++程序和匯編程序,分開編譯或匯編形成各自的目標(biāo)模塊,再用鏈接器將C/C++模塊和匯編模塊鏈接起來,這是一種靈活性較大的方法。但用戶必須自己維護(hù)各匯編模塊的入口和出口代碼,自己計(jì)算傳遞參數(shù)在堆棧中的偏移量,工作量稍大,但能做到對(duì)程序的絕對(duì)控制,也能滿足軟件設(shè)計(jì)結(jié)構(gòu)化的要求。這是本文主要講述的方法。
  
(2)在C/C++程序中使用匯編程序中定義的變量和常量。
  
(3)在C/C++程序中直接內(nèi)嵌匯編語句。這種方法可以在C/C++程序中實(shí)現(xiàn)C/C++語言無法實(shí)現(xiàn)的硬件控制功能,如修改中斷控制寄存器、中斷標(biāo)志寄存器等。
  
(4)在C/C++源程序中使用內(nèi)部函數(shù)直接調(diào)用匯編語言語句。
  
后3種方法由于在C/C++語言中直接嵌入了匯編語言的成分,容易造成程序混亂,C/C++環(huán)境被破壞,甚至導(dǎo)致程序崩潰,而編程者又很難對(duì)不良結(jié)果進(jìn)行預(yù)期和有效控制。而如果采用第一種方法,只要遵循有關(guān)C/C++語言函數(shù)調(diào)用規(guī)則和寄存器規(guī)則,就能預(yù)見到程序運(yùn)行的結(jié)果,保證程序正確。下面分別講述函數(shù)調(diào)用規(guī)則和寄存器規(guī)則,最后給出編程實(shí)例。

3函數(shù)調(diào)用規(guī)則
  
C/C++編譯器對(duì)函數(shù)調(diào)用強(qiáng)加了一組嚴(yán)格的原則。除了特殊的運(yùn)行時(shí)間支持庫函數(shù)外,任何調(diào)用函數(shù)和被C/C++函數(shù)調(diào)用的函數(shù)都必須遵守這些原則。不遵守這些原則可能破壞C/C++環(huán)境并導(dǎo)致程序失敗。
  
圖1說明了典型的函數(shù)調(diào)用。在這個(gè)例子中,參數(shù)被傳遞到堆棧中調(diào)用者的參數(shù)塊,函數(shù)再使用這些參數(shù)調(diào)用被調(diào)用函數(shù)。注意,第一個(gè)參數(shù)是在A累加器中傳遞的。這個(gè)例子還說明了匯編器對(duì)被調(diào)用函數(shù)的局部幀的分配。局部幀包括局部變量塊和局部參數(shù)塊兩部分,其中局部參數(shù)塊是局部幀中用來傳遞參數(shù)到其他函數(shù)的部分。如果被調(diào)用函數(shù)沒有局部變量并且不再調(diào)用其他函數(shù)或需要調(diào)用的函數(shù)沒有參數(shù),則不分配局部幀。對(duì)于混合編程而言,由于被調(diào)用函數(shù)是手工編寫的匯編程序,則局部幀由編程者自己完成分配,也不需要在堆棧中進(jìn)行,而編譯器分配局部幀。

圖片點(diǎn)擊可在新窗口打開查看

(1)函數(shù)如何調(diào)用
  
函數(shù)(調(diào)用者)在調(diào)用被調(diào)用函數(shù)時(shí)執(zhí)行以下任務(wù)。

①調(diào)用者將第一個(gè)(最左邊)的參數(shù)值放進(jìn)累加器A。調(diào)用者將剩下的參數(shù)按相反的順序傳進(jìn)參數(shù)塊,剩下的最左邊的參數(shù)在最低的地址。
②若函數(shù)返回一個(gè)結(jié)構(gòu),則調(diào)用者為該結(jié)構(gòu)分配空間,然后用累加器A傳遞返回空間的地址給調(diào)用的函數(shù)。
③調(diào)用者調(diào)用函數(shù)。
  
(2)被調(diào)用函數(shù)如何響應(yīng)。
  
被調(diào)用函數(shù)執(zhí)行以下任務(wù):
  
注意:如果被調(diào)用函數(shù)是C/C++函數(shù),則下面步驟都是由匯編器自動(dòng)完成。如果是混合編程,則如下步驟都是由編程者在被調(diào)用的匯編函數(shù)中完成的。
  
①    若被調(diào)用函數(shù)修改AR1,AR2或AR7,則將他們壓入堆棧。
  
②被調(diào)用函數(shù)通過從SP減去一個(gè)常數(shù),為局部變量塊和局部參數(shù)塊分配存儲(chǔ)器。該常數(shù)按以下公式計(jì)算,即:
  
局部變量塊的大小+局部參數(shù)塊的大小+padding
  
padding值是為了保證SP對(duì)準(zhǔn)偶數(shù)邊界而可能要求補(bǔ)充的一個(gè)字。之所以SP要對(duì)準(zhǔn)偶數(shù)邊界,是因?yàn)?000系列DSP指令可一次讀寫存儲(chǔ)器的32 b,例如DLD,DADD等。這樣,編譯器必須保證所有32 b的目標(biāo)都駐留在偶數(shù)邊界。
  
對(duì)于混合編程而言可以在匯編函數(shù)中,按本步驟的方法在堆棧中分配局部幀,但本方法相對(duì)比較麻煩,尤其該匯編函數(shù)還要調(diào)用其他函數(shù)時(shí),所以,一般而言編程者通常用其他方法分配局部幀,比如用bss偽指令定義局部變量供函數(shù)使用。

③被調(diào)用函數(shù)為調(diào)用函數(shù)執(zhí)行代碼。

④若函數(shù)返回一個(gè)值,則被調(diào)用函數(shù)將該值放在累加器A中;若函數(shù)返回一個(gè)結(jié)構(gòu),則被 調(diào)用函數(shù)將該結(jié)構(gòu)復(fù)制到累加器A指到的存儲(chǔ)器塊;若調(diào)用者不返回函數(shù)值,則A被置0。

⑤被調(diào)用函數(shù)給SP上加上第二步計(jì)算的常數(shù),釋放為局部變量和局部參數(shù)分配的存儲(chǔ)空間。對(duì)混合編程而言,如果編程者沒有在堆棧中分配局部幀,則本步驟省略。

⑥被調(diào)用函數(shù)恢復(fù)所有保存的寄存器。

⑦被調(diào)用函數(shù)執(zhí)行返回。

4寄存器規(guī)則
  
(1)必須保存任何被函數(shù)修正的專用寄存器。專用寄存器包括:
  
①AR1,AR6,AR7
  
②堆棧指針(SP)
  
若對(duì)SP正常使用,不需要明顯的保存。換句話說,只要任何壓入堆棧的東西在函數(shù)返回之 前被彈回(因而保存了SP),匯編函數(shù)就可以自由的使用堆棧。任何非專用的寄存器都可以自由地使用而無需將他們保存。
  
(2)中斷函數(shù)必須保存他使用的所有寄存器。
  
(3)ARP在函數(shù)進(jìn)入和返回時(shí),必須為0,即當(dāng)前輔助寄存器為AR0。函數(shù)執(zhí)行時(shí)可以為其 他值。
  
(4)在默認(rèn)的情況下,編譯器總是認(rèn)為OVM為0。因此,若在匯編程序中將OVM置為1,則返回C/C++環(huán)境時(shí),必須將其恢復(fù)為0。
  
(5)在默認(rèn)的情況下,編譯器總是認(rèn)為CPL為1。因此,若在匯編程序中將CPL清0,則在返回C/C++環(huán)境時(shí),必須將其恢復(fù)為1。
  
(6)長整數(shù)和浮點(diǎn)數(shù)存儲(chǔ)在存儲(chǔ)器中的方法是最高有效字在低位地址。
  
(7)函數(shù)必須按前面有關(guān)被調(diào)用函數(shù)響應(yīng)中所述的方法返回值。
  
(8)除了全局變量的初始化外,匯編語言模塊不能以任何目的使用cinit段。在boot? asm中的C/C++啟動(dòng)程序假定cinit段完全由初始化表組成。將其他的信息放入cin it中將使初始化表產(chǎn)生混亂,并將產(chǎn)生不可預(yù)期的結(jié)果。
  
(9)在匯編語言模塊中,對(duì)可以從C/C++中訪問的變量和函數(shù)名需加上前綴“_”。對(duì)于僅用于匯編語言模塊中的標(biāo)識(shí)符,應(yīng)不得用下劃線開始。
  
(10)任何在匯編語言模塊中聲明的將要從C/C++訪問或調(diào)用的對(duì)象或函數(shù),都必須在匯編語言中用?global偽指令聲明為全局變量。


久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
成人一区二区在线观看| 精品综合久久久| 91九色蝌蚪嫩草| 伊人久久大香线蕉成人综合网| 日韩欧美一区二区不卡| 伊人性伊人情综合网| 国产成人免费视频网站高清观看视频| 久久精品国产综合精品| 欧美一级高清片在线观看| 一区二区三区高清在线| 99国产欧美久久久精品| 99国产精品久久久久| 亚洲精品高清国产一线久久| 久久亚洲二区三区| 美女视频黄频大全不卡视频在线播放| 国产美女精品久久久| 日韩欧美你懂的| 日本亚洲最大的色成网站www| 狠狠色综合欧美激情| 欧美成人高清电影在线| 麻豆91免费观看| 日本一区二区高清视频| 国产欧美日韩在线看| 国产不卡在线视频| 色噜噜偷拍精品综合在线| 亚洲精品少妇30p| 国产精品免费一区二区三区在线观看| 日韩女优毛片在线| 狠狠v欧美v日韩v亚洲ⅴ| 一区二区不卡在线| 亚洲欧美日韩精品久久久久| 96久久精品| 精品国产一区二区三区不卡| 国产精品伊人色| 91福利社在线观看| 亚洲第一福利一区| 欧美在线视频二区| 国产精品超碰97尤物18| 99re8在线精品视频免费播放| 91超碰这里只有精品国产| 日本成人在线看| 色综合久久天天综合网| 亚洲成在线观看| 日韩亚洲不卡在线| 亚洲综合在线视频| 欧美不卡三区| 一区二区欧美视频| 日韩影片在线播放| 亚洲国产欧美一区二区三区丁香婷| 久久精品丝袜高跟鞋| 日韩理论片网站| 久久久久一区二区| 亚洲毛片av在线| 日本免费高清一区二区| 亚洲精品视频在线观看网站| 欧美日韩一区二区三区免费| 亚洲主播在线观看| 亚洲精品一区二区三区四区五区| 亚洲国产色一区| 国产精品区一区二区三在线播放| 日本一区二区三区国色天香 | 日韩久久精品一区二区三区| 亚洲精品国产视频| 天堂一区二区三区| 天天亚洲美女在线视频| 色94色欧美sute亚洲13| 国产麻豆精品视频| 精品免费99久久| 国产高清自拍一区| 一区二区三区欧美日| 色综合久久久久久久| 国产一区二区精品久久| 久久色视频免费观看| 国产一区二区三区四区hd| 亚洲综合一区在线| 欧美日韩精品一区二区三区蜜桃| 国产99精品国产| 中文字幕精品三区| 在线成人性视频| 国产成人av影院| 亚洲图片另类小说| 色噜噜狠狠色综合欧洲selulu| 国产黄色精品视频| 18成人在线视频| 在线观看视频一区二区欧美日韩| 国产白丝网站精品污在线入口| 欧美激情综合网| 最近看过的日韩成人| 成人小视频在线| 一区二区三区成人| 欧美日韩精品久久久| 91亚洲永久精品| 亚洲福利视频一区| 欧美高清性hdvideosex| 成人免费观看av| 亚洲精品视频在线| 91成人在线观看喷潮| 国产精品一卡二卡在线观看| 精品国产免费视频| 精品视频在线观看| 一区二区中文视频| 69堂成人精品免费视频| 91视频免费进入| 亚洲精品久久嫩草网站秘色| 宅男av一区二区三区| 国产制服丝袜一区| 久久精品一区四区| 欧美激情论坛| av一二三不卡影片| 亚洲三级在线观看| 欧美专区日韩专区| 99视频热这里只有精品免费| 亚洲美女视频一区| 中文字幕不卡每日更新1区2区| 97超碰在线播放| 午夜不卡av免费| 欧美成人综合网站| 欧洲精品在线一区| 国产东北露脸精品视频| www一区二区| 在线观看国产91| 波多野结衣久草一区| 日韩国产高清在线| 国产丝袜欧美中文另类| 一本在线高清不卡dvd| 91麻豆国产自产在线观看| 五月婷婷另类国产| 精品国产91亚洲一区二区三区婷婷| 久久久久久国产精品一区 | 日本精品一区二区| 国产精品一区专区| 亚洲综合一区二区精品导航| 欧美成人bangbros| 亚洲精品在线观看免费| 91看片淫黄大片一级在线观看| 韩国精品一区二区| 亚洲精品免费在线观看| 精品国产乱码久久久久久牛牛 | 日韩一本精品| 99久久精品国产导航| 偷拍亚洲欧洲综合| 国产精品网站一区| 51久久夜色精品国产麻豆| 宅男av一区二区三区| 国产美女在线精品免费观看| 国产精品综合av一区二区国产馆| 亚洲欧美另类小说视频| 欧美刺激午夜性久久久久久久| 久久久久国产精品视频| 国产精品伊人日日| 国产高清在线精品| 性感美女久久精品| 亚洲欧洲精品一区二区三区 | 555夜色666亚洲国产免| 在线亚洲人成电影网站色www| 国产伦精品一区二区三区视频孕妇 | 亚洲视频 欧洲视频| 日韩一区二区视频| 婷婷五月色综合| 美日韩精品免费| 97伦理在线四区| 国产精品99久久久久久久女警| 亚洲国产综合91精品麻豆 | 亚洲aⅴ怡春院| 国产日韩欧美不卡| 欧美videos中文字幕| 欧美午夜精品久久久久久超碰| 老司机精品福利在线观看| 91色综合久久久久婷婷| 国产成人精品三级| 蜜桃视频第一区免费观看| 美女脱光内衣内裤视频久久网站| 亚洲综合成人在线视频| 亚洲欧洲精品天堂一级| 欧美岛国在线观看| 欧美日韩色综合| 欧美日韩久久久一区| 色国产精品一区在线观看| 亚洲精品中字| 日韩av一级大片| 裸模一区二区三区免费| 1卡2卡3卡精品视频| 99久久精品免费看国产一区二区三区 | 亚洲私人影院在线观看| 欧美国产综合色视频| 久久婷婷国产综合精品青草| 日韩一二三区视频| 欧美丝袜第三区| 色狠狠综合天天综合综合| 中文一区一区三区免费| 自拍另类欧美| 色婷婷精品大在线视频| 91情侣在线视频| 久久精品中文字幕一区二区三区| 国产精品入口免费| 精品久久久久久一区二区里番| 国产伦精品一区二区三区视频孕妇 | 国产综合久久久久久鬼色| 国产原创一区二区三区| 精品中文字幕一区二区小辣椒|