現代軟體開發,已從上世紀的面向過程程式設計發展到當前的面向框架程式設計。軟體開發經驗已證明:框架話、模組化的開發方式可以極大的提高軟體開發效率,提高**質量及**重用率。然而,在嵌入式程式設計中,由於長期缺乏完善的開發框架和可用的api,開發人員依舊利用c或組合語言和底層硬體打交道,凡是親力親為,這必然會增加嵌入式開發的入門門檻,降低**的重用性,甚至增加**易集時的復制度(不過這些缺點,對於程式設計師來說確是好事,入門門檻高、開發複製意味著高付出高回報,不像現在桌面電腦端的開發,已經被人研究爛了,如果你不是超超超超級大牛,根本找不到乙份滿意的薪水)。基於這點,ti公司發布了一套dsp演算法標準——tms320 dsp algorithm standard,規範了dsp演算法軟體的開發,並提供了類似c++語言類的封裝方式的演算法介面,使得演算法整合變得簡單統一。
xdais標準
如果你對tms320 dsp algorithm standard還陌生的話,那麼如果提起另乙個名字:xdais,那麼就順眼地多了。沒錯,我們在codec engine文件中經常看到的xdais,實際上就是tms320 dsp algorithm standard的另乙個名字。根據ti官方***,xdais標準一共提供了39條規則,15條指南。這些規則和指南一共分為4個部分:
只要你的演算法滿足xdais標準,你也可以像筆記本上打上的「vista capable」那樣,在演算法上面打上ti的認證圖示:
ialg介面
前面說了,xdais標準裡含有39條標準,15個指南。這些標準、指南幾乎涵蓋了整個dsp開發的生命週期,例如使用ti的c語言啊,所有c6x演算法必須支援低位優先啊。具體的規則可以參考《tms320 dsp algorithm standard rules and guidelines user』s guide》,本文不再討論。
xdais作為乙個dsp的開發框架,定義了一些介面:
《tms320 dsp algorithm standard api reference》指出,所有的演算法都必須實現了ialg介面,ialg介面最主要的工作就是定義演算法中需要使用的記憶體,提高片上系統記憶體使用效率,應用程式和xdais間工作關係如下:
這又遇到了乙個問題,xdais的api是基於c的,我們知道,c是面向過程的,因此不存在物件導向裡擁有的封裝、繼承、重構等特性,那麼,我們的應用程式是如何實現介面的呢?對於這點,xdais的設計了乙個名為ialg_fxns的v-table:
開發人員只要遵循以上v-table定義的函式指標格式,實現自己的函式,就可以了。這些函式的作用大體上和函式名類似,框架的呼叫過程如下:
xdm標準
看到這裡,有人要問了,既然ti已經有適用於dsp開發全過程的xdais標準,怎麼又弄了個xdm標準出來。這裡解釋一下:我們知道xdais幾乎涵蓋了dsp開發的整個生命週期,是乙個非常龐大的東西。如果裡面的介面、準則、規定要開發人員一一實現的話,工作量還是很大的。因此,ti在xdais上又擴充套件了乙個xdm標準,用來為數字訊號處理提供乙個輕量級的框架,總體上說,就是在xdais的基礎上擴充套件了乙個名為digital media的介面(xdm),然後根據數字影象處理的要求,提供了乙個名為visa的api集合,其底層遠離,用的還是xdais的東西。
這樣下來,應用層需和xdm標準打交道就變成以下形式了:
xdm介面實際上擴充套件了ialg介面,在其上增加了process和control方法,例如visa api中的ividenc1介面的v-table定義如下:
而xdm的呼叫過程就變為:
ti擴充套件xdm的目的,是為了為數字影象處理提供乙個輕型的框架,為此,ti根據數字影象處理的分類,封裝了一套名為visa的api集合(這裡的visa,不是信用卡visa,而是video、image、speech和audio的簡稱,想出這個名字的人太有才了),基本覆蓋了數字訊號處理的所有需求:
在codec engine的algorithm create過程中,開發乙個演算法程式往往是從實現這些介面開始,例如,我們要做乙個h264的編碼演算法,需要從實現ividencx開始。
這樣的,我們在codec engine的開發領域裡,dsp端開發流程如下:
深入理解C語言 深入理解指標
關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...
mysql 索引深入理解 深入理解MySql的索引
為什麼索引能提高查詢速度 先從 mysql的基本儲存結構說起 mysql的基本儲存結構是頁 記錄都存在頁裡邊 各個資料頁可以組成乙個雙向鍊錶每個資料頁中的記錄又可以組成乙個單向鍊錶 每個資料頁都會為儲存在它裡邊兒的記錄生成乙個頁目錄,在通過主鍵查詢某條記錄的時候可以在頁目錄中使用二分法快速定位到對應...
深入理解C語言 深入理解指標
關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...