dsp編程語言
『壹』 dsp要用到匯編語言嗎
肯定要匯編,你不用怕,匯編用得很少,你最好學學匯編,至少要看得懂(不難),絕大多數情況都是把匯編COPY過來用,c語言編程占據99%,剩下1%的匯編你搞不定,整個程序你就OVER了。
『貳』 請問DSP的CCS開發平台使用的編程語言是C語言還是C++
主要是C,可以匯編同用
『叄』 對DSP而言,CCS用C語言編程和匯編編程,二者的效率相差多少
我用的是28XX系列的,不知道經驗對你有沒有用,因為不同系列的晶元多少有些差別。
TI提供的庫已經相當可以了,兼顧易用與效率。我當時做過這樣的測試
1. 用IQMATH實現
2. 直接C語言實現
3. C語言優化實現
4. 原生匯編實現
IQMATH的運行周期在1000左右,比方案3快幾十個周期,比方案4慢幾個周期,方案2是10000多個周期。
另外,因為只是單獨測的演算法,匯編之所以快是快在寄存器的使用上,操作數可以直接入寄存器,但是考慮到程序其他部分是用C語言編寫的話,把操作棧的時間也加上,並不比方案1快。畢竟我對TI的匯編吃的也不透。
在編寫上,無疑是方案1提供了最接近C語言風格的實現,幾乎不用考慮ISA方面的問題。
另外對於執行效率,我覺得主要考慮三點:
1.分支的使用
CCS對C語言的優化我沒做過太多比對。其實單從反匯編的結果看,我接觸過的嵌入式開發環境的編譯器都能做出很好的優化。但是幾乎每個編譯器都會在邏輯的優化上有欠缺——它只能對一些顯而易見的判斷條件進行優化,而在寫程序的過程中,我們經常出於易讀性的考慮,或者穩定性的考慮,或者其他的考慮加入幾乎不會發生的分支,這樣的分支判斷會消耗一定比率的代碼段執行效率,視乎代碼段內有用功能的長度而定,越長這個比率越小,越短這個比率越高。
2.一般操作,就是各種賦值操作
在一般的操作上,編譯器的優化已經很令人滿意了,基本上可以作為編寫匯編的範本。我覺得所謂效率能達到90%就是針對這個部分說的。
3.特殊操作,比如對整塊內存的操作,或者是浮點運算上。
在一些特殊的操作上,就要看是否有現成的庫,或者看硬體是否支持。比如對整塊內存操作就別用循環一個位元組一個位元組的搬了。
以上三點都能考慮到的話,相信執行效率方面已經沒有太大的提升空間了。
另外如果你的代碼發生在初始化部分,也就是只在系統運行開始的時候運行一次,那麼優化不優化其實沒有太大的必要,除非你對系統初始化的時間有嚴格的要求。但是如果你的代碼是作為任務要被反復運行的,那就有優化的必要了。
在CCS里有代碼消耗時鍾周期的統計,如果你覺得某段代碼效率低下的話,可以先分段進行消耗時鍾周期的計算,這樣優化比較有針對性。
『肆』 新手學習DSP的C語言編程,請高手指點:
C6713沒用過,我用過TMS320F2812的晶元。建議你先熟悉一下CCS開發環境,然後再認真的看代碼。TI的DSP,封裝了很多的頭文件,沒有必要全部都要看看頭文件里是怎麼寫的。最好先把整個程序的運行流程看懂。然後結合晶元手冊,看看每一步怎麼做的,是如何通過配置寄存器、如何使用外設等等。關鍵還是看晶元手冊。等熟悉了之後,再深入看頭文件啥的。
『伍』 DSP用什麼語言 有沒有什麼書
那要看你用什麼片子了,還有老師有什麼要求或者工作中有什麼要求,一般來說是匯編語言和c語言。我現在在用2407的片子做一個fir濾波器,基本上是用c語言。
匯編雖然比較簡單和直觀,但是在編程的過程中匯編語言的程序比較長。
相對而言c語言要有一定的基礎,編程的時候比較繁瑣但是要有一定基礎程序可以簡單,可以嵌套許多函數什麼的,程序分塊化處理對於編程的人員就比較輕鬆了。
不知道你是剛剛學習還是有了一定的基礎(c語言基礎),如果想要好好學習的話還是弄本書看看,要簡單一點的,弄清楚片子的基本結構和中斷的使用,還有就是要實踐,多多實踐,我在看一本書是專門講2407片子的使用的,叫做《TMS320X240XDSP原理及應用開發指南》是北京航天航空大學出版社出版的,作者是:趙世廉
還有就是你要用什麼樣的的片子做東西。TI公司(德州電氣公司【美國的公司,世界上也是很著名的公司】)生產的片子有三個系列,他們分別是:C2000,C5000和C6000,性能也是從低到高的,還有什麼問題的話還是多多問問老師,和多看看書。。一般而言,2812的片子要好一點,當然看你是不是要處理高頻信號,如果是高頻信號的話就要跟高級的晶元了,因為處理的速度是高級晶元快但是價格也比較高。做的時候還要考慮成本的問題。
不知道我的答案有沒有什麼不妥之處。希望我的回答對你有幫助。
『陸』 請問DSP編程軟體是什麼,,應該用什麼編程語言
DSP的編程軟體是CCS開發平台,編程語言一般是C語言。
CCS有兩種工作模式:
1、軟體模擬器模式:可與DSP晶元分離,並在PC上模擬DSP指令集和工作機制,主要用於早期演算法的實現和調試。
2、硬體在線編程模式:可以在DSP晶元上實時運行,結合硬體開發板的在線編程和調試應用程序。
CCS的開發系統主要由以下組件構成:
1、TMS320C54x集成代碼生成工具。
2、CCS集成開發環境。
3、DSP / BIOS實時內核插件及其應用程序介面API。
4、RTDX插件,用於實時數據交換和相應的程序介面API。
5、TI以外的第三方提供的各種應用程序模塊插件。
(6)dsp編程語言擴展閱讀:
dsp編程中雙重循環、多重循環的優化:
1、將多個循環分成單層循環以減少循環數;
例如,在雙循環中,一個周期僅使用一個乘法器。 分成單層環路後,兩個乘法器可以使用一個周期,充分利用DSP乘法器資源,運算速度也將提高。
2、循環次數少的放在外層循環,循環次數多的放在內存循環;
3、二維數組的雙循環:二維數組的行循環置於外循環,列循環置於內循環;
4、避免在循環內進行乘法和除法運算:將循環內的乘法和除法運算盡可能移至循環外,並用加法代替。
『柒』 給我一篇完整的dsp程序設計
隨著DSP晶元功能的增強,已不再進行單純的數字信號處理任務,而是作為一種MCU被廣泛使用,控制板上各種資源,同時完成採集、計算、控制、通訊等任務。特別是當使用了TCP/IP或其它復雜通訊協議時,沒有一個實時多任務操作系統是很難進行任務調度的。μC/OS-II作為一種源碼公開的佔先式實時多任務操作系統,總是執行處於就緒狀態的優先順序最高的任務,並支持Semaphore(信號量)、Mailbox(郵箱)、Message Queue(消息隊列)等多種常用的進程間通信機制,是大多數高可靠嵌入式設備的首選。
2 開發環境簡介
APCI5096是北京康拓工業電腦公司自行開發的一款DSP目標板,主要用於對模擬信號量的采樣處理。該目標板以TMS320VC32為CPU,同時具有完備的輸入/輸出功能,可以實現30通道、16位、300KSPS的模擬輸入。調試用編譯器為TI公司的Code Composer 『C3x-『C4x,版本是4.10版。
3 移植過程
3.1 μC/OS-II系統結構
圖1說明了μC/OS-II的軟硬體體系結構。應用程序軟體處於整個系統的頂層,只和μC/OS-II與處理器無關的代碼以及μC/OS-II與應用相關的代碼關聯。這樣保證了應用軟體的可重用性。
μC/OS-II與處理器無關的代碼提供了μC/OS-II的系統服務。利用這些API函數,應用程序可以進行內存管理、任務間的通信以及創建、刪除任務等。μC/OS-II與應用相關的代碼提供了對μC/OS-II本身的裁減,並可根據實際需要進行任務數、任務棧的大小等設置。
大部分的μC/OS-II代碼是使用ANSI C語言書寫的,因此μC/OS-II的可移植性較好。盡管如此,仍然需要使用C和匯編語言寫一些處理器相關的代碼。移植工作需要改寫的是與處理器相關的代碼,包括三個文件:OS_ CPU.H、OS_ CPU_ C�C、OS_ CPU_ A�ASM。重點是任務堆棧的初始化、任務切換時棧指針的調整。
3.2 OS_ CPU.H
在不同的處理器中有不同的字長,所以必須重新定義一系列數據類型以確保移植的正確性。在OS_ CPU�H文件中應完成:數據類型的重新定義、堆棧數據類型的定義、堆棧增長方向的定義、臨界區開/關中斷的方法、任務切換函數OS_TASK_SW的宏定義。
(1)數據類型的聲明:在VC33中所有的整型數據(char、short、int、long)為相同的類型,用32位表示。浮點型數據(float、double)為相同類型,在VC33中用32位單精度浮點數表示。數據類型的重定義:
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U;
typedef signed char INT8S;
typedef float FP32;
typedef double FP64;
(2)VC33棧的數據寬度為32位,採用上面重定義過的數據類型進行定義,確保棧數據類型的一致性。棧的數據類型聲明:
typedef INT32U OS_ STK;
(3)μC/OS-II訪問代碼的臨界區時需要先禁止中斷,並且在訪問完畢後重新允許中斷。μC/OS-II利用兩個宏來禁止和允許中斷,通過狀態寄存器的中斷使能位開關中斷。
cregister unsigned int ST; /*聲明CPU內部寄存器*/
#define OS_ ENTER_ CRITICAL() asm(「ANDN 2000H, ST "); /*清中斷使能位*/
#define OS_ EXIT_ CRITICAL() asm(「OR 2000H, ST "); /*置中斷使能位*/
3.3 OS_ CPU_ C.C
在OS_ CPU_ C.C文件中主要完成的是OSTaskStkInit()函數,其餘五個函數可以不進行處理。OSTaskStkInit()函數完成任務棧的初始化,使得任務棧的結構看起來如同在任務執行過程中發生過一次中斷並將所有寄存器保存到堆棧一樣。不同的編譯器在函數調用時會有不同的入棧方法,如:參數和返回地址入棧順序、參數之間入棧的順序、參數利用寄存器還是堆棧保存等。在具體實現時還需要根據編譯器的要求進行調整。
CCS函數調用時堆棧規則為:先將參數從左往右入棧、然後是函數返回地址入棧。依照此規則設計任務棧初始結構如圖2。VC33共有28個寄存器,程序中應將寄存器全部入棧,在OSTaskStkInit中實現:
{
OS_ STK *stk; /*定義棧的數據結構*/
opt=opt;
stk=(OS_ STK *)ptos; /*裝入棧頂指針*/
*stk=(OS_ STK)pdata; /*參數入棧*/
*++stk=(OS_ STK)task; /*任務返回地址*/
*++stk=(OS_ STK)task; /*中斷返回地址*/
*++stk=(OS_ STK)0x2000; /*狀態寄存器,開中斷*/ 其餘CPU寄存器全部入棧,並初始化為0
}
3.4 OS_ CPU_ A.ASM
在OS_ CPU_ A�ASM文件中要求用戶編寫四個簡單的匯編語言函數:OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()、OSTickISR()。這四個函數具有完全相同的公共部分:寄存器入棧和寄存器出棧。只要按照上面設計好的棧結構進行就可以了。注意的是VC33的R0到R7是擴展精度寄存器,具有40位。在入棧和出棧時均需要用兩句話完成,如下:
入棧: 出棧:
PUSH R0 POPF R0
PUSHF R0 POP R1
而OSIntCtxSw函數具有特殊部分,該函數用於從中斷返回時進行任務切換,由於在調用_ OSIntCtxSw函數前已經發生了中斷,中斷服務程序已經將CPU寄存器保存到堆棧中了,所以此處不再進行寄存器保存。同時還要進行棧指針的調整,去掉堆棧中一些不需要的內容,然後再將寄存器全部出棧。由於該函數是μC/OS-II中唯一的與編譯器相關的函數,所以在移植後必須利用多次任務切換檢查棧指針是否正確調整。
3.5 時鍾中斷源初始化
μC/OS-II還要求用戶提供一個時鍾資源,用於實現時間延時和確認超時。根據APCI5096的硬體設置,需要在三個文件中進行時鍾資源的設置。
(1)OS_ CPU_ A�ASM:
APCI5096中,已將VC33的定時器1用於測頻通道,因此利用未被佔用的定時器0產生定時中斷。實現方法為在TINT0的中斷向量入口處放一跳轉指令,跳轉到自己寫的OSTickISR。
�sect 「�TINT0_ vector"
TINT0 br _ OSTickISR
(2)CMD文件
將TINT0跳轉到OSTickISR後,還應再指定TINT0的向量入口地址。APCI5096板上的VC33被設置為BootLoader方式,在該方式下TINT0的入口地址固定在0x809FC9。在CMD文件的SECTIONS段指定如下:
�TINT0_ vector:> 0x809FC9
(3)Main�C文件
μC/OS-II要求用戶在OSStart()運行後,μC/OS-Ⅱ啟動運行的第一個任務中初始化節拍中斷。自己編寫一個函數TimerInit(),並在第一個任務開始處調用該函數完成定時器0的初始化。函數中TIM0_ XXX代表的是定時器0的三個寄存器的地址,在完成對定時器0的設置後還要打開全局中斷和時鍾中斷。
{
*TIM0_PRD= 0x7530; /*設置周期為1KHZ*/
*TIM0_CNT=0;
*TIM0_CTL=0x2C1; /*啟動時鍾*/
ST|=0x2000; /*打開中斷*/
IE|=0x100; /*打開時鍾中斷*/
}
4 測試、編寫驅動和應用程序
做完以上工作以後,就要測試移植是否成功。最初測試時,可以先運行操作系統本身,調度一些簡單的任務和時鍾節拍中斷任務。主要測試系統本身的正確性,如果調試成功就可以在上面繼續開發驅動程序和添加應用程序。
『捌』 關於DSP編程語言的問題
忘記了
你可以在電腦里搜索一下interrupt,就能找到了
我經常是這樣用的,呵呵
『玖』 單片機和DSP在編程方面,有哪些不同
用51單片機,編程時,也要注意存儲單元的分配。
DSP對數據處理的規模,要遠遠大於51單片機,時常要擴充晶元。
所以,存儲空間,弄不好,就會越界。
51單片機的數據,要少的多,難得使用擴充晶元。
DSP開發,對象一般是聲音、圖像等,重要的是演算法。
一般要先掌握《數字信號處理》、離散傅里葉變換、卷積等等知識。
51單片機,主要是邏輯處理,有中學的知識,就夠用了。
另外,兩者的編程軟體、下載方法、調試方法,都有不同。
『拾』 dsp 用什麼編程
CCS
CCS有兩種工作模式:
1、軟體模擬器模式:可以脫離DSP晶元,在PC機上模擬DSP的指令集和工作機制,主要用於前期演算法實現和調試。
2、硬體在線編程模式:可以實時運行在DSP晶元上,與硬體開發板相結合在線編程和調試應用程序。
CCS的開發系統主要由以下組件構成:
① TMS320C54x集成代碼產生工具;
② CCS集成開發環境;
③ DSP/BIOS實時內核插件及其應用程序介面API;
④ 實時數據交換的RTDX插件以及相應的程序介面API;
⑤ 由TI公司以外的第三方提供的各種應用模塊插件。
(10)dsp編程語言擴展閱讀
dsp編程中雙重循環、多重循環的優化:
(1)多重循環拆成單層循環,減少循環層數;
例如,雙重循環內一個cycle只使用了一個乘法器,拆成單層循環後,一個cycle可使用2個乘法器,充分利用DSP乘法器資源,同時運算速度也會加快;
(2)循環次數少的放在外層循環,循環次數多的放在內存循環;
(3)二維數組的二重循環:二維數組的行循環放在外層循環,列循環放在內層循環;
(4)避免循環內部的乘除運算:循環內部的乘除運算盡量移到循環外部以及用加法替代。