《實時數字信號處理:實踐方法與應用(第2版)》介紹了實時DSP基礎原理,并且使用實際操作的方法介紹了DSP算法、系統設計、實時實現考慮以及很多實際應用。《實時數字信號處理:實踐方法與應用(第2版)》包含很多有用的實例,如實際操作的實驗軟件以及使用MATLAB、Simulink、C及DSP匯編語言的程序。書中也包含用于進一步探索實例和實驗的各種練習。《實時數字信號處理:實踐方法與應用(第2版)》使用德州儀器的代碼集成開發環境和用于實時實驗與應用的頻譜數字TMS320VC5510 DSP啟動工具包(DSK)。
書摘/試閱
2.8.3 編譯器關鍵字和程序偽指令
C55x的C編譯器支持const和volatile關鍵字,const關鍵字控制數據對象分配。它通過將常數放置在ROM空間里確保數據對象不會發生改變。當編譯器的優化功能開啟時,Volatile關鍵字特別重要。這是因為優化器可能會積極地重新排列代碼,甚至可能移除部分的代碼和數據的變量。但優化器會保留所有帶volatile關鍵字的變量。
C55x編譯器還支持三種新的關鍵字:ioport、interrupt和onchip,ioport關鍵字被編譯器用來區分與I/O相關的內存空間、外設寄存器,例如EMIF、DMA、定時器、多通道緩沖串口等,這些都處在I/O內存空間中。要訪問這些寄存器,就必須利用ioport關鍵字。ioport關鍵字只能用于全局變量和本地或者全局指針。由于I/O只能在16位的范圍內尋址,因此即使是為大內存模型編譯程序時,所有的變量包括指針也都是16位的。
中斷與中斷服務程序在DSP實時應用程序中是很常見的。由于中斷服務程序向量表(ISR)需要特別的寄存器處理和依靠特殊序列進入和返回這個事實,C55x編譯器指定的特殊函數支持interrup關鍵字,它實際上就是一個ISR。
為了利用其在C語言的雙MAC特性,C55x編譯器使用了onchip關鍵字限定可能被雙MAC指令使用的內存。該內存必須放置在片內DARAM中。
CODE_SECTION程序分配程序的內存空間并且將與程序相關的函數置人該段。DATASECTION程序為數據分配存儲空間和并將與程序相關的數據置人數據段取代bss段。
表2.18給出了一個使用數字鎖相環的C程序實例。在這個例子中,函數pllEnabl被放置在程序內存空間的C55xcode子段中,該子段位于text段。
2.9 C語言和匯編語言混合編程
正如第1章中所討論的,C語言和匯編語言混合編程被用于很多DSP應用開發。高級C語言代碼提供了易于維護和可移植的特性,同時匯編語言代碼具有實時效率和代碼密度優勢。本節將介紹怎樣處理C語言程序和匯編程序的接口,并且回顧一下C函數的調用規范的流程。被C函數調用的匯編程序可以像C函數一樣擁有自變量和返回值。以下準則用于編寫被C函數調用的C55x匯編代碼。
命名規則 所有將被C函數調用的變量和程序名必須使用下劃線“_”作為前綴。例如,使用_asm_func作為一個被C函數調用的匯編程序名。如果一個變量在此匯編程序中被定義,它必須使用下劃線作為前綴以便C函數調用,例如_asm_var。前綴“_”僅被C編譯器使用。當從C函數中訪問匯編程序或者變量時,不需要使用下劃線前綴。
(1)變量定義
需要被C和匯編程序同時訪問的變量必須使用匯編器的偽指令.Global,.Def,.rcf來定義為全局變量。
(2)編譯器模式