基於ARM DSP進行應用開發

2021-05-21 21:44:23 字數 2388 閱讀 8069

傳統的晶元,基本是乙個處理器核心,或者是通用處理器如arm,或者是dsp。對於控制和使用者介面,一般用通用處理器實現,演算法處理或者**處理則依賴於dsp或者硬體晶元,很多系統都是雙晶元的架構。開發模式也比較單純,比如arm晶元,有arm的的**工具,基於os之上進行應用開發;dsp有dsp的開發工具,如ti的ccs以及510、560的**器,可以進行演算法的移植、優化、跟蹤、除錯等。這時,所需要的經驗也比較單一。

基於arm+dsp的雙核架構,很多任務程師不知道如何入手進行開發,提出了很多的疑問,比如對arm工程師,很困惑的是如何使用dsp的資源?如何進行資料的互動?如何保持雙核之間的同步?對dsp工程師,則問到如何進行arm除錯?如何啟動dsp?如果進行**加速,如何操作外設獲取或傳送資料等。基於不同的開發經驗和基礎,arm工程師和dsp工程師會從完全不同的角度來看soc的晶元,以至於拿到soc的晶元根本不知道如何入手,這裡就本人的經驗與大家分享一下。

首先arm+dsp的晶元,他是乙個雙核的,對應arm和dsp分別是不同的指令集和編譯器,可以把soc的晶元看成是兩個單晶元的合成,需要兩套不同的開發工具,ccs3.3可以進行晶元級的除錯和**,但是對應arm和dsp需要選擇不同的平台。一般來說,arm上面跑作業系統,比如linux,wince等,在arm上的開發,除了bootloader以外,基本都是基於os的開發,比如驅動,核心裁減,以及上層應用等,需要的除錯和**主要靠log或者os提供的偵錯程式,如kgdb,platform builder等。基於dsp核的開發和傳統單核dsp一樣,需要用ccs+**器來進行開發除錯。

其次,對於晶元的外設介面,arm核和dsp核都可以訪問,典型的情況是arm控制所有的外設,通過os上的驅動去控制和管理,這部分和傳統的arm晶元類似;dsp主要是進行演算法加速,只是和memory打交道,為了保持晶元的資源管理的一致性,盡量避免由dsp去訪問外設。當然,根據具體的應用需求,dsp也是可以控制外設介面進行資料的收發,這時,需要做好系統的管理,避免雙核操作的衝突。

最後,關於晶元的通訊和同步,這個是困擾很多任務程師的問題,為了便於客戶的開發和使用,ti提供了dsplink,codec engine的dvsdk開發套件,基於dvsdk可以很方便的進行arm+dsp的應用開發,下面對dvsdk的軟體架構,各個軟體模組的功能等做簡要介紹。 

dvsdk是多個軟體模組的整合,包括純dsp端的軟體模組,arm的軟體模組和雙核互動的軟體模組。dvsdk的軟體包都是基於實時軟體模組(real-time-software-component:rtsc)的,還需要安裝rtsc的工具xdc,xdc是ti開源的乙個工具,可以支援跨平台的開發,能夠最大程度的**重用;如果需要進行純arm的開發,還需要arm的編譯工具以及linux核心或者wince的bsp;如果需要進行dsp的演算法開發或者dsp端開執行**生成,還需要安裝dsp的編譯器cgtools和dsp/bios;為了便於配置生成dsp端的可執行**,通過嚮導生成codec的rtsc包和可執行**,還可以選裝ceutils和cg_xml。

dvsdk的核心是codec engine,所有的其他軟體模組基本都是圍繞codec engine的。

codec engine是連線arm和dsp的橋梁,是介於應用層(arm側的應用程式)和訊號處理層(dsp側的演算法)之間的軟體模組,在編譯dsp端可執行**和arm端應用程式時,都需要codec engine的支援。codec engine主要有兩部分: 

(1) arm端應用適配層,提供了精簡的api和對應的庫給應用層使用。 

(2) dsp的演算法呼叫層,提供了dsp演算法的介面封裝規範,使得所有的演算法通過簡單的配置就可以編譯到dsp的可執行程式中。

關於codec engine的介紹,可以參考《幫您快速入門codec engine》。

在arm端,配合codec engine使用的軟體模組有linuxutils或者winceutils,包含cmem,sdma等,cmem是用來在os之外分配連續物理記憶體空間,進行實體地址到虛位址,以及虛位址到實體地址空間轉化的。為了避免資料的多次複製,需要開闢一塊arm和dsp共享的資料空間,arm和dsp都可以直接訪問,這部分空間需要通過cmem管理。對arm來說,cmem是os上的乙個驅動程式,需要通過ioctl來實現記憶體分配或者位址空間轉化。由於dsp可以訪問任何實體地址空間,通過arm傳給dsp的指標必須是實體地址。

如果只是呼叫現成的或者第三方的演算法庫,可以只了解arm端的軟體模組,codec engine或者dmai已經提供了豐富的應用介面,dsp可以認為是個單純的**加速器,把arm+dsp的晶元當作asic一樣使用。如果要充分發揮dsp的效能,就需要對dsp進行開發了。codec engine對dsp的演算法只是規範了介面,以便於和codec engine一起生成dsp的可執行程式。

原帖位址

nginx基於lua語言進行開發

注 按照上一講講解的內容,基於openresty在另外兩台機器上都部署一下nginx lua的開發環境,192.168.25.103和192.168.25.104上都部署好了,這邊的話呢,是打算用192.168.25.103和192.168.25.104作為應用層nginx伺服器,用192.168....

應用Rails進行REST 開發 四

controller 裡的url 方法 在view中,我們已經使用了一些新的helper 方法 也就是path方法 來生成了rest風格的url,那麼controller 自然也需要一些新的東西來處理redirect 等請求。在controller中,我們使用 url helper 方法,來生成正確...

基於ArcGIS的Java應用開發

綜覽 what is the web adf 什麼是web adf ide integration 整合開發環境整合 adf web controls adf web 控制 common api 普通api overview of tasks and the task framework 綜覽tas...