當前位置:首頁 » 操作系統 » dsp源碼

dsp源碼

發布時間: 2022-04-16 12:37:58

㈠ 為什麼我的C++源碼編譯後是dsp文件和ncb文件。而不是obj文件,也編譯不出exe文件

dsp文件和ncb文件都是項目文件
如果你的源代碼編譯成功,就會在項目目錄下生成Debug目錄
裡面就有obj文件和exe文件

㈡ 給我一篇完整的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 測試、編寫驅動和應用程序
做完以上工作以後,就要測試移植是否成功。最初測試時,可以先運行操作系統本身,調度一些簡單的任務和時鍾節拍中斷任務。主要測試系統本身的正確性,如果調試成功就可以在上面繼續開發驅動程序和添加應用程序。

㈢ 各種編程工具的源碼的後綴名是什麼

java的後綴:.java
C語言和C++::
.h頭文件,主要是函數、結構聲明,常量定義等
.c,源文件,函數定義
.exe,可執行文件
.dll,動態鏈接庫
.lib,靜態鏈接庫
.dsp,.dsw都是工程文件,
.cpp是C++的源文件
C#語言:.cs

asp(web):.asp

asp.net(web):.aspx

php(web):.php

JSP(web):.jsp

㈣ 什麼是dsp技術

20世紀60年代以來,隨著計算機和信息技術的飛速發展,數字信號處理技術應運而生並得到迅速的發展。在過去的二十多年時間里,數字信號處理已經在通信等領域得到極為廣泛的應用。數字信號處理是利用計算機或專用處理設備,以數字形式對信號進行採集、變換、濾波、估值、增強、壓縮、識別等處理,以得到符合人們需要的信號形式。數字信號處理是圍繞著數字信號處理的理論、實現和應用等幾個方面發展起來的。數字信號處理在理論上的發展推動了數字信號處理應用的發展。反過來,數字信號處理的應用又促進了數字信號處理理論的提高。而數字信號處理的實現則是理論和應用之間的橋梁。數字信號處理是以眾多學科為理論基礎的,它所涉及的范圍極其廣泛。例如,在數學領域,微積分、概率統計、隨機過程、數值分析等都是數字信號處理的基本工具,與網路理論、信號與系統、控制論、通信理論、故障診斷等也密切相關。近來新興的一些學科,如人工智慧、模式識別、神經網路等,都與數字信號處理密不可分。可以說,數字信號處理是把許多經典的理論體系作為自己的理論基礎,同時又使自己成為一系列新興學科的理論基礎。世界上第一個單片DSP晶元應當是1978年AMI公司發布的S2811,1979年美國Intel公司發布的商用可編程器件2920是DSP晶元的一個主要里程碑。這兩種晶元內部都沒有現代DSP晶元所必須有的單周期乘法器。1980年,日本NEC公司推出的μPD7720是第一個具有乘法器的商用DSP晶元。在這之後,最成功的DSP晶元當數美國德州儀器公司(TexasInstruments,簡稱TI)的一系列產品。TI公司在1982年成功推出其第一代DSP晶元TMS32010及其系列產品TMS32011、TMS320C10/C14/C15/C16/C17等,之後相繼推出了第二代DSP晶元TMS32020、TMS320C25/C26/C28,第三代DSP晶元TMS320C30/C31/C32,第四代DSP晶元TMS320C40/C44,第五代DSP晶元TMS320C5X/C54X,第二代DSP晶元的改進型TMS320C2XX,集多片DSP晶元於一體的高性能DSP晶元TMS320C8X以及目前速度最快的第六代DSP晶元TMS320C62X/C67X等。TI將常用的DSP晶元歸納為三大系列,即:TMS320C2000系列(包括TMS320C2X/C2XX)、TMS320C5000系列(包括TMS320C5X/C54X/C55X)、TMS320C6000系列(TMS320C62X/C67X)。如今,TI公司的一系列DSP產品已經成為當今世界上最有影響的DSP晶元。TI公司也成為世界上最大的DSP晶元供應商,其DSP市場份額佔全世界份額近50%。DSP處理器與通用處理器的比較考慮一個數字信號處理的實例,比如有限沖擊響應濾波器(FIR)。用數學語言來說,FIR濾波器是做一系列的點積。取一個輸入量和一個序數向量,在系數和輸入樣本的滑動窗口間作乘法,然後將所有的乘積加起來,形成一個輸出樣本。 類似的運算在數字信號處理過程中大量地重復發生,使得為此設計的器件必須提供專門的支持,促成了了DSP器件與通用處理器(GPP)的分流:1、對密集的乘法運算的支持GPP不是設計來做密集乘法任務的,即使是一些現代的GPP,也要求多個指令周期來做一次乘法。而DSP處理器使用專門的硬體來實現單周期乘法。DSP處理器還增加了累加器寄存器來處理多個乘積的和。累加器寄存器通常比其他寄存器寬,增加稱為結果bits的額外bits來避免溢出。同時,為了充分體現專門的乘法-累加硬體的好處,幾乎所有的DSP的指令集都包含有顯式的MAC指令。2、存儲器結構傳統上,GPP使用馮.諾依曼存儲器結構。這種結構中,只有一個存儲器空間通過一組匯流排(一個地址匯流排和一個數據匯流排)連接到處理器核。通常,做一次乘法會發生4次存儲器訪問,用掉至少四個指令周期。大多數DSP採用了哈佛結構,將存儲器空間劃分成兩個,分別存儲程序和數據。它們有兩組匯流排連接到處理器核,允許同時對它們進行訪問。這種安排將處理器存貯器的帶寬加倍,更重要的是同時為處理器核提供數據與指令。在這種布局下,DSP得以實現單周期的MAC指令。還有一個問題,即現在典型的高性能GPP實際上已包含兩個片內高速緩存,一個是數據,一個是指令,它們直接連接到處理器核,以加快運行時的訪問速度。從物理上說,這種片內的雙存儲器和匯流排的結構幾乎與哈佛結構的一樣了。然而從邏輯上說,兩者還是有重要的區別。GPP使用控制邏輯來決定哪些數據和指令字存儲在片內的高速緩存里,其程序員並不加以指定(也可能根本不知道)。與此相反,DSP使用多個片內存儲器和多組匯流排來保證每個指令周期內存儲器的多次訪問。在使用DSP時,程序員要明確地控制哪些數據和指令要存儲在片內存儲器中。程序員在寫程序時,必須保證處理器能夠有效地使用其雙匯流排。此外,DSP處理器幾乎都不具備數據高速緩存。這是因為DSP的典型數據是數據流。也就是說,DSP處理器對每個數據樣本做計算後,就丟棄了,幾乎不再重復使用。3、零開銷循環如果了解到DSP演算法的一個共同的特點,即大多數的處理時間是花在執行較小的循環上,也就容易理解,為什麼大多數的DSP都有專門的硬體,用於零開銷循環。所謂零開銷循環是指處理器在執行循環時,不用花時間去檢查循環計數器的值、條件轉移到循環的頂部、將循環計數器減1。與此相反,GPP的循環使用軟體來實現。某些高性能的GPP使用轉移預報硬體,幾乎達到與硬體支持的零開銷循環同樣的效果。4、定點計算大多數DSP使用定點計算,而不是使用浮點。雖然DSP的應用必須十分注意數字的精確,用浮點來做應該容易的多,但是對DSP來說,廉價也是非常重要的。定點機器比起相應的浮點機器來要便宜(而且更快)。為了不使用浮點機器而又保證數字的准確,DSP處理器在指令集和硬體方面都支持飽和計算、舍入和移位。5、專門的定址方式DSP處理器往往都支持專門的定址模式,它們對通常的信號處理操作和演算法是很有用的。例如,模塊(循環)定址(對實現數字濾波器延時線很有用)、位倒序定址(對FFT很有用)。這些非常專門的定址模式在GPP中是不常使用的,只有用軟體來實現。 6、執行時間的預測大多數的DSP應用(如蜂窩電話和數據機)都是嚴格的實時應用,所有的處理必須在指定的時間內完成。這就要求程序員准確地確定每個樣本需要多少處理時間,或者,至少要知道,在最壞的情況下,需要多少時間。如果打算用低成本的GPP去完成實時信號處理的任務,執行時間的預測大概不會成為什麼問題,應為低成本GPP具有相對直接的結構,比較容易預測執行時間。然而,大多數實時DSP應用所要求的處理能力是低成本GPP所不能提供的。這時候,DSP對高性能GPP的優勢在於,即便是使用了高速緩存的DSP,哪些指令會放進去也是由程序員(而不是處理器)來決定的,因此很容易判斷指令是從高速緩存還是從存儲器中讀取。DSP一般不使用動態特性,如轉移預測和推理執行等。因此,由一段給定的代碼來預測所要求的執行時間是完全直截了當的。從而使程序員得以確定晶元的性能限制。7、定點DSP指令集定點DSP指令集是按兩個目標來設計的:·使處理器能夠在每個指令周期內完成多個操作,從而提高每個指令周期的計算效率。·將存貯DSP程序的存儲器空間減到最小(由於存儲器對整個系統的成本影響甚大,該問題在對成本敏感的DSP應用中尤為重要)。為了實現這些目標,DSP處理器的指令集通常都允許程序員在一個指令內說明若干個並行的操作。例如,在一條指令包含了MAC操作,即同時的一個或兩個數據移動。在典型的例子里,一條指令就包含了計算FIR濾波器的一節所需要的所有操作。這種高效率付出的代價是,其指令集既不直觀,也不容易使用(與GPP的指令集相比)。GPP的程序通常並不在意處理器的指令集是否容易使用,因為他們一般使用象C或C++等高級語言。而對於DSP的程序員來說,不幸的是主要的DSP應用程序都是用匯編語言寫的(至少部分是匯編語言優化的)。這里有兩個理由:首先,大多數廣泛使用的高級語言,例如C,並不適合於描述典型的DSP演算法。其次,DSP結構的復雜性,如多存儲器空間、多匯流排、不規則的指令集、高度專門化的硬體等,使得難於為其編寫高效率的編譯器。即便用編譯器將C源代碼編譯成為DSP的匯編代碼,優化的任務仍然很重。典型的DSP應用都具有大量計算的要求,並有嚴格的開銷限制,使得程序的優化必不可少(至少是對程序的最關鍵部分)。因此,考慮選用DSP的一個關鍵因素是,是否存在足夠的能夠較好地適應DSP處理器指令集的程序員。8、開發工具的要求因為DSP應用要求高度優化的代碼,大多數DSP廠商都提供一些開發工具,以幫助程序員完成其優化工作。例如,大多數廠商都提供處理器的模擬工具,以准確地模擬每個指令周期內處理器的活動。無論對於確保實時操作還是代碼的優化,這些都是很有用的工具。GPP廠商通常並不提供這樣的工具,主要是因為GPP程序員通常並不需要詳細到這一層的信息。

㈤ 如何使用STM32F4的DSP庫

如何使用STM32F4的DSP庫 我們平常所使用的CPU為定點CPU,意思是進行整點數值運算的CPU。當遇到形如1.1+1.1的浮點數運算時,定點CPU就遇到大難題了。對於32位單片機,利用Q化處理能發揮他本身的性能,但是精度和速度仍然不會提高很多。 現在設計...

㈥ 簡單的dsp代碼,誰能教教我

看書不夠仔細哦,TXCON就是定時器控制寄存器。建議你回去再好好看一遍書。

㈦ 家庭影院AV功放源碼輸出好還是DSP音質好

功放好。
同樣的喇叭,用傳統功放推出來的聲音比DSP功放推的更自然、更醇厚耐聽。DSP功放的聲音底氣就沒有那麼渾厚,相對聲音也會單薄一些。
DSP功放的功率低於傳統功放。音色調教比傳統功放差,但聲場比傳統功放的寬廣。一般來說,功放的功率要大於喇叭的功率。DSP功放可以通過電腦更好地管理功放,EQ的調教,讓音響的聲音更耐聽更好聽。

㈧ 請教Simulink在生成DSP代碼時的問題

標DSP:28335;
我剛開始學慣用MATLAB生成DSP代碼,現在操作中出現兩個問題 。
1、simulink編譯下出現gmake錯誤,但在命令窗顯示正常。我就把生成的.O文件下載到板上,可以正常運行。
2、把生成的代碼利用CCS軟體打開,發現沒有的頭文件。我從matlab軟體目錄裡面找到相關的頭文件添加進工程。編譯中停在gmake階段。
請問如何

熱點內容
車貸解壓需要多少錢 發布:2024-09-29 23:17:49 瀏覽:378
羅振宇編程 發布:2024-09-29 22:53:27 瀏覽:537
c語言四個數比大小 發布:2024-09-29 22:48:40 瀏覽:777
c語言strdup 發布:2024-09-29 22:29:57 瀏覽:731
電源是存儲器嗎 發布:2024-09-29 22:22:05 瀏覽:105
京東的腳本 發布:2024-09-29 22:20:29 瀏覽:304
arm用c語言 發布:2024-09-29 21:21:29 瀏覽:611
環境和編譯器有什麼區別 發布:2024-09-29 21:08:31 瀏覽:871
qq收款源碼 發布:2024-09-29 21:07:49 瀏覽:505
無2維碼如何配置智能設備 發布:2024-09-29 21:00:54 瀏覽:581