在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

有利于嵌入式系統軟件優化的混合編程介紹

電子設計 ? 作者:電子設計 ? 2018-11-02 08:09 ? 次閱讀

ADSP-TS101S是美國ADI公司推出的一款具有極高性能的數字信號處理器(DSP)芯片,其專為大信號處理任務和通信應用進行了結構上的優化設計,在嵌人式信號處理中得到廣泛應用。ADSP-TS101S的軟件設計可以采用匯編語言、高級語言(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所示。

有利于嵌入式系統軟件優化的混合編程介紹

ADSP-TS101S的堆棧是一個先入后出存儲區(如圖1),用堆棧指針(j/k27)和幀指針(j/k26)來管理堆棧。調用函數時,編譯器在運行棧中建立一個幀以存儲信息,當前函數幀稱為局部幀。j/k26指向當前函數的局部幀的開始,即棧底。j/k27指向棧頂,工作方式是向低地址變化。每調用一次函數,就建立一個新幀。C環境利用局部幀來實現如下功能:

①保護函數的返回地址及相關寄存器:把函數返回地址保存在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等。中斷的設置包含兩步--①打開中斷屏蔽寄存器的相應中斷位,②設置中斷服務程序的入口地址,這樣就能實現中斷的正常運行。中斷服務程序是特殊的函數,不能帶返回值,不能傳遞參數,內容須短而有效。標準運行模式為:①保存斷點地址并保護所有用到的寄存器,②執行中斷服務程序,③釋放寄存器并返回。

ADSP-TS101s中C語言中斷實現有兩種方法:一種是采用interrupt(int,vuid(*func(int)))函數來設置中斷矢量表,這個函數定義在signal.h頭文件中。第一個參量表示需響應的中斷位,在這個頭文件中也有定義;第二個參數即是中斷服務程序。應該引起注意的是,采用這種方法時,IMASK寄存器的異常中斷位必須打開,因為interrupt()庫函數要使用trap語句來產生陷阱,必須打開異常中斷,陷阱才能設置成功,中斷矢量表的設置才能完成,否則,中斷來l臨并不會進入指定的中斷服務程序。另一種與匯編語言中斷服務程序的實現類似。以定時器O為例,設置好IMASK后,用_builtin_sysreg_write(_ⅣTIMEROHP,(int)timer0h_isr)函數設置中斷矢量表,用#pragma interrupt來標識中斷服務程序即可。這種方法更簡單快捷,但它只適用于Visua1DSP 3.5以上版本,而第一種方法適用于任何版本。

3 程序優化

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

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

①Debugging:“-g”開啟。編譯器產生調試信息,以確保目標碼與相應的源代碼匹配。

②DefauIt:編譯器進行基本的高級優化。例如對明確標明的內聯函數進行內聯。

③Procedural optimization:“-o”啟動。編譯器對要編譯的文件中的每一過程進行高級優化。如果同時開啟“-g”,由于“-O”項有更高的優先級,會限制調試功能。

④Interprocedural optimization:“-ipa”打開。除了基本優化外,編譯器將對所有源文件的整個程序進行高級優化操作,將刪除從沒被調用的函數和變量,會明顯減少代碼長度。

以上“-g”、“-O”、“-ipa”在編譯信息中可以看到。優化級越高,優化的范圍就越廣。應注意的是,使用C優化編譯可以提高程序的運行效率,但由于優化時采用了一些優化措施,使得C和匯編的交叉列表文件不如在不用優化時得到的那樣清晰。因此,在調試程序時,最好先不用優化編譯進行調試,待程序調試成功后再用優化編譯進行優化。采用C優化編譯時,為了保證程序的正確性,特別需要注意幾點:

①使用asm行匯編語句時必須特別小心。優化器在優化過程中會對程序代碼重新進行組織,寄存器使用也比較靈活,同時程序中的有些變量或表達式可能會被刪除。雖然asm語句不會被刪除,但asm語句的前后環境可能因優化而發生很大的變化。因此,當asm語句涉及到C環境或訪問C變量時,使用優化器可能會得到不正確的結果。此時,必須對編譯后得到的匯編語句進行仔細的檢查,以確保asm語句在程序中的正確性。一般而言,當asm語句僅涉及諸如控制中斷寄存器或I/0口等硬件操作時,使用優化是比較安全的。

②在高級優化中,C語言源函數中從未使用過的變量和函數將被刪除。若匯編子函數的C外部變量在C程序中從未使用過,有可能被刪除并導致編譯失敗。使用retain_name pragma可以避免變量和函數因優化而被刪除。例如:

保留函數

有利于嵌入式系統軟件優化的混合編程介紹

③使用volatile變量避免優化。一個定義為volatile的變量是說這個變量可能會被意想不到地改變,比如,并行設備的硬件寄存器(如狀態寄存器),一個中斷服務子程序中會訪問到的非自動變量,多線程應用中被幾個任務共享的變量。采用volatile限定詞,優化器在用到這個變量時必須每次都重新讀取這個變量的值,而不是使用保存在寄存器里的備份。

④C語言程序應盡量避免使用指針運算。指針轉換會在一定程度上降低運行效率。

⑤在“-ipa'‘使能的情況下,在循環前使用#pragmann_alias可以起到進一步優化程序的功能。一般來說,對于循環中不存在迭代運算(使用上一次結果)的情況,優化效果很好。

⑥使用PM限定詞定義數據塊。默認情況下數組存放在DM區,即第一塊數據區(0x80000-0x8ffff)中。使用PM限定的數組放在第二塊數據區(0x100000-0x10ffff)中。由于兩塊數據區有獨立的128位數據總線相連,因此可以實現單周期內的雙數據同時訪問。

4 混合編程在系統程序管理中的應用

下面是一個嵌入式系統管理實例。系統由4片DSP構成,作為系統管理的DSP0負責通過IRQ0接收控制臺從RS232串口傳來的控制字,譯碼,并通過控制flag3產生下降沿觸發IRQ3中斷來啟動其他各片DSP.這里用C搭建框架,匯編控制底層硬件,效率高,可讀性強。由于篇幅限制,這里略去了串口初始化、串口數據接收函數以及其他芯片的處理程序。

以下是系統管理中的混合編程。

Main.c文件:

有利于嵌入式系統軟件優化的混合編程介紹

有利于嵌入式系統軟件優化的混合編程介紹

有利于嵌入式系統軟件優化的混合編程介紹

5 總 結

實踐證明,采用混合編程的軟件更加符合一般系統對時間和空間的嚴格約束。設計良好的混合編程軟件既能有效滿足嵌入式系統對功能與性能的需求,也可以為程序的擴展和移植預留足夠的空間。總之混合編程是嵌入式系統軟件優化的重要途徑。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19829

    瀏覽量

    233867
  • 芯片
    +關注

    關注

    459

    文章

    52282

    瀏覽量

    437487
  • 嵌入式
    +關注

    關注

    5143

    文章

    19569

    瀏覽量

    315656
  • 匯編語言
    +關注

    關注

    14

    文章

    410

    瀏覽量

    36632
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    什么是嵌入式系統

    什么是嵌入式系統嵌入式系統一般指非PC系統,它包括硬件和軟件兩部分。硬件包括處理器/微處理器、
    發表于 08-12 14:37

    嵌入式系統軟件嵌入式系統軟件

    嵌入式系統軟件嵌入式系統軟件
    發表于 08-20 10:24

    解析嵌入式軟件開發語言:嵌入式C編程

    系統,如需要功耗只有mW甚至μW級。 3、具有功能很強的存儲區保護功能。這是由于嵌入式系統軟件結構已經模塊化,而為了避免在軟件模塊之間出現
    發表于 10-18 10:09

    嵌入式系統軟件編程語言

    獨立工作的器件。 嵌入式系統軟件部分包括操作系統軟件(要求實時和多任務操作)和應用程序編程。操作系統
    發表于 07-17 07:34

    混合編程嵌入式系統軟件優化中有什么優勢?

    。ADSP-TS101S的軟件設計可以采用匯編語言、高級語言(C/C )或高級語言與匯編語言混合編程。完全采用匯編編程,執行效率高,但對于復雜算法編寫難度大,開發周期長,可讀性和可移植性差;而完全采用C
    發表于 08-23 07:59

    求一種基于VB和VC++混合編程的EMI標準自動測試系統軟件設計

    求一種基于VB和VC++混合編程的EMI標準自動測試系統軟件設計
    發表于 04-27 06:37

    嵌入式系統軟件開發環境

    嵌入式系統的概念嵌入式系統的基本架構嵌入式操作系統的基本組成和分類
    發表于 11-08 08:37

    構造嵌入式系統軟件的構件模型研究

    目前嵌入式系統軟件開發方法不利于嵌入式系統的發展,如何將高級的構件技術應用到嵌入式
    發表于 06-03 09:55 ?17次下載

    嵌入式系統軟件編程語言

    嵌入式系統軟件編程語言 1、引言:  隨著計算機技術和微電子技術的迅速發展,嵌入式系統應用領域越來越廣泛。當今,
    發表于 01-15 10:24 ?811次閱讀

    基于ARM的嵌入式系統軟件設計部分

    基于ARM的嵌入式系統軟件設計部分
    發表于 01-14 12:32 ?15次下載

    ARM的嵌入式系統軟件設計

    ARM的嵌入式系統軟件設計
    發表于 10-27 15:00 ?8次下載
    ARM的<b class='flag-5'>嵌入式</b><b class='flag-5'>系統軟件</b>設計

    基于RTOS的嵌入式系統軟件設計

    基于RTOS的嵌入式系統軟件設計說明。
    發表于 04-19 14:38 ?17次下載

    EE-125:ADSP-218x嵌入式系統軟件管理和在系統編程(ISP)

    EE-125:ADSP-218x嵌入式系統軟件管理和在系統編程(ISP)
    發表于 05-18 16:37 ?10次下載
    EE-125:ADSP-218x<b class='flag-5'>嵌入式</b><b class='flag-5'>系統軟件</b>管理和在<b class='flag-5'>系統編程</b>(ISP)

    基于RTOS的嵌入式系統軟件的設計講解

    基于RTOS的嵌入式系統軟件的設計講解(樹莓派嵌入式開發板)-該文檔為基于RTOS的嵌入式系統軟件的設計講解文檔,是一份很不錯的參考資料,具
    發表于 07-30 10:03 ?8次下載
    基于RTOS的<b class='flag-5'>嵌入式</b><b class='flag-5'>系統軟件</b>的設計講解

    慕課嵌入式系統(第五章.ARM匯編與C混合編程)

    慕課電子科技大學.嵌入式系統.第五章.ARM匯編程序設計.ARM匯編與C混合編程0 目錄5 ARM匯編程序設計5.3 ARM匯編與C
    發表于 11-04 10:21 ?16次下載
    慕課<b class='flag-5'>嵌入式</b><b class='flag-5'>系統</b>(第五章.ARM匯編與C<b class='flag-5'>混合編程</b>)
    主站蜘蛛池模板: 天天摸夜夜摸成人免费视频 | 狠狠噜天天噜日日噜 | 欧美精品一区二区三区视频 | 国产精品波多野结衣 | a一级| 天天躁夜夜躁狠狠躁2024 | 天天做天天爱天天爽综合网 | 天堂综合| 午夜影院黄色片 | 一级片 在线播放 | 黄色毛片免费网站 | 国产精品美女www爽爽爽视频 | 亚洲一区二区视频 | 亚洲国产一区二区三区在线观看 | 欧美性色xo影院在线观看 | 国产激情久久久久影院小草 | 国产香港三级理论在线 | 色中色软件 | 欧美一级在线观看播放 | 激情五月五月婷婷 | 欧美国产黄色 | 美女扒开内裤无遮挡禁18 | 日本天堂影院 | 久久综合九色综合97_ 久久久 | 在线电影天堂 | 久久久噜噜噜久久久午夜 | 中文天堂网 | 在线免费观看一级片 | 国产三级日本三级美三级 | 手机看片福利永久 | 国产美女一级ba大片免色 | 加勒比视频网站 | 狠狠操狠狠搞 | 国产午夜精品理论片久久影视 | 男女吃奶一进一出动态图 | 91视频综合网 | 欧美一区二区三区男人的天堂 | 男啪女色黄无遮挡免费观看 | 欧美日本一区二区 | 日本三级最新中文字幕电影 | 乱说欲小说又粗又长 |