<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 嵌入式系統程式設計重要抉擇

嵌入式系統程式設計重要抉擇

——
作者: 時(shí)間:2007-04-29 來(lái)源: 收藏

  在當今的多媒體應用中,系統控制(通常的MCU作用)和信號處理(通常的DSP作用)之間的交互性不斷增強?,F在推出的一種媒體處理器能夠同時(shí)處理MCU和DSP的任務(wù),從而將那些熟悉用MCU方式進(jìn)行應用開(kāi)發(fā)的C程式師帶入一個(gè)新的領(lǐng)域,其中對代碼和資料流程的智慧管理會(huì )顯著(zhù)提高系統的性能。這對于採用“已經(jīng)掌握”的編程方法和簡(jiǎn)單的使用指令高速緩沖記憶體(cache, 簡(jiǎn)稱(chēng)快取記憶體)和資料快取記憶體來(lái)管理這些資料流程的程式師很有吸引力。然而,對媒體處理器的高性能直接記憶體訪(fǎng)問(wèn)(DMA)能力應認真地考慮。因爲懂得在這些應用中對使用快取記憶體和DMA進(jìn)行權衡將有助于更好地理解如何編程來(lái)優(yōu)化系統。

記憶體結構——對記憶體管理的要求

  當今的媒體處理器具有分級的記憶體結構,用來(lái)平衡幾種不同容量和性能等級的記憶體。通常,離核心處理器最近的記憶體(稱(chēng)爲“1級”或“L1”記憶體)以全時(shí)鐘速率工作,通常支援單時(shí)鐘周期指令的運行。爲了高效地利用記憶體匯流排的帶寬,L1記憶體一般分爲指令段和資料段。通常,該記憶體被配置成SRAM或快取記憶體。對于那些許可權最高的應用,在一個(gè)單時(shí)鐘周期內就能夠訪(fǎng)問(wèn)片內SRAM。對于要求較長(cháng)代碼的系統,則可以提供附加的片內和片外記憶體——同時(shí)增加了等待時(shí)間。

  這種層次結構本身作用有限。爲了適應僅配合低速外部記憶體的大部分應用,當今的高速處理器卻以很低的速度降級使用。爲了提高性能,程式師可以人工地選擇將關(guān)鍵代碼移入或移出內部SRAM。另外,將資料快取記憶體和指令快取記憶體加入這種結構使程式師能夠更方便地人工管理外部記憶體??烊∮洃涹w減少了將指令和資料流程送入處理器內核的人工管理傳送。這樣程式師無(wú)需考慮如何把資料和指令流送入處理器內核,從而極大地簡(jiǎn)化了編程模式。

指令記憶體管理——快取記憶體還是DMA?
      
  對媒體處理器市場(chǎng)的快速調查表明,核心處理器的速度大于或等于600 MHz。盡管這種性能可以開(kāi)闢許多新應用,但只有在從內部L1記憶體中讀取代碼時(shí)才能達到這種最高速度。當然,理想嵌入式處理器可以具有無(wú)限容量的L1記憶體,但這不切實(shí)際。因此,程式師在爲其實(shí)際系統優(yōu)化記憶體和資料流程時(shí),必須考慮幾種可選方案以充分利用置于處理器內的L1記憶體。讓我們來(lái)考慮一下其中的一些方案。

  第一種方案同時(shí)也是最直接的方案,目標應用代碼可以完全放入L1指令記憶體。對于這種情況,程式師只需將應用代碼直接映射到該記憶體空間,無(wú)需特殊操作。這就是爲什麼包含MCU和DSP兩種功能的媒體處理器必然在這種體系架構支援的代碼密度方面具有獨特優(yōu)勢的原因。

  第二種方案,採用一種快取記憶體機構允許程式師訪(fǎng)問(wèn)更大容量、較低成本的外部記憶體。根據需要,這種快取記憶體可以作爲一種將代碼自動(dòng)送入L1指令記憶體的方法。這種方法的主要優(yōu)點(diǎn)是程式師無(wú)需管理代碼移入和移出快取記憶體。當執行線(xiàn)性代碼時(shí),這種方法達到最好的效果。當執行非線(xiàn)性代碼時(shí),快取記憶體線(xiàn)可能會(huì )被替換得太頻繁,以致于不能提高即時(shí)性能。

  指令快取記憶體實(shí)際上具有兩個(gè)作用。第一,它以更有效率的方式從外部記憶體中預取指令。第二,由于快取記憶體一般使用某種“最近使用的指令”的演算法,所以那些用得最頻繁的指令往往就被保持在快取記憶體中。這樣做很有好處,因爲存在L1快取記憶體中的指令能夠在一個(gè)單時(shí)鐘周期內完成,就像指令在L1 SRAM中一樣。也就是說(shuō),如果該代碼一旦被取走,并且還沒(méi)有被覆蓋,即準備在下一個(gè)指令周期執行該代碼。

Figure 1: A simplified view of an embedded media processor illustrates the multiple pathways between L1 memory and larger, external memories. Code and data stored externally can be cached in L1, or blocks can be moved to L1 memory as an independent background process via the DMA controller. Peripherals that transmit and receive large data buffers can DMA them directly to external memory without involving L1 memory in the process.
 


  大多數嚴格的即時(shí)程式師一般不相信這種快取記憶體能帶來(lái)最佳的系統性能。他們的理由是如果一系列指令在需要執行的時(shí)候卻沒(méi)有在快取記憶體內,將導致影響性能。採用快取記憶體鎖定機構能彌補這個(gè)問(wèn)題。一旦將關(guān)鍵的指令裝入快取記憶體,快取記憶體線(xiàn)就被鎖住,因此指令不會(huì )被覆蓋。這樣,程式師就能夠在快取記憶體中保持他們所需指令,并且使該快取記憶體機構管理次要指令。

  最后一種方案,通過(guò)使用一個(gè)獨立于處理器內核的DMA通道將代碼移入或移出L1記憶體。當該處理器內核在記憶體的一個(gè)存儲塊運行時(shí),該DMA將代碼送入下一個(gè)存儲塊去執行。這種方案通常被稱(chēng)爲一種覆蓋技術(shù)。

  雖然通過(guò)DMA將覆蓋代碼送入L1指令記憶體可以比快取記憶體方式提供更多的關(guān)鍵指令,但其代價(jià)是要增加程式師的工作量。換句話(huà),程式師需要預先安排一種覆蓋代碼的方法和恰當地配置DMA通道。對于一種能夠做有價(jià)值的額外管理程式的詳細計劃,這種性能仍然會(huì )提高。


資料記憶體管理
     
  嵌入式媒體處理器的資料記憶體結構對于整個(gè)系統性能的重要性等同于指令時(shí)鐘速度的重要性。因爲在多媒體應用中的任一時(shí)間經(jīng)常會(huì )有多個(gè)資料傳送任務(wù)同時(shí)進(jìn)行,所以其匯流排結構必須支援內核和DMA對所有外部和內部記憶體塊的訪(fǎng)問(wèn)。對DMA控制器和內核之間的沖突進(jìn)行自動(dòng)處理是非常關(guān)鍵的,否則性能將大大降低。首先要求在內核與DMA之間的建立DMA控制器,然后當要進(jìn)行處理的資料已經(jīng)準備時(shí)再應該回應中斷。

  處理器通常作爲其一項基本功能執行資料讀取操作。雖然這通常是傳送資料效率最低的機構,但它是最簡(jiǎn)單的編程方式。小容量、快速方便的記憶體有時(shí)可以用來(lái)作爲L1資料記憶體的一部分,但對于較大容量、片外緩沖器,如果內核要從外部記憶體讀取所有資料,那麼訪(fǎng)問(wèn)時(shí)間就長(cháng)得難以忍受。內核不僅要花掉多個(gè)時(shí)鐘周期去取資料,而且它要花很多時(shí)間忙于讀取資料。在多媒體和其他大量資料操作應用中,要不斷地將大量資料存儲移入或移出SDRAM,內核的讀取資料操作是無(wú)法應付這種情況的。雖然內核的讀取資料操作總是需要的,但爲了維持性能,一定要使用DMA或快取記憶體傳送大量的資料。


使用DMA管理資料

  為了在多媒體系統中有效地利用DMA,應該有足夠多的DMA通道以充分支援處理器的週邊電路,即可以同時(shí)傳送一對以上的記憶體與DMA之間的資料流程。這一點(diǎn)很重要,因爲考慮到在外部記憶體和L1記憶體之間傳送用于內核處理的資料塊的同時(shí),必然有一個(gè)原始的多媒體資料也會(huì )進(jìn)入外部記憶體(通過(guò)高速週邊設備)。進(jìn)一步地,DMA引擎允許週邊電路與外部記憶體之間的直接資料傳送,而無(wú)需在L1記憶體內有一個(gè)“中間停留”,因此在大量資料演算法中可以節省外部資料傳送。

  隨著(zhù)資料傳輸速率和性能要求的提高,設計工程師能隨意對“系統性能調節”控制就變得非常關(guān)鍵。例如,優(yōu)化DMA控制器以使每個(gè)時(shí)鐘周期都可傳送一個(gè)資料字。當向同一方向同時(shí)傳送多個(gè)資料流程時(shí)(例如,從內部記憶體向外部記憶體傳送全部資料),這通常是最有效的操縱控制器的方式,因爲這種方法可以防止DMA匯流排有空閑時(shí)間。


  但是當傳送多個(gè)雙向視頻和音頻資料流程時(shí),必須使用“業(yè)務(wù)量控制”,以防止一個(gè)資料流程獨佔匯流排。例如,如果DMA控制器總是把DMA匯流排連接到任何一個(gè)準備每次傳送一個(gè)資料字的週邊電路(例如,連接到一個(gè)SDRAM),一個(gè),那麼總的資料吞吐率會(huì )降低。在這種情況中,幾乎每一個(gè)時(shí)鐘周期資料傳送都改變一次方向,因此在SDRAM匯流排上與來(lái)回切換時(shí)間相關(guān)的等待時(shí)間將顯著(zhù)降低吞吐率。這樣,具有一個(gè)通道可編程傳送資料字長(cháng)度的DMA控制器比那種具有固定傳送長(cháng)度的控制器有明顯的優(yōu)點(diǎn)。因爲每個(gè)DMA通道都可以將一個(gè)週邊設備與外部或內部記憶體相連,所以它還具有的一個(gè)重要優(yōu)點(diǎn)是它能自動(dòng)地連接到一個(gè)能發(fā)出緊急匯流排請求的週邊設備。

  另一個(gè)特性即二維DMA性能,具有幾種系統級優(yōu)點(diǎn)。第一,它允許以一種比較直觀(guān)的處理順序將資料放入記憶體。例如,亮度和色度資料從一個(gè)圖像感測器相繼傳來(lái),但可將它們自動(dòng)存入各自的記憶體緩沖塊。二維DMA的交錯和去交錯功能在處理視頻和圖像資料之前節省了多余的記憶體匯流排傳送。另外,通過(guò)有選擇性地進(jìn)行傳送,即只選擇需要的輸入圖像資料塊而不是全部圖像資料,二維DMA也能夠使系統的資料帶寬最小。

  其他的重要DMA特性包括爲滿(mǎn)足當前的週邊設備任務(wù)請求區分DMA通道優(yōu)先等級的能力,以及爲匹配這些優(yōu)先順序設置相應的DMA中斷的能力。這些功能有助于確保資料緩沖器不會(huì )因DMA忙于其他週邊設備而溢出,并且它們還使程式設計工程師在每個(gè)DMA通道的資料流程通基礎上優(yōu)化整個(gè)系統性能時(shí)具有更大的自由度。

  因爲內部記憶體通常分爲幾個(gè)子存儲塊,所以DMA控制器和內核同時(shí)存取向不同子存儲塊存放資料的操作均可在一個(gè)單時(shí)鐘周期內完成。例如,當內核對一個(gè)子存儲塊的資料進(jìn)行操作時(shí),DMA可以向另一個(gè)子存儲塊存放新資料。在某些條件下,甚至可以同時(shí)訪(fǎng)問(wèn)同一個(gè)子存儲塊。當訪(fǎng)問(wèn)外部記憶體時(shí),通常只有一個(gè)物理匯流排可用,該物理匯流排經(jīng)常被同步和非同步記憶體所復用。


關(guān)于資料快取記憶體

  當前的DMA控制器的靈活性是一把雙刃劍。當在兩個(gè)處理器之間讀取一個(gè)大的C/C++應用程式時(shí),程式師有時(shí)不愿意將DMA功能整合到已經(jīng)存在的工作代碼中。這時(shí),資料快取記憶體就很有用了。通常,資料通過(guò)快取記憶體送入L1記憶體以便最快處理。這種資料快取記憶體非常吸引人,因爲它象一個(gè)小DMA一樣工作,但涉及到程式師的工作量最小。

  因爲典型的快取記憶體線(xiàn)填充特性,所以當處理器對外部記憶體內的連續資料存放塊進(jìn)行操作時(shí),資料快取記憶體就非常有用。這是因爲該快取記憶體不只存儲當前正在被處理的立即資料,此外它還向與當前相鄰的資料塊內予取資料。換句話(huà)說(shuō),該快取記憶體機構假設當前處理的資料字是即將被處理的一個(gè)相鄰資料塊的一部分的可能性極大。對于多媒體圖像、音頻和視頻流,這是一個(gè)合理的假設。

  由于資料緩沖器通常來(lái)自週邊電路,所以對資料快取記憶體的操作并不總象對指令快取記憶體的操作那樣容易。這是由于必須在非“監聽(tīng)”的快取記憶體中人工控制一致性。在使用這些快取記憶體準備對新資料進(jìn)行任何讀取之前都必須使該資料緩沖器無(wú)效。

  總之,在一個(gè)具體的多媒體系統中對指令和資料傳送的最佳機構的選擇應該是快取記憶體還是DMA沒(méi)有一種簡(jiǎn)單的答案。不過(guò),一旦開(kāi)發(fā)工程師瞭解到這其中的權衡考慮,就能進(jìn)入到一種“不偏不倚”的狀態(tài),從而將使系統性能達到最優(yōu)化。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


關(guān)鍵詞: 嵌入式系統 嵌入式

評論


相關(guān)推薦

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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>