成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

DSP-TSl01S嵌入式系統的混合編程

開發
ADSP-TSl01S是美國ADI公司推出的一款具有極高性能的數字信號處理器(DSP)芯片,其專為大信號處理任務和通信應用進行了結構上的優化設計,在嵌人式信號處理中得到廣泛應用。ADSP-TSl01S的軟件設計可以采用匯編語言、高級語言(C/C++)或高級語言與匯編語言混合編程。

ADSP-TSl01S是美國ADI公司推出的一款具有極高性能的數字信號處理器(DSP)芯片,其專為大信號處理任務和通信應用進行了結構上的優化設計,在嵌人式信號處理中得到廣泛應用。ADSP-TSl01S的軟件設計可以采用匯編語言、高級語言(C/C++)或高級語言與匯編語言混合編程。完全采用匯編編程,執行效率高,但對于復雜算法編寫難度大,開發周期長,可讀性和可移植性差;而完全采用C編程雖然可以彌補匯編的缺陷,但是程序的執行效率相對較低,大概只有匯編程序的10%~20%,對于實時性要求很高的處理,如雷達信號處理,很難滿足要求。采用混合語言編程,用c語言構建框架,用匯編完成運算量較大的核心處理模塊及硬件底層管理,就可以把兩者的優點有效地結合起來。C和匯編語言的混合編程有三種形式:一是對C程序編譯后形成的匯編程序進行手工修改與優化;二是直接在C代碼中插入匯編語句,只需在匯編語句兩邊加上雙引號和括號,在括號前面加上標識“asm,如asm(“匯編語句”);三是分別編寫C程序和匯編程序,再獨立編譯成目標代碼模塊鏈接。***種方法對程序可讀性負面影響較大。第二種方法適用于C與匯編效率差異較大的情況,如進入中斷的中斷子程序等。第三種方法最常用,需要遵循一些規定的接口規范和標準。

1 混合編程的接口規范和標準

①在C/C++環境下,TigerSHARC定義了一套嚴格的寄存器規則,它分為三類:

***類是保留寄存器,j16~j25、k16~k25、xr24~xr31、yr24~yr31,共40個,作為編譯系統庫函數專門使用的寄存器。編寫程序時應避免使用這些寄存器,以免誤改了系統庫函數。若在子程序中使用到,必須在被調用時保存,調用完后釋放。

第二類是堆棧專用寄存器,k26、27和j26、j27四個,這些寄存器在調用時都需要保護。
第三類是高速暫存寄存器,包括除了以上兩類寄存器以外的所有寄存器。用法和匯編中的普通寄存器是一樣的,使用前不需要保存寄存器內容。

在默認情況下,cjmp寄存器用作存放被調函數的返回地址,但在嵌套調用中,這個值會被修改。為了保證安全返回,一般把返回地址存放在堆棧頂偏移地址為0的地方。

函數調用有時需要參數傳遞,通常,若參數少于5個,則通過寄存器傳遞,如表1所列。

 

如果在C/C++調用函數中作了正確的函數返回聲明,則被調用的匯編函數可使用寄存器j8、xr8和xr9返回有效值。j8用于返回整數或地址;xr9:8可提供雙字結果返回。若返回值大于2個字長,則必須為它們分配存儲空間,令j8為返回值,指向該空間的首地址即可。

②在C/C++中聲明的全局變量及函數,匯編中加“一”前綴才能使用;在匯編中的對象必須用”一”前綴命名,并用.g10bal聲明為全局變量,才可在C/C++中訪問到。具體格式如表2所列。

 

2 混合編程的調用和中斷

2.1 函數調用

C編譯器對函數調用有一系列嚴格的規則。除了特殊的運行支持函數外.任何函數與c函數互調都必須遵循這些規則。函數調用的標準運行模式為:①調用者將參數莊人堆棧。壓入時按照反序進行,即最右邊的參數位于堆棧的頂部。②調用函數。③調用結束時,調用者將參數彈出堆棧并返回。整個過程離不開堆棧操作。函數調用中的堆棧結構示意圖如圖1所示。

①保護函數的返回地址及相關寄存器:把函數返回地址保存在j27+0的位置(棧頂),同時設置jZ6為j27-0x40(棧底),得到長度為64的棧區,并在棧區內保護相關寄存器。

②分配局部變量:在局部變量賦初值的時候,系統在堆棧內給它分配一個空間。

③傳遞函數參數:前4個參數傳遞給相應寄存器(見表1),后續參數按順序裝載到堆棧j27+0xC起始的空間中。注意,如果傳遞的參數是結構類型,則其所有元素將入棧。例:第五個參數是兩元素的結構體,則元素一放于jZ7+0xC,元素二放于j27+0xD,匯編子程序在使用參數時只需從對應的位置上讀取即可。

C環境在調用C函數時自動管理這些操作,當匯編與C接口時,必須采用與C一樣的方式進行操作。這個過程可用圖1詳細描述。特別需要注意的是,由于C編譯器不提供檢查堆棧溢出的任何手段,因此必須保證有足夠的空間用于堆棧;否則若發生溢出現象,將破壞程序的運行環境,從而導致程序的癱瘓。

2.2 中 斷

中斷是DSP控制程序執行的重要方式。通常,DSP工作在包含多個外部異步事件的環境中,這些異步事件的隨機發生要求DSP能中斷當前的處理程序并轉向執行該事件處理程序,執行完后又要求返回被中斷的原程序繼續處理步驟,這一過程就是中斷。中斷源可以來自片內或片外的設備,例如時鐘、A/D等。中斷的設置包含兩步——①打開中斷屏蔽寄存器的相應中斷位,②設置中斷服務程序的入口地址,這樣就能實現中斷的正常運行。中斷服務程序是特殊的函數,不能帶返回值,不能傳遞參數,內容須短而有效。標準運行模式為:①保存斷點地址并保護所有用到的寄存器,②執行中斷服務程序,③釋放寄存器并返回。

3 程序優化

程序優化包括匯編優化和C優化。手寫匯編程序的優化空間相當大,可以產生非常高效的程序代碼。由于許多相關書籍都有介紹,就不再贅述,這里主要介紹C程序的優化。

一般DSP的C編譯器都會提供優化編譯器,采用優化編譯就可以生成效率更高的匯編代碼,在某些情況下,執行優化的程序代碼要快10~20倍。從某種程度上說,C程序的效率主要取決于C編譯器所能進行優化的范圍和數量。應說明的是,TSl01S編譯器的默認設置是不使用優化器,它可以進行以下幾個不同級別的優化,優化程度由低到高:

 

 

 

【編輯推薦】

  1. 讓Perl成為你的嵌入式開發工具
  2. 嵌入式設備上的 Linux 系統開發
  3. 幾種Linux下嵌入式開發環境的簡單介紹
責任編輯:張燕妮 來源: cnemb.com
相關推薦

2020-04-22 11:51:41

物聯網嵌入式編程IOT

2011-05-24 17:34:38

嵌入式系統

2022-01-03 23:33:40

Linux組件系統

2023-11-28 09:17:05

Linux編程

2020-07-03 07:00:00

Linux組件

2009-06-26 16:18:40

Windows Emb

2021-12-19 22:34:45

Linux容器系統

2022-02-19 22:47:46

編程語言開發C++

2011-04-14 15:14:36

嵌入式操作系統嵌入式

2012-07-30 14:13:11

Linux 2.6內核嵌入式

2012-03-09 09:45:29

Windows嵌入式操作系統

2009-06-26 16:05:04

嵌入式Linux

2009-07-20 09:53:43

Java混合編程

2011-01-06 15:11:09

嵌入式linux

2023-09-18 14:39:39

2011-04-25 10:25:43

OpenEmbedde嵌入式Linux

2017-12-21 10:43:44

Linux嵌入式終端

2009-12-17 18:38:56

Fedora 7嵌入式

2009-04-11 15:22:24

Linux 2.6內核應用

2020-06-15 07:00:00

Linux嵌入式系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区视频在线免费观看 | 亚洲成色777777在线观看影院 | 色约约视频 | 亚洲一区二区三区 | 欧美一区免费在线观看 | 欧美视频精品 | 久久久久久成人 | 国产亚洲精品久久久久久牛牛 | 五月天天色 | 自拍偷拍亚洲一区 | 日韩av一区二区在线观看 | 亚洲欧洲一区 | 国产盗摄视频 | 国产女人与拘做受免费视频 | 亚洲国产成人av | 精品国产91乱码一区二区三区 | 色小姐综合网 | 欧美成人免费在线 | 人人看人人草 | 欧美激情精品久久久久久变态 | 91av免费看 | 精品无码久久久久久国产 | 国产一级毛片视频 | 日韩三级在线观看 | a级毛片基地 | 国产黄色av网站 | 日韩精品一区二区三区中文在线 | 久久久久国产精品 | 狠狠干综合视频 | 亚洲精品99| 日韩精品一区二区三区视频播放 | 欧美日韩在线高清 | 一级片免费视频 | 亚洲成人免费在线 | 欧美综合一区二区三区 | 国产日批| 日韩av资源站 | 婷婷丁香在线视频 | 成人性视频在线播放 | 久久网一区二区三区 | 久www|