dsp反編譯
1. dsp要用到匯編語言嗎
肯定要匯編,你不用怕,匯編用得很少,你最好學學匯編,至少要看得懂(不難),絕大多數情況都是把匯編COPY過來用,c語言編程占據99%,剩下1%的匯編你搞不定,整個程序你就OVER了。
2. 如何學習好DSP
關於DSP和普通51 AVR還有STM32的區別
DSP是為運算而生的晶元,他最強大的地方就在與它的數**算性能,那是由它的指令集支持的。那些拿DSP和STM32比較的,省省吧,如果你兩者都熟悉你就知道根本沒啥好比的,如果我需要很多高級的介面,比如乙太網和USB,那麼我自然選STM32,如果我需要實現一些演算法,那肯定會選DSP。如果你對運算速度不敏感,反正72M的速度已經比原先單片機快很多了,那當然是看你熟悉哪個,哪個價格比較好,支持比較好。
從51 AVR到DSP最大的障礙
1、應該是編譯環境吧,TI的DSP都用的是CCS,CCS界面和原先IAR區別不是一般的大,比如程序導入,比如觀察變數,比如燒寫FLASH。恩,是的。用過了IAR那種傻瓜化的操作了之後,真是怎麼弄怎麼別扭,CCS真是太不友好了。但是沒辦法,IAR他們是專門做編譯軟體的,TI主要是做DSP的,TI也意識到這個問題了,所以現在推出的CCSV4好像在這方面有很大的加強。不過網上還是CCS3.3的資料最多,大家也熟悉,如果剛接觸還是先用CCS3.3為好。
如果你手頭有快開發板,那裡面應該有對這些操作的詳細說明。所以這個慢慢應該也可以熟悉。
2、庫文件。TI的庫文件都是聯合+結構+位域的形式。對這些結構不是非常熟悉的話可能看著有點暈,這個只能慢慢去看C的書。最納悶的可能就是它的地址映射,如何把寄存器映射到相應的地址,那是它由編譯器來支持的主要通過#PROGRM來實現,可以去看看它的CMD文件
3、CMD,CMD文件可能是入門最大的一個坎了,單片機或者ARM根本就沒這么一說,這破東西到底啥用吶?CMD文件主要作用就是用來做內存分配,你的晶元裡面有FLASH有RAM有BOOT ROM,你編寫的程序有代碼,要燒到FLASH中,有全局變數要存到RAM的全局變數區域,有局部變數,要存到堆棧中。CDM文件其實就是把你代碼中的這些一塊一塊的東西和具體的硬體存儲對應起來。你可以隨你需要任意來配置,比如我有一個數據表格,普通的單片機你定義好了之後會有編譯器來幫你存放到一個地方,但是DSP裡面你可以通過配置CMD把它放在你認為合適的地方。再比如堆棧空間的大小,以前從來沒關心過堆棧大小,但是開辟的太大的話可能浪費內存空間。當然,每個晶元都有一個標準的CMD文件,初學者完全可以不用去修改它。
4、文檔。TI的文檔包括數據手冊和外設指南,很多人說很亂,不像其它晶元,所有外設的資料都會放在一起,但是TI會每個外設弄一個。這就要說說TI的外設,它的外設都非常專業,是的專業。比如它的PWM外設,叫ePWM,也就是增強型的PWM,這個外設可以輕松輸出非常復雜的PWM波形,而且不用CPU參與。所以它的外設指南有100多頁,你會發現很多外設都是這樣,裡面有很多很多增強的功能,相對應的它的說明文檔也就非常長。要是全部都集合在一起那就會非常的大。而且它的每個外設都是有獨立版本的,比如ADC,已經從0版到3版,而ePWM還是1版,分開之後升級的維護會方便很多,很多外設在類似的晶元都是一樣的。
用STM32的時候我從來沒看懂過它的庫,甚至都沒仔細看過它的手冊。但是最後也搞出來了,完了之後我對這塊晶元沒多少熟悉的感覺。但是用C2000系列的DSP的時候則要反反復復的去看外設指南,分析手冊上給出的結構,讓我對晶元非常熟悉,再加上它的編譯環境是完全可以配置的,我甚至都知道我某個變數會在哪個地方。
3. 後綴名為.dsp的文件是什麼
項目文件名後綴為dsp(保存項目設置),它維護應用程序中所有的源代碼文件,以及Visual C++如何編譯、連接應用程序,以便創建可執行程序。Visual C++6的集成開發環境中,通過"File"菜單的"New"命令創建一個新的項目。創建一個項目的同時,也創建了一個項目工作區,項目工作區文件的後綴名為dsw(保存項目工作區的設置)。一個應用程序可以有一個項目及若干個子項目,但只有一個活動的項目。
4. 如何將c語言程序轉換成dsp的匯編語言
第一、自己轉;看懂C之後自己來寫匯編;第二、讓機器轉,編譯連接機器之後,在執行時可以看到轉換後的匯編代碼,不過不是一一對應的。
5. dsp指令中 EALLOW,EDIS,ERTM都是什麼意思
EALLOW,EDIS是成對使用的,有些寄存器是受到保護的,不能任意寫,EALLOW相當於去掉保護,操作方法如下:
1、首先將電腦USB介面通過模擬器連接好DSP28335控制板,打開CCS6.0編譯器,選擇「View—>Target Configurations」選項。
6. 請教.dsw,.dsp文件是干什麼的
VC 文件類型:
DSW:全稱是Developer Studio Workspace,最高級別的配置文件,記錄了整個工作空間的配置信息,她是一個純文本的文件,在vc創建新項目的時候自動生成。
DSP:全稱是Developer Studio Project,也是一個配置文件,不過她記錄的是一個項目的所有配置信息,純文本文件。
OPT:與DSW、DSP配合使用的配置文件,她記錄了與機器硬體有關的信息,同一個項目在不同的機器上的opt文件內容是不同的。
CLW:記錄了跟ClassWizard相關的信息,如果丟失了clw文件,那麼在Class View面板里就沒有類信息。
(6)dsp反編譯擴展閱讀:
自動生成文件:
以下文件在項目中是可丟棄的,有些文件刪除後,VC會自動生成的。
ncb 無編譯瀏覽文件(no compile browser)。當自動完成功能出問題時可以刪除此文件。build後會自動生成。
opt 工程關於開發環境的參數文件。如工具條位置等信息;(可丟棄) 。
aps (AppStudio File),資源輔助文件,二進制格式,一般不用去管它。
plg 是編譯信息文件,編譯時的error和warning信息文件(實際上是一個html文件),一般用處不大.在Tools->Options裡面有個選項可以控制這個文件的生成。
hpj (Help Project)是生成幫助文件的工程,用microsfot Help Compiler可以處理。
mdp (Microsoft DevStudio Project)是舊版本的項目文件,如果要打開此文件的話,會提示你是否轉換成新的DSP格式。
7. DSP處理器 它的可執行文件是什麼格式 跟coff文件是什麼關系
TI的編譯器,連接器等工具產生的目標文件格式為Common Object File Format(簡稱COFF)。COFF格式是AT&T開發的,在UNIX系統中所採用的目標文件格式。TI的編譯器產生的obj文件以及連接之後產生的out文件都是COFF格式的。用CCS載入out文件到DSP的內存的時候,CCS會分析這個out文件,將其中儲存的代碼段和初始數據等段中的數據復制到DSP的內存中,並且設置程序指針到Entry Point(入口地址)。Hex5x, Hex6x等轉換工具通過分析out文件,將其輸出為一個boot table,方便各種自舉(自啟動)程序的編寫。例如我們經常把這樣的boot table寫入flash, 製作成能從flash自舉的應用程序。
COFF最開始是文件頭和附加文件頭,附加文件頭中保存有Entry Point的地址。其後就是Section Header表,其中有各個section的物理地址、長度以及初始化數據的在文件中的偏移地址等信息。所有的section header結束之後就是數據區了。也就是需要復制到DSP 內存中去的數據。其後還有連接用的relocation信息,如果out文件的話不需要這些信息,relocation之後是符號表,例如C語言的全局變數,函數等符號都在這個表中儲存。最後是字元串表,section的名稱或者符號名稱太長的時候就把這些名稱字元串儲存到字元串表中。
8. dsp文件 dsw文件 dat文件分別是什麼
看這個帖,基本上VC++生成的什麼擴展名的都有說明
參考:http://hi..com/pcrazyc/blog/item/8bd803165d23d64b20a4e942.html
.APS:存放二進制資源的中間文件,VC把當前資源文件轉換成二進制格式,並存放在APS文件中,以加快資源裝載速度。資源輔助文件。
.BMP:點陣圖資源文件。
.BSC:瀏覽信息文件,由瀏覽信息維護工具(BSCMAKE)從原始瀏覽信息文件(.SBR)中生成,BSC文件可以用來在源代碼編輯窗口中進行快速定位。用於瀏覽項目信息的,如果用source brower的話就必須有這個文件。可以在project options里去掉Generate Browse Info File,這樣可以加快編譯進度。
.C:用C語言編寫的源代碼文件。
.CLW:ClassWizard生成的用來存放類信息的文件。classwizard信息文件,ini文件的格式。
.CNT:用來定義幫助文件中「Contents」的結構。
.CPP或.CXX:用C++語言編寫的源代碼文件。
.CUR:游標資源文件。
.DEF:模塊定義文件,供生成動態鏈接庫時使用。
.DLG:定義對話框資源的獨立文件。這種文件對於VC工程來說並非必需,因為VC一般把對話框資源放在.RC資源定義文件中。
.DSP:VC開發環境生成的工程文件,VC4及以前版本使用MAK文件來定義工程。項目文件,文本格式。
.DSW:VC開發環境生成的WorkSpace文件,用來把多個工程組織到一個WorkSpace中。工作區文件,與.dsp差不多。
.EXP:由LIB工具從DEF文件生成的輸出文件,其中包含了函數和數據項目的輸出信息,LINK工具將使用EXP文件來創建動態鏈接庫。只有在編譯DLL時才會生成,記錄了DLL文件中的一些信息。
.H、.HPP或.HXX:用C/C++語言編寫的頭文件,通常用來定義數據類型,聲明變數、函數、結構和類。
.HLP:Windows幫助文件。
.HM:在Help工程中,該文件定義了幫助文件與對話框、菜單或其它資源之間ID值的對應關系。
.HPJ:由Help Workshop生成的Help工程文件,用來控制Help文件的生成過程。
.HPG,生成幫助的文件的工程。
.ICO:圖標資源文件。
.ILK:連接過程中生成的一種中間文件,只供LINK工具使用。
.INI:配置文件。
.LIB:庫文件,LINK工具將使用它來連接各種輸入庫,以便最終生成EXE文件。
.LIC:用戶許可證書文件,使用某些ActiveX控制項時需要該文件。
.MAK:即MAKE文件,VC4及以前版本使用的工程文件,用來指定如何建立一個工程,VC6把MAK文件轉換成DSP文件來處理。
.MAP:由LINK工具生成的一種文本文件,其中包含有被連接的程序的某些信息,例如程序中的組信息和公共符號信息等。執行文件的映像信息記錄文件。
.MDP:舊版本的項目文件,相當於.dsp
.NCB:NCB是「No Compile Browser」的縮寫,其中存放了供ClassView、WizardBar和Component Gallery使用的信息,由VC開發環境自動生成。無編譯瀏覽文件。當自動完成功能出問題時可以刪除此文件。編譯工程後會自動生成。
.OBJ:由編譯器或匯編工具生成的目標文件,是模塊的二進制中間文件。
.ODL:用對象描述語言編寫的源代碼文件,VC用它來生成TLB文件。
.OLB:帶有類型庫資源的一種特殊的動態鏈接庫,也叫對象庫文件。
.OPT:VC開發環境自動生成的用來存放WorkSpace中各種選項的文件。工程關於開發環境的參數文件。如工具條位置信息等。
.PBI、.PBO和.PBT:由VC的性能分析工具PROFILE生成並使用的三種文件。
.PCH:預編譯頭文件,比較大,由編譯器在建立工程時自動生成,其中存放有工程中已經編譯的部分代碼,在以後建立工程時不再重新編譯這些代碼,以便加快整個編譯過程的速度。
.PDB:程序資料庫文件,在建立工程時自動生成,其中存放程序的各種信息,用來加快調試過程的速度。記錄了程序有關的一些數據和調試信息。
.PLG:編譯信息文件,編譯時的error和warning信息文件。
.RC:資源定義文件。
.RC2:資源定義文件,供一些特殊情況下使用。
.REG:注冊表信息文件。
.RES:二進制資源文件,資源編譯器編譯資源定義文件後即生成RES文件。
.RTF:Rich Text Format(豐富文本格式)文檔,可由Word或寫字板來創建,常被用來生成Help文件。
.SBR:VC編譯器為每個OBJ文件生成的原始瀏覽信息文件,瀏覽信息維護工具(BSCMAKE)將利用SBR文件來生成BSC文件。
.TLB:OLE庫文件,其中存放了OLE自動化對象的數據類型、模塊和介面定義,自動化伺服器通過TLB文件就能了解自動化對象的使用方法。
.WAV:聲音資源文件。
9. 對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里有代碼消耗時鍾周期的統計,如果你覺得某段代碼效率低下的話,可以先分段進行消耗時鍾周期的計算,這樣優化比較有針對性。