Ⅰ DSP實驗 讓我用c語言編寫程序完成計算sin(2.3π)+cos(1.7π)的值
何編程語言是難學的,真正的工作中有時候學習一個新語法只有不到一周的時間,語法而言都一樣,如果還停留在語法層學習的上面,編寫程序的道路你就連門都沒有入.
但是後續的 數據結構和演算法 稍微要看下書了,開始接觸演算法了,著和語法沒有關系,之所以要先學好語法是為了能看懂用語法描敘的演算法,學通了用任何語言來描敘都一樣,到了這個階段的就相當於抬起一條腿准備跨到起跑線一樣,但還是沒有入門.
到編譯原理 和 圖靈機 再到 自己編寫微型的操作系統 就需要有個老師來引導了
我學軟體開發就是從C開始一路由 ->國家資料庫3級-> 程序員->高級程序員->系統分析師考上去然後通過近9年的工作,體會是如果你能夠在市面上或者學校里精確買到或者學到的一門知識往往就表示你的層次還是不能讓你得興應手的在行業中創造你能想像的東西,真正的解決問題需要很多本書再加上80%以上的自己創造和理解才能做出來的時候才算真正懂得了你的工作.
一個程序員需要這樣的經歷
樓上的估計最高學歷不過是理工科的一個大學生,應該還沒畢業,沒有在計算機行業呆過,在做晶元處理的工作中比如DSP晶元設計需要你天天接觸演算法,但是這和C語言本身有關系嗎?傅立葉演算法是數學家傅立葉設計出來的數學模型但是不適合做在計算機軟體裡面(運算量太大了比如離散的傅立葉變換等同於用序列Y(n×1列矢量)乘以n×n矩陣Fn,需要n×n次乘法。若n=1024,則是104,8576次乘法運算。什麼概念呢?如果你選用的CPU單周期指令為25ns, 單周期也可以完成一次乘法運算,那麼要計算1024點的傅立葉變換則需要26.2144ms,這還不包括加法或其它運算),我給出C演算法如下:
void kkfft(double pr[], double pi[], int n, int k, double fr[], double fi[], int l, int il)
{
int it,m,is,i,j,nv,l0;
double p,q,s,vr,vi,poddr,poddi;
for (it=0; it<=n-1; it++)
{
m = it;
is = 0;
for(i=0; i<=k-1; i++)
{
j = m/2;
is = 2*is+(m-2*j);
m = j;
}
fr[it] = pr[is];
fi[it] = pi[is];
}
//----------------------------
pr[0] = 1.0;
pi[0] = 0.0;
p = 6.283185306/(1.0*n);
pr[1] = cos(p);
pi[1] = -sin(p);
if (l!=0)
pi[1]=-pi[1];
for (i=2; i<=n-1; i++)
{
p = pr[i-1]*pr[1];
q = pi[i-1]*pi[1];
s = (pr[i-1]+pi[i-1])*(pr[1]+pi[1]);
pr[i] = p-q;
pi[i] = s-p-q;
}
for (it=0; it<=n-2; it=it+2)
{
vr = fr[it];
vi = fi[it];
fr[it] = vr+fr[it+1];
fi[it] = vi+fi[it+1];
fr[it+1] = vr-fr[it+1];
fi[it+1] = vi-fi[it+1];
}
m = n/2;
nv = 2;
for (l0=k-2; l0>=0; l0--)
{
m = m/2;
nv = 2*nv;
for(it=0; it<=(m-1)*nv; it=it+nv)
for (j=0; j<=(nv/2)-1; j++)
{
p = pr[m*j]*fr[it+j+nv/2];
q = pi[m*j]*fi[it+j+nv/2];
s = pr[m*j]+pi[m*j];
s = s*(fr[it+j+nv/2]+fi[it+j+nv/2]);
poddr = p-q;
poddi = s-p-q;
fr[it+j+nv/2] = fr[it+j]-poddr;
fi[it+j+nv/2] = fi[it+j]-poddi;
fr[it+j] = fr[it+j]+poddr;
fi[it+j] = fi[it+j]+poddi;
}
}
if(l!=0)
for(i=0; i<=n-1; i++)
{
fr[i] = fr[i]/(1.0*n);
fi[i] = fi[i]/(1.0*n);
}
if(il!=0)
for(i=0; i<=n-1; i++)
{
pr[i] = sqrt(fr[i]*fr[i]+fi[i]*fi[i]);
if(fabs(fr[i])<0.000001*fabs(fi[i]))
{
if ((fi[i]*fr[i])>0)
pi[i] = 90.0;
else
pi[i] = -90.0;
}
else
pi[i] = atan(fi[i]/fr[i])*360.0/6.283185306;
}
return;
}
另外,虛機團上產品團購,超級便宜
Ⅱ 求一份dsp 28xx進行「位」操作的c語言程序,想學習一下,貼上來就可以了,謝謝!
雙機通信在CPCI匯流排上的實現
基於CAN匯流排的電動汽車控制系統設計
基於CAN匯流排的EV電控系統通信的設計與開發
CAN匯流排的淺析CANopen協議
Profibus現場匯流排智能從站通信介面設計
中間匯流排結構的局限性
CAN匯流排技術在CFA6470型混合動力汽車中的應用
Armboot在EV40評估板上的移植
微型搶占式多任務實時內核設計
嵌入式系統的定義與發展歷史
LF2407型DSP內嵌eCAN模塊的檢測程序設計
場輸出電路:TA8445K
電話維修參考電路圖
同線電話轉接裝置(2)
51、GREAT WALL GW-140140H型VGA多頻彩色顯示器的電源電路圖
CNC動態卡在匯流排方式下的實現
AT89C2051驅動步進電機的電路和源碼
帶RTC的I2C匯流排鐵電存儲器FM31256
用CP2101將USB口擴展成串口
過孔全介紹
基於PC/104匯流排的旋轉變壓器電路設計
PCI9052介面電路的功能及應用
基於I2C匯流排的新型可編程增益放大電路的設計
RS-232串列通信消除干擾雜訊的設計方法分析
基於嵌入式PC的PIII計算機系統設計與實現
軟鍵盤產品界面顯示的通用程序設計
三星ARM處理器S3C4510B的HDLC通道使用及編程
嵌入式系統的系統測試和可靠性評估
111、TYSTAR TY-1411型彩色顯示器的電源電路圖
送電電路
電路圖:RS232-TTL-RS485
低壓燈定時閃爍電路
Keil C51 匯流排外設操作問題的深入分析
基於增強型SPI介面的大容量Flash擴展實現
電路板設計中差分信號線布線的優點和布線策略
ARM/DSP雙核系統的通信介面設計
嵌入式系統中擴展串列口的幾種方法
At89c2051的一個AD轉換應用實例
用C51寫的液晶驅動程序
單片機C語言學習
變頻解析度
MSP430與I2C匯流排介面技術的研究
ARM922T核ZCP320A處理器PCI匯流排操作
CAN匯流排的嵌入式Web伺服器設計
VME匯流排簡介
耳塞式二管接收電話機
7107做的電壓表(雙表)
53、GREAT WALL GW-300300C型彩色顯示器的電源電路圖
嵌入式系統通用的應用軟體結構研究
嵌入式系統開發要素的選擇分析
Gdb/Armulator 源代碼分析
LIN匯流排技術在汽車智能燈控系統中的應用
將 RS-485 用於數字發動機控制應用
數字家庭實踐解決方案之:從裝修開始
基於EPLD的PCI匯流排仲裁器的設計與實現
如何給PCI卡選用合適的匯流排控制器
開關設備
ARM基礎知識七
DLVS平安城市應用解決方案
壓敏電阻
在VxWorks下實現NAT/NAPT的方法
利用MC68HC908開發Pocket PC掌上電腦外設
uC/OS-II在配電監測終端儀表中的應用
72、NEC JC-140HM型SVGA多頻TTL和VGA大屏幕彩色顯示器的電源電路圖
026、COMPAQ 420型VGA彩色顯示器的電源電路圖
彩電遙控器13
VxWorks下PC/104-CAN驅動程序設計
嵌入式GSM簡訊息介面的軟硬體設計
TMS320VC5509與CameraLink相機的介面技術
單匯流排協議轉換器在分布式測控系統中的應用
時尚智能家居主要布線內容
硬體開發的基本准則
新手入門,搭建J2ME開發環境
RS232/RS485應用分析
1553B匯流排在嵌入式系統中的應用
CAN匯流排在組合機床電控系統通信中的應用
嵌入式系統面向低功耗的協同設計
使用uC/OS-II操作系統的簡訊息電話機
基於Linux的嵌入式網路存儲器設計
JTAG口及其對Flash的在線編程
36、CZX-14型顯示器的電源電路圖
74、NEC JC-1404HMN型多頻TTL和VGA大屏幕彩色顯示器的電源電路圖
用於汽車電子的LIN匯流排驅動器
Freescale LIN匯流排應用開發平台
輔助電路
51的匯編控制指令詳細列表
stc12c2052AD的Keil C頭文件
開關型調節器的電路板布局技術
參數測量單元(PMU)的布線指南
基於DSP的高速PCB抗干擾設計
PROTEL原理圖嵌入Word文檔的實現與分析
PROTEL問答摘要
如何提高電子產品的抗干擾能力和電磁兼容性
基於RISC技術的8位微控制器設計
單片機和圖形液晶顯示器介面應用技術
uC/OS-II在EP7312上的移植
嵌入式Linux系統下Microwindows的應用
61、IBM 5153-002型彩色顯示器的電源電路圖
Ⅲ DSP怎樣用C語言寫程序啊
TI有C語言的常式的,是一個安裝文件,安裝之後才會出現那個文件夾。文件夾裡面是晶元上外設的使用方法的程序,很簡單,學過ANCIC的人能夠看懂。
Ⅳ 新手學習DSP的C語言編程,請高手指點:
C6713沒用過,我用過TMS320F2812的晶元。建議你先熟悉一下CCS開發環境,然後再認真的看代碼。TI的DSP,封裝了很多的頭文件,沒有必要全部都要看看頭文件里是怎麼寫的。最好先把整個程序的運行流程看懂。然後結合晶元手冊,看看每一步怎麼做的,是如何通過配置寄存器、如何使用外設等等。關鍵還是看晶元手冊。等熟悉了之後,再深入看頭文件啥的。
Ⅳ dsp的程序問題。解釋一下dsp c 語言的問題
從這些宏定義可以看到C語言是如何支持硬體編程的。
以#define IMR *(volatile unsigned int *)0x0004 為例:
1)0x0004,這個容易理解,是一個十六進制的常數
2)再看(volatile unsigned int *),這是一個強制轉換,將0x0004轉換成(volatile usigned int *)
3)現在解釋volatile usigned int *是什麼。* 表示指針(地址),這個指針指向一個 usigned int的數。最前面的volatile有特殊含義:這個指針必須保存在RAM中(不是FLASH或DSP寄存器中)
4)綜合上面1)2)3)可知: (volatile unsigned int *)0x0004 的含義是:
0x0004是一個地址,在這個地址內保存的是一個unsigned int 類型的整數。這個地址存在於RAM
5)*(volatile unsigned int *)0x0004 最左邊多一個*,表示取地址指向單元的內容。綜合起來的意思是:從0x0004地址單元中取出一個usigned int 類型的數據值
6)#define IMR *(volatile unsigned int *)0x0004 的意思是,將從0x0004地址單元中取出一個usigned int 類型的數據值定義為IMR
7)根據DSP硬體,在DSP中RAM中的 0x0004地址單元恰好是中斷管理寄存器!
8)繞了半天,#define IMR *(volatile unsigned int *)0x0004 的意思是:在C語言程序中,定義了一個宏標示符 IMR 來表示DSP中的中斷管理寄存器。在程序中,可以通過這個宏標示符來使用這個寄存器:
unsigned int v = IMR; //取出中斷管理寄存器的值並賦給v
Ⅵ 怎樣進行DSP的C語言編程
在CCS里寫C語言程序啊……
Ⅶ 如何利用C和匯編語言混合編程實現DSP軟體設計
其中絕大部分功能不屬於標准C語言,因此被稱為C語言擴展。下面列出的是其中有益於DSP編程的一些功能。 內聯匯編(inline assembly):該功能可以幫助編程人員將匯編指令插入C代碼。 硬體寄存器綁定C變數:該功能經常與匯編指令內聯功能結合在一起,幫助內聯匯編代碼訪問C語言級的變數(見圖3)。圖3:結合內聯匯編和硬體寄存器綁定功能的代碼示例。 存儲區屬性:該功能允許編程人員將上述變數和函數分配到獨特的用戶定義存儲區,可以讓編程人員將C語言級單元分配到實際的存儲器位置,這對DSP應用來說非常關鍵。 用戶定義的調用約定:在某些情況下,匯編函數可以通過用戶定義的調用約定取得更好的優化效果。 編譯器內部函數(Compiler intrinsics):是指能夠使用專門的宏或函數調用觸發的內建編譯器功能總稱。沒有內部函數支持的編譯器必須調用用戶定義的函數,這樣做可能會令用戶定義函數可能會在一個環路里產生函數調用和返回(見圖4),從而產生巨大的開銷。圖4:ETSI的mult_r(乘法和取整)基本操作的C代碼實現(左)和對應的由CEVA-TeakLite-III編譯器生成的匯編代碼(右)。 匯編內部函數:是將匯編代碼內聯進C代碼的一種先進方法,下文將有詳細介紹。把匯編指令當作C語句一樣來編寫內聯匯編功能具有顯著的缺點。它會破壞各種編譯器優化操作,因為編譯器不了解內聯代碼的內容,會使用最壞假設;以及它可能迫使編程人員處理底層問題,如寄存器分配和指令調度。匯編內部函數可以幫助編程人員實現內聯匯編代碼,並且不存在這些缺點。從編程人員的角度看,匯編內部函數就像是C語言宏或函數。它們接收C語言變數,返回C語言輸出結果,同時表現為單個匯編指令。由於涉及該功能的所有代碼都在C語言等級,因此編程人員不必擔心寄存器分配、指令調度和其它底層問題。匯編內部函數不僅不會妨礙編譯器優化操作,還會參與優化過程,就像它們是編譯器正常產生的匯編指令一樣。這些特徵使得匯編內部函數的功能非常強大。利用匯編內部函數,編程人員可以從編譯器不可能產生的獨特匯編指令中受益。例如,CEVA-X1641的bitrev(位反向)指令就是為FFT等演算法定製的。由於編譯器不太可能把一個程序看作一個FFT並使用bitrev指令,因此編程人員可以完全把bitrev匯編內部功能嵌入到C代碼中。結合對應用的透徹了解,編程人員還可以使用C應用程序的性能決定段里的精確序列匯編內部函數,從而能夠確保編譯器生成的代碼效率就像手工編寫的一樣高。圖5是CEVA-X1641編譯器與匯編內部函數一起使用的例子。匯編內部函數還受益於由CEVA-X1641編譯器處理的問題所決定的機器,如寄存器分配、指令調度和硬體單元分配。圖5:CEVA-X1641編譯器支持的匯編內部函數的使用。 調試混合代碼的應用程序匯編代碼的調試需要對延遲和存儲器對齊限制等架構和機器級問題有深入的了解。只是簡單地把C代碼和匯編代碼放在一起會使事情更麻煩,因為編程人員現在還必須調試C代碼和匯編代碼之間的連接。調試混合代碼應用程序的第一步就是分隔問題。假設保持匯編代碼的C語言實現不變以及C語言實現方案工作正常,那麼將匯編函數轉換成C語言實現並重新測試應用程序就相對比較容易。為了迅速檢測出問題,編程人員可以在每一步把受懷疑函數的一半轉換為相應的C語言實現方案。一旦有問題的匯編函數被確定,它就應該同時作為獨立的匯編問題和C與匯編的連接問題加以分析。調試獨立的匯編問題對匯編編程人員來說十分簡單明了,但C與匯編的連接問題就有點麻煩。在考慮匯編函數本身時,C與匯編的連接問題是不可見的,這與獨立的匯編問題有所不同。為了找出這些問題,編程人員必須檢查編譯器的約定,比如調用約定和寄存器使用約定。編程人員還必須檢查編譯器假設,比如匯編指令的行蹤。為了節省調試時間,編程人員應該在第一次實現匯編函數時驗證是否遵循所有的編譯器約定和假設。
Ⅷ 利用c語言編程,使DSP28335的cpu定時器1在主頻為100兆赫茲情況下每隔2秒觸發定時器中斷
摘要 C 語言編程常用的4種延時方法,其中兩種非精確延時,兩種精確一些的延時。for 語句和 while 語句都可以通過改變 i 的范圍值來改變延時時間,但是 C 語言循環的執行時間都是不能通過程序看出來的。精確延時有兩個方法,一個方法是用定時器來延時,這個方法我們後邊課程要詳細介紹,定時器是單片機的一個重點。另外一個就是用庫函數nop();,一個 NOP 的時間是一個機器周期的時間,這個後邊也要介紹。
Ⅸ 關於DSP的 C語言編程
這個還得結合具體點的解壓演算法來理解啊 只看這樣的根據段落碼來分別處理 沒看演算法真心看不懂具體的為什麼這么操作 肯定是有演算法依據的 結合文檔看吧
Ⅹ DSP的C語言,菜鳥起步,高手幫幫忙;感激不盡
這是非整數的定點計算, 無論加減法, 乘除法, 都需要移位.