<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > OMAPL138雙核系統(tǒng)的調(diào)試方案設(shè)計(jì)

          OMAPL138雙核系統(tǒng)的調(diào)試方案設(shè)計(jì)

          作者: 時(shí)間:2012-05-08 來(lái)源:網(wǎng)絡(luò) 收藏

          摘要:高性能、低功耗處理器為手持式移動(dòng)設(shè)備提供強(qiáng)有力的支持。對(duì)通信模塊DSPLink的軟件架構(gòu)和在Linux嵌入式操作下的編譯加載進(jìn)行了分析和介紹,以消息隊(duì)列組件為例分析了ARM和DSP通信時(shí)通道的建立和連接的方式。通過(guò)DSP/BIOS和Linux端DSPLink的MSGQ接口和多線程技術(shù),建立ARM和DSP消息傳遞通道,提供了在雙核開(kāi)發(fā)中對(duì)DSP端暗箱的解決方法。
          關(guān)鍵詞:;雙核處理器;DSPLink;消息隊(duì)列;

          1 雙核困難
          雙核芯片的推出為兼顧強(qiáng)大的數(shù)據(jù)處理能力和良好的用戶體驗(yàn)提供了解決方案,將雙CPU集成在一個(gè)芯片上也簡(jiǎn)化了硬件電路設(shè)計(jì)的難度。但是,雙核開(kāi)發(fā)增加了軟件設(shè)計(jì)的難度。以往的ARM工程師與DSP算法工程師的明確分工已經(jīng)不能適用于雙核芯片的開(kāi)發(fā),需要在雙核芯片的同步運(yùn)行上提供一些解決方案。開(kāi)發(fā)工程師在進(jìn)行雙核開(kāi)發(fā)中會(huì)遇到調(diào)試方面的困難,以往的CCS和仿真器的調(diào)試方式已經(jīng)不適用于雙核環(huán)境下對(duì)DSP程序的調(diào)試。DSP端的程序運(yùn)行,無(wú)法直觀地提供調(diào)試信息給開(kāi)發(fā)者,相當(dāng)于一個(gè)“黑匣子”,以至于開(kāi)發(fā)者無(wú)法獲取DSP端寄存器和變量的變化情況。本文通過(guò)推出基于DSPLink軟件模塊的消息隊(duì)列組件,使DSP調(diào)試信息通過(guò)ARM端應(yīng)用程序打印。

          2 雙核通信理論
          TI公司推出的OMAP體系結(jié)構(gòu)與其推出的達(dá)芬奇結(jié)構(gòu)有相似之處,OMAP體系開(kāi)發(fā)套件與達(dá)芬奇套件有很大的相似性,而達(dá)芬奇處理器最具革命性的意義在于它的全平臺(tái)開(kāi)放。TI提供了全套開(kāi)發(fā)套件,給工程師們?cè)陂_(kāi)發(fā)上提供了便利性和規(guī)范。開(kāi)發(fā)套件中,基于雙核通信的底層為DSPLink模塊,為核心模塊。
          2.1 DSPLink雙核通信構(gòu)架
          在OMAP體系中,芯片設(shè)計(jì)時(shí),在片內(nèi)分配一塊RAM內(nèi)存區(qū)域,是ARM和DSP都可以直接使用的共享內(nèi)存區(qū)域。在小數(shù)據(jù)量的簡(jiǎn)單的控制信息通信時(shí),可以直接使用片內(nèi)的共享內(nèi)存,通信速率也是最快的。同時(shí)還有將共享內(nèi)存分配在片外的DDR,以便進(jìn)行大數(shù)據(jù)量的傳輸。
          DSPLink為T(mén)I針對(duì)雙核通信的底層模塊,在ARM端和DSP端具有相似的作用,在ARM端Linux嵌入式操作中作為L(zhǎng)inux的內(nèi)核模塊存在,扮演著設(shè)備驅(qū)動(dòng)的角色,通過(guò)驅(qū)動(dòng)提供的眾多上層API接口直接操作共享內(nèi)存。在DSP端其連接的是TI推出的主要用于DSP的一款實(shí)時(shí)操作DSP/BIOS,同樣作為驅(qū)動(dòng)存在。采用DSPLink軟件方法將物理層抽象出來(lái),為硬件提供了十分優(yōu)秀的擬合,使ARM和DSP在通信上實(shí)現(xiàn)無(wú)縫的鏈接。
          DSPLink的軟件構(gòu)架如圖1所示。

          本文引用地址:http://www.ex-cimer.com/article/149121.htm

          a.jpg


          (1)在GPP端
          GPP OS:在GPP端多采用操作系統(tǒng),比較常用的是嵌入式操作系統(tǒng)Linux和WinCE,TI的DVSDK中有相關(guān)的支持。
          OS抽象層:OS抽象層包含了DSPLink需要的一些通用的OS服務(wù)部件,通過(guò)此層使DSPLink可以不依賴特定的操作系統(tǒng),從而可以利用接口特性更多地針對(duì)不同的操作系統(tǒng)使用,使開(kāi)發(fā)者方便地移植到不同操作系統(tǒng)中。
          Link Driver:GPP端的驅(qū)動(dòng)層,該層提供了共享內(nèi)存的GPP端的驅(qū)動(dòng)。
          Processor Manager:該層維護(hù)一個(gè)針對(duì)所有模塊的Book-Keeping信息,通過(guò)API給用戶提供通過(guò)Link Driver的控制操作。
          DSP/BIOS Link:通過(guò)API可以脫離對(duì)底層的了解,直接操作共享內(nèi)存,以實(shí)現(xiàn)通信。
          (2)在DSP端
          DSP Link Driver:Link Driver是DSP/BIOS中驅(qū)動(dòng)的一部分,該部分驅(qū)動(dòng)只負(fù)責(zé)基于物理連接之上與GPP之間的交互。
          DSP/BIOS:DSP端的實(shí)時(shí)操作系統(tǒng)。
          2.2 MSGQ通信搭建方法
          雙核通信的基本模式即是一方將所需要傳輸?shù)臄?shù)據(jù)放到共享內(nèi)存中,通過(guò)中斷的方式告知另一方。作為DSPLink中不同的通信模塊,存在的不同只是對(duì)共享內(nèi)存的組織方式不同。下面以MSGQ傳輸方式為例分析建立雙核通信構(gòu)架。
          MSGQ表述消息隊(duì)列方式,主要針對(duì)ARM和DSP端可變長(zhǎng)度的短消息的交互,是基于DSP/BIOS的MSGQ模塊實(shí)現(xiàn)的。消息的發(fā)送/接收都要以隊(duì)列的方式進(jìn)行。消息的發(fā)送者將消息發(fā)送入隊(duì)列中,隨后接收者從隊(duì)列中將消息取出。每個(gè)消息隊(duì)列只能有一個(gè)接收者,但是可以同時(shí)有多個(gè)發(fā)送者。在一個(gè)任務(wù)中,可以進(jìn)行多個(gè)消息隊(duì)列的讀寫(xiě)。使用MSGQ進(jìn)行數(shù)據(jù)傳輸還需要用到另外兩個(gè)組件:
          ①PROC,在GPP應(yīng)用中模擬DSP角色,控制DSP程序的載入、運(yùn)行、停止。
          ②POOL,用于分配存儲(chǔ)器緩沖區(qū),將內(nèi)存合理分塊,使分配所需內(nèi)存適合傳輸數(shù)據(jù)的尺寸。
          利用這兩個(gè)組件,將完成DSP程序的載入啟動(dòng)和內(nèi)存池的分配。
          MSGQ通信流程如圖2所示。

          b.jpg

          linux相關(guān)文章:linux教程



          上一頁(yè) 1 2 3 4 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();