《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 嵌入式C語言開發ADSP21XX系列
嵌入式C語言開發ADSP21XX系列
摘要: 詳細介紹使用VisualDSP開發工具進行ADSP21XX的C語言編程的方法;分析其C語言運行庫的結構,并且結合實例介紹C語言工具的使用方法,包括C語言與匯編語言混合編程的方法,從C運行庫提取代碼用于自己的匯編語言程序的方法、修改運行庫的源代碼以適應自己開發需要的方法等。
Abstract:
Key words :

  引言

  長期以來,在DSP系統開發中,一直把匯編語言作為主要的開發工具;但匯編語言與自然語言差距很大,不易常,而且匯編語言是依賴于處理器的,不利于軟件的可重復利用和系統的穩定性,程序不易移植,給開發工作帶來了很大的困難。隨著嵌入式系統復雜程度的不斷提高,用匯編語言編寫一個巨大的程度將是困難,甚至是不可能的。為此,AD公司推出了針對ADSP21XX系列DSP的嵌入式C和C++語言集成開發工具,分別是VisualDSP和VisualDSP++系列,這些開發工具提供了C語言和C++語音的開發功能。以下就以筆者在實際開發中的一些經驗,結合VisualDSP6.1版本,介紹用C語言開發VisualDSP6.1版本,介紹用C語言開發ADSP21XX的方法。VisualDSP提供了一個開放源碼軟件組織GNU的C編譯器,和一套成熟穩定的C運行時間庫(C Run time Library)等。GNU的編譯器一向以編譯效率高著稱,在編譯后的代碼長度和運行速度方面非常優秀;C運行時間庫則把很多重復性的工作,如浮點運行、三角函數、FFT等作為C語言的庫函數,提供給用戶,大大提高了用戶的開發效率和程序的穩定性,降低了開發難度,另外,由于把這些庫函數的源代碼提供給了用戶,還提高了C語言與匯編語言之間的透明性,使用戶開發的程序兼具兩者的優點。

  1 Visual DSP簡介

  VisualDSP是AD公司的DSP開發工具,主要由可執行文件、庫文件和各種幫助文檔組成。6.1版本還帶有一個基于圖形界面,針對21XX系列DSP的軟件仿真和調試工具。

  VisualDSP的可執行文件包括匯編、編譯、鏈接工具以及可執行文件重新格式化工具等,見表1。

表1 VisualDSP的可執行文件及用途

VisualDSP的可執行文件及用途

  注:“*”代表該程序一般不單獨使用,而昌由G21.exe或ASM21.exe調用。

  VisualDSP套件中的軟件仿真調試工具DEBUGAPP,采用Windows圖形界面,使用方便。它的主要特點是:可以仿真調試從ADSP2101~2189全系列的DSP;支持斷點、單步、全速運行等各種常見調試方法;可以隨時查詢和修改DSP的程序RAM(PM)、數據RAM(DM)和各寄存器的內容;可以仿真中斷,進行可執行程序性能評估(Profile),因此可以進行時序仿真。DEBUGAPP是調試程序和驗證復雜算法的極好工具。

  VisualDSP6.1還提供了豐富的幫助文檔,包括21XX系列的用戶手冊、匯編和C語言工具以及仿真調試程序的使用手冊;還有C運行庫的參考手冊,列出了所有可用的C庫函數。

  2 C語言運行庫結構

  C語言運行時間庫是位于LIB目錄下的*.a文件,是整個C開發工具的核心之一,提供了大量的可以直接調用的庫函數。這些庫函數的函數原型包含在INCLUDE目錄下的頭文件中。這些頭文件有的還包含一些宏定義。另外,VisualDSP還把這些庫函數的匯編語言源代碼提供給出了用戶,方便了用戶從中提取有用的代碼,甚至修改源代碼,生成新的庫,來適應自己的要求。利用LIB21程序,還可以把自己的常用匯編子程序做成庫,或是將實時性要求較高的代碼用匯編語言來寫,做成庫,供C語言程序調用。

  VisualDSP的C語言運行庫由兩部分組成:應用程序框架和預定義的各種庫函數。

  不同的DSP型號有不同的硬件結構、中斷向量表,所以對應的應用程序框架庫也不同,相應的文件是21*_HDR.DSP.其中*代表不同的DSP型號。應用程序框架的主體是中斷向量處理部分,把中斷向量引到合適的地址。其中最重要的是對系統復位(RESET_VECTOR)的中斷向量的處理:

程序

  第一條指令是調用C庫函數中的_ _lib_setup_everything函數作程序啟動時的初始化工作。接下來,調用C語言程序中的main_函數,進入C程序的主體,也就是進入用戶自己程序,開始正常工作。主程序結束后,再調用_lib_prog_term函數,作程序退出時的結尾工作。由于嵌入式系統的特性,系統絕大多數都在主程序運行時被繼電了,所以_lib_prog_term得到執行的機會很小。

  其它的中斷向量由C運行庫來管理,匯編指令如下:

_Interrupt2:JUMP_lib_int2_ctrl;NOP;NOP;NOP;

  其中的_lib_int2_crtl就是C語言庫中控制INT2的函數。如果用戶要使用該中斷,應先把中斷服務程序用一個C庫函數Interrupt()把服務函數指針設定好,并打開相應的中斷允許位,當該中斷發生時,_lib_int2_ctr1函數就會控制DSP跳轉到相應的指針位置。

  VisualDSP預定義的C語言庫函數包括數學函數、FFT函數、ANSI標準內存管理和字符串管理函數的一個子集。所有的函數列表可參考VisualDSP的聯機文檔。這些庫函數以二進制代碼的形式,打包集合在lib*.a文件中,用戶的C語言程序可以像使用自己的子程序一樣方便地調用這些庫函數。下面是調用庫函數的一個例子。

 

程序

  編譯后產生的匯編源代碼中有call sin_指令,就是調用sin庫函數的匯編語言指令語句。

  從嵌入式開發的角度講,VisualDSP的C語言工具已經提供了一個操作系統雛形的功能。在AD公司的ADMC系列DSP中,已經把這些庫函數和一些電機控制專用的函數,以及程序加載功能,集成在了DSP的片內ROM中。

  3 C語言與匯編語言混合編程方法

  用C語言開發的缺點是不能精確控制程序運行的時間,對于實時性要求較高的應用,必須用匯編語言。VisualDSP為用戶提供了兩種與匯編語言的接口方法:用ASM()方法,直接嵌入匯編語言語句;用匯編語言編寫子程序,供C語言程序調用。為了支持C語言與匯編程序程序的接口,VisualDSP預定義了諸如FUNCTION_ENTRY、EXIT、SAVE_REG、RESTORE_REG等13個宏。限于篇幅,不詳細介紹其功能。使用這些宏以前,要包含asm_sprt.h頭文件。

  3.1 使用ASM()嵌入行的方法

  使用這一方法時,一定要注意各寄存器和堆棧當前的狀態,以免破壞程序運行的環境,產生錯誤的結果。VisualDSP保留了一些內部寄存器供用戶的匯編代碼使用。用戶可以自由地修改其內容,而不會對程序造成破壞。這些寄存器包括AR、AF、AY1、M5、11、16、MF、MR0等18個。如果不夠用,可以用系統定義的宏save_reg和restore_reg保護現場,得到另外11個可用寄存器。另外要注意的是,在匯編語言中操作C語言中定義的變量時,要在變量名后加下劃線。下面是一個嵌套匯編語言的例子:

程序

  編譯后的匯編語言代碼是

程序

  注意前者可能會破壞程序結構,因為它使用了未經保護的寄存器AX0;而由C語言產生的匯編代碼,則會自動選擇合適的臨時寄存器MY1。

  3.2 使用匯編子程序的方法

  使用匯編子程序是C語言程序與匯編語言接口的另一種方法。用戶定義的子程序放在單獨的匯編文件中,或是做成二進制的庫文件,并將子程序的定義用GLOBEL輸出,匯編后就可以供C語言程序調用。下面是一個不需要參數的子程序的例子:

程序

  如果匯編語言子程序中用到了參數,情況就復雜些。子程序中的入口參數前兩個一定要保存在AR、AY1中。如果參數多于兩個就要把其余的放在堆棧中。所有子程序的第一個返回值放在AR中。如果返回值不止一個,就要用到變量型參數或者指針來獲得取所有的返回值了。下面是一個有5個輸入參數、1個返回值的子程序例子。

程序

  注意其中的readsfirst和readsnext都是匯編語言接口宏。其功能是從堆棧中讀取所有的參數。

  4 C運行庫的匯編源代碼

  如果只用C語言來開發21XX程序,只要有C運行庫的二進制版就夠了。幸運的是,AD公司把所有C運行庫的匯編源代碼隨VisualDSP提供給了用戶,所以對那些用匯編語言開發的工程師來說,這些源代碼也提供了很大的幫助。因此這代表很多功能的子程序不需要自己去編碼、調試,用到某功能時只要把相應的匯編代碼鏈接進自己的程序就可以。C運行庫的源代碼是擴展名為DSP的文本文件?;旧弦粋€庫函數對應一個文件,文件名就是函數名。比如說sin.dsp是正弦、余弦查找、使用都很方便,但是對于其中的交叉調用要注意。

  反過來,用戶也可以把自己已經調試、驗證過的匯編子程序,做成二進制庫文件,供C程序調用,這樣可以大大提高軟件的可重復利用率。要制作二進制庫文件,只要用lib21.exe工具處理就行了。注意,生成的二制庫文件的名字必須以.a作為文件擴展名。

  筆者在實際的開發中,遇到這樣的情況,自制的2181目標板上有一個自己開忍氣吞聲駐留程序,通過軟件模擬的異步串口與PC通信,加載程序。但是這個駐留程序占據了0~0x500的空間,用戶開發的程序只能加載到從0x500開始的空間內,而用C語言開發的程序起始地址都是從0開始的。為了解決這個問題,只能自己修改2181_hdr.dsp源文件。首先把第一行的.MODULE/ABS=0改成.MODULE/ABS=0x500,然后匯編成obj文件,代替原來的文件。另外,在自己的程序中定義一個從0開始0x500大小的PM區域,并初始化成0,就可以防止編譯器在該區域內分配別的變量或程序代碼,這樣編譯后的可執行文件的0~0x500空間都是0,加載時把它剔除,而其它有用的指令代碼都在0x500之后,解決了這一個問題。

  5 總結

  從實際開發的經驗來看,VisualDSP的C語言開發功能十分豐富。雖然提供的庫函數只是ANSI的一個不完備子集,但是對于一般的工程開發來說已經足夠用了,而且VisualDSP還提供了C運行庫的源代碼,這對于解決函數不完備的問題也好處。用C語言開發的好處還包括開發時間大大減少,程序的穩定性大大提高,這對于面對激烈的市場競爭,對于減輕設計工程師的工作量都很有好處。最后,用C語言開發是趨勢,必將更加流行。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          国产一区二区三区久久久久久久久| 韩国福利一区| 国产午夜精品理论片a级大结局| 亚洲国产精品久久久久秋霞不卡| 欧美国产视频一区二区| 国产精品亚洲综合色区韩国| 欧美激情1区2区| 久久精品国产久精国产一老狼| 久久都是精品| 久久噜噜亚洲综合| 免播放器亚洲一区| 欧美一区在线看| 欧美综合国产| 久久频这里精品99香蕉| 国产有码在线一区二区视频| 久久亚洲影音av资源网| 一本一本久久a久久精品牛牛影视| 欧美日韩国产区| 亚洲免费不卡| 欧美性色aⅴ视频一区日韩精品| 久久精品在线视频| 国产精品久久久久av| 在线免费观看日本欧美| 欧美日本精品| 亚洲高清成人| 国产综合色精品一区二区三区| 激情亚洲一区二区三区四区| 亚洲网站视频福利| 日韩亚洲欧美在线观看| 亚洲先锋成人| 欧美国产91| 精品电影一区| 亚洲国产三级| 欧美精品一区二区高清在线观看| 国产精品久久久久久久久借妻| 亚洲直播在线一区| 久久久久综合一区二区三区| 国产欧美91| 理论片一区二区在线| 在线日韩一区二区| 国产精品www色诱视频| 亚洲欧美日韩另类精品一区二区三区| 韩日成人av| 欧美日韩国产成人在线免费| 亚洲一级电影| 一区二区三区回区在观看免费视频| 欧美日韩的一区二区| 亚洲美女福利视频网站| 一区二区在线看| 欧美国产在线视频| 欧美国产在线观看| 一区二区三区在线观看视频| 最近中文字幕mv在线一区二区三区四区| 国产精品爱啪在线线免费观看| 美日韩丰满少妇在线观看| 亚洲欧洲一区二区三区久久| 亚洲国产精品va在看黑人| 老司机午夜精品| 欧美a级大片| 久热这里只精品99re8久| 午夜亚洲性色视频| 狠狠爱成人网| 欧美一区二区三区喷汁尤物| 亚洲乱码国产乱码精品精天堂| 午夜精品成人在线视频| 午夜精品美女久久久久av福利| 一区二区三区高清视频在线观看| 久久精品亚洲一区二区三区浴池| 久久人人爽人人爽| 欧美午夜电影网| 欧美一级久久久| 国产精品国产三级国产普通话蜜臀| 国产精品老牛| 欧美精品久久久久久| 欧美一区二区三区精品电影| 国产女主播一区二区三区| 午夜久久99| 欧美日韩美女一区二区| 国产日韩欧美另类| 国产精品婷婷午夜在线观看| 欧美视频专区一二在线观看| 欧美日韩国内自拍| 免费看精品久久片| 亚洲观看高清完整版在线观看| 在线亚洲欧美| 国产欧美视频一区二区三区| 国产精品呻吟| 欧美日韩亚洲高清| 久久国产一区二区三区| 久久一区二区三区四区五区| 国产色婷婷国产综合在线理论片a| 久久精品视频亚洲| 久久夜色精品一区| 免费中文字幕日韩欧美| 在线视频国内自拍亚洲视频| 亚洲线精品一区二区三区八戒| 亚洲精一区二区三区| 老司机免费视频一区二区| 午夜在线播放视频欧美| 国产一区二区三区四区在线观看| a4yy欧美一区二区三区| 麻豆精品视频在线| 亚洲黄色有码视频| 亚洲福利视频一区二区| 亚洲人成毛片在线播放| 欧美h视频在线| 狠狠色狠狠色综合日日tαg| 久久综合色婷婷| 欧美巨乳在线观看| 欧美精品激情blacked18| 女仆av观看一区| 日韩视频一区二区在线观看| 免费看av成人| 国产一区二区你懂的| 欧美在线视频免费| 国产精品久久久久77777| 亚洲美女网站| 欧美人与禽性xxxxx杂性| 欧美高清一区| 久久爱www| 欧美在线三区| 亚洲美女av电影| 国产精品色婷婷久久58| 亚洲第一网站| 国产一区欧美| 久久疯狂做爰流白浆xx| 国产日韩欧美在线视频观看| 亚洲永久字幕| 久久精品国产亚洲高清剧情介绍| 欧美另类视频| 国产精品久久夜| 国产一区二区三区电影在线观看| 国产精品捆绑调教| 欧美日韩视频在线观看一区二区三区| 在线观看国产精品淫| 欧美一级艳片视频免费观看| 国产精品高潮呻吟| 亚洲黄色视屏| 欧美福利视频网站| 国产乱理伦片在线观看夜一区| 国产农村妇女毛片精品久久莱园子| 麻豆成人av| 免费观看成人| 久久综合九色综合网站| 亚洲美女视频| 欧美jizz19hd性欧美| 国产亚洲一区在线播放| 黄色在线一区| 欧美freesex交免费视频| 精品二区久久| 欧美激情中文字幕乱码免费| 欧美在线视频观看免费网站| 午夜视频久久久久久| 国产精品激情偷乱一区二区∴| 国产三级精品三级| 欧美日韩国产色视频| 国产日韩av高清| 久久久91精品国产一区二区精品| 韩国美女久久| 午夜精品视频在线观看| 一区二区三区在线高清| 欧美成人日本| 亚洲丶国产丶欧美一区二区三区| 久久www成人_看片免费不卡| 欧美国产在线视频| 亚洲电影自拍| 国产精品久久久久9999高清| 久久久久成人精品免费播放动漫| 欧美+日本+国产+在线a∨观看| 欧美日韩四区| 欧美成人午夜激情在线| 欧美色视频一区| 国产一区二区久久精品| 久久精品国产第一区二区三区最新章节| 99精品热视频只有精品10| 欧美大片网址| 久久精品午夜| 欧美在线视频一区二区三区| 欧美激情中文字幕一区二区| 国产精品扒开腿做爽爽爽视频| 欧美电影在线免费观看网站| 欧美久久婷婷综合色| 一区二区不卡在线视频 午夜欧美不卡'| 欧美日韩精品一区二区三区四区| 欧美1区2区视频| 久久久人成影片一区二区三区观看| 久久综合色播五月| 欧美日韩国产区| 欧美成熟视频| 亚洲欧美一区二区原创| 怡红院精品视频| 亚洲嫩草精品久久| 久久久www免费人成黑人精品| 美女黄毛**国产精品啪啪| 国产精品v一区二区三区| 欧美成年人视频网站| 亚洲一区二区三区四区五区黄| 国产在线高清精品| 亚洲一区二区三| 亚洲精品看片| 亚洲欧美国产不卡| 欧美精品一区二区高清在线观看| 国产一区在线看| 尤物网精品视频| 欧美激情aⅴ一区二区三区| 欧美日韩一区在线观看| 欧美一区2区三区4区公司二百| 国产欧美精品国产国产专区| 亚洲欧美中文另类| 久久久999国产| 欧美一区免费视频| 久久久精品日韩| 久久久久久久尹人综合网亚洲| 国产精品亚洲а∨天堂免在线| 免费成人黄色av| 99riav1国产精品视频| 欧美暴力喷水在线| 久久天堂av综合合色| 久久久久成人精品免费播放动漫| 亚洲国产成人91精品| 欧美成人午夜激情视频| 伊大人香蕉综合8在线视| 国产综合自拍| 国产在线精品自拍| 午夜在线a亚洲v天堂网2018| 黄色在线成人| 亚洲日本中文字幕| 亚洲精品资源美女情侣酒店| 亚洲国产一区视频| 国产精品久久久一区二区| 久久精品夜夜夜夜久久| 国内成人精品2018免费看| 欧美大片网址| 国产亚洲一级| 国产欧美日韩伦理| 永久免费毛片在线播放不卡| 久久午夜羞羞影院免费观看| 久久综合九色综合久99| 欧美国产一区视频在线观看| 中日韩午夜理伦电影免费| 久久久一区二区三区| 亚洲午夜日本在线观看| 欧美承认网站| 久久综合中文字幕| 欧美精选一区| 欧美色另类天堂2015| 老司机亚洲精品| 黄色综合网站| 国内精品久久久久影院优| 国产亚洲一区二区三区在线观看| 欧美在线观看视频一区二区三区| 亚洲精一区二区三区| 91久久中文| 国产日韩精品一区二区三区| 久久婷婷久久一区二区三区| 女女同性精品视频| 欧美色道久久88综合亚洲精品| 欧美va亚洲va日韩∨a综合色| 亚洲精品美女免费| 国产视频久久久久久久| 在线中文字幕日韩| 久久久久久久久久久成人| 国产亚洲一区在线播放| 国产精品成人免费精品自在线观看| 国产婷婷色综合av蜜臀av| 亚洲国产日韩精品| 国外成人性视频| 久久久精品免费视频| 小嫩嫩精品导航| 亚洲一级二级在线| 一区在线播放视频| 亚洲欧美日韩视频二区| 欧美一区二区三区在线看| 欧美激情网友自拍| 亚洲欧美视频一区二区三区| 国产午夜精品久久久久久久| 在线精品一区二区| 美乳少妇欧美精品| 模特精品在线| 99视频超级精品| 在线观看亚洲一区| 激情国产一区二区| 欧美三级在线| 欧美成人黑人xx视频免费观看| 久久久无码精品亚洲日韩按摩| 亚洲视频网在线直播| 欧美专区在线观看一区| 欧美男人的天堂| 免费观看成人网| 国产综合激情| 91久久精品一区二区三区| 亚洲一品av免费观看| 亚洲日本无吗高清不卡| 欧美成人综合在线| 亚洲国产岛国毛片在线| 久久视频一区二区| 国内精品久久久久国产盗摄免费观看完整版| 免费一级欧美片在线观看| 久久久久国色av免费观看性色| 欧美日韩国产精品一区二区亚洲| 国产欧美一区二区白浆黑人| 国产精品jvid在线观看蜜臀| 亚洲综合第一| 久久不射中文字幕| 国产主播一区| 午夜在线不卡| 欧美精品一区二区三区很污很色的| 欧美一区二区三区四区在线观看地址| 欧美一区亚洲一区| 国产精品v欧美精品∨日韩| 亚洲午夜在线| 亚洲精品久久久一区二区三区| 亚洲欧美激情一区二区| 在线观看成人av电影| 国产精品久99| 欧美在线视频日韩| 欧美在线视频一区| 麻豆成人综合网| 欧美在线影院在线视频| 免费亚洲视频| 国产欧美精品xxxx另类| 国产欧美日韩另类视频免费观看| 国产精品一区三区| 亚洲免费在线观看视频| 亚洲精品国产精品国自产观看浪潮| 欧美韩日一区| 国产欧美日本在线| 国产精品v一区二区三区|