国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

Vxworks下的高速緩沖存儲器一致性問題

發布時間:2014-12-16 11:31    發布者:designapp

        1. Vxworks下的高速緩沖存儲器一致性問題
美國風河(Wind River)公司的VxWorks是目前最先進的實時嵌入式操作系統。Tornade是它的集成一體開發環境。然而,VxWorks下編程硬件驅動程序時卻存在著高速緩沖存儲器一致性(Cache Coherence)的問題。該系統下有兩個cache區:數據高速緩沖存儲器和指令高速緩沖存儲器。本文討論的高速緩沖存儲器問題均指數據高速緩沖存儲器。
高速緩沖存儲器一致性問題是指高速緩沖存儲器中的數據必須與內存中的數據保持同步(一致)。這個問題常發生在CPU內核與另一個設備異步訪問內存時。
高速緩沖存儲器可以工作在Write-through或copyback模式。在Write-through模式下,數據輸出時,系統會把數據同時寫入高速緩沖存儲器和內存中。這樣就保證了輸出時的高速緩沖存儲器一致性。但該模式卻無法解決輸入時的高速緩沖存儲器一致性問題.在Copyback模式下。系統只寫數據到高速緩沖存儲器中,因此對于數據輸入和輸出都存在高速緩沖存儲器一致性問題。
VxWorks下通常有兩種方法解決高速緩沖存儲器一致性問題。
(1)Cache-safe buffer(即non-cacheable 的buffer)。這種情況下,CPU讀數據時會從內存中讀取.而不是從高速緩沖存儲器中讀取:而CPU寫數據時則同時寫入高速緩沖存儲器和內存.
該方案可通過以下兩種方法實現.
* 在內存段屬性中定義此段buffer,空間屬性為non-cacheable;
* 在內存管理單元MMU支持下,用cacheDmaMalloc()/cacheDmaFree()獲得此段buffer。則此段buffer是non-cacheable的(注意無MMU時。分配的buffer是cacheable。此法不支持這種情況)。
(2)對于cacheable的buffer空間,采用flush()/invalidate()函數或宏來配合讀/寫使用此段buffer空間。flush()將高速緩沖存儲器中的數據寫入內存。invalidate()則將內存中數據寫入高速緩沖存儲器。這兩個函數都保證了高速緩沖存儲器與內存同步。
實際flush()/invalidate()函數有如下兩組,功能相同稍有區別:
組1:CACHE_DMA_FLUSH()函數和CACHE_DMA_INVALIDATE()函數
組2:cacheFlush()函數和cacheInvalidate()函數
第一組實際是2個宏,與cacheDmaMalloc()函數配合使用。




       
2. MPC860上高速緩沖存儲器一致性的軟件設計方法
MPC860是摩托羅拉公司的32位多用途集成通信控制器。主要包括一個32位的嵌入式PowerPC core。一個通信處理模塊CPM,一個系統集成模塊SIM60及一個獨立的快速以太網FEC模塊。在VxWorks下編寫MPC860的驅動程序。要保護的是CPM、FEC模塊的發送/接收緩沖區描述符TXBD/RXBD及其對應的緩沖區對于MPC860開發中象BD(Buffer DescriptiOn)這樣的靜態空間適合采用cache-safe boffer方法。即采用第1種方法:
而對BD域中對應的緩沖區,由于該緩沖區多是動態分配和釋放,更適合采用第2種方法,即采用flush()/invalidate()函數或宏來配合讀/寫使用此段緩沖區空間。這樣可以避免將整個的包括還未分配的空間都預先標記為non-cacheable而造成效率低下。具體可以采用下面的方法:
(1)TXBD/RXBD放在MPC860雙口RAM中。并在板級支持包BSP文件Syslib.c中的頁描述符數據結構 svsPhysMemDesc[]中定義860上所有64K內存空間為non-cachable的緩沖區。從而不必做cache coherence的保護了。
(2)對應TXBD/RXBD中數據指針域的發/收緩沖區均用cache DmaMalloc()獲得(具體是指初始化時給所有接收RXBD掛接的初始緩沖區和接收幀函數中給RXBD掛接的新緩沖區.以及在應用層中使用的發送TXBD對應的緩沖區)。而用cacheDmaFree()釋放。同時發送幀函數中用cacheFlush()函數保護待發送TXBD對應的緩沖區:接收幀函數中用cache Invalidate()函數保護已經裝載了接收數據的接收緩沖區。以快速以太網FEC的驅動程序為例,保護具體實現如下:
/* FEC發送幀函數 */
FEC_SEND_FRAME()
{
/* 填寫發送buffer內容,實際填寫在data cache中 */
sptr_tx_buffer[i]=data;
fec.txBd.dataPointer=(char*)sptr_tx_buffer;
/*將填寫在data cache中的內容寫回內存中的實際發送buffer(即以sptr_tx_buffer為地址的內存)中*/
cacheFlush(DATA_CACHE,sptr_tx_buffer,1518);
/*啟動發送命令,FEC控制器發送內存中buffer內容而非data cache中內容*/
*(UINT32*)VXImmrGet()+MOT_FEC_TX_ACT_OFF))=MOT_FEC_TX_ACT;
}
/*FEC接收幀函數*/
FEC_RECEIVE_FRAME()
{
/*取得實際接收buffer的地址*/
pBuffer=(void*)fec.rxBd.dataPointer;
/*將RXBD對應的內存中接收buffer中內容寫回data cache中*/
cacheInvalidate(DATA_CACHE,pBuffer,1520);
*vptr_buffer=pBuffer;
/*以后CPU可以安全使用接收buffer中的內容**vptr_buffer了*/
}
if ((pBuffer = (void *)malloc (allocBytes)) == NULL)
return (NULL);
/* Flush any data that may be still sitting in the cache */
cacheClear (DATA_CACHE, pBuffer, allocBytes);
cacheInvalidate (INSTRUCTION_CACHE, pBuffer, allocBytes);


本文地址:http://m.qingdxww.cn/thread-135449-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點宏來節省時間和空間
  • Dev Tool Bits——使用DVRT協議查看項目中的數據
  • Dev Tool Bits——使用MPLAB® Data Visualizer進行功率監視
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品极品美女自在线观看 | 日韩一级片在线 | 婷婷丁香在线 | 天堂网最新版www | aaa一级毛片免费 | 欧美日韩亚洲综合在线一区二区 | 亚洲精品视频专区 | 99久久er这里只有精品17 | 中国美女大战黑人国产 | 99热这里有免费国内精品 | 一区二区三区视频在线播放 | 美女亚洲一区 | 免费大片黄手机在线观看 | 欧美一级特黄高清免费 | 狠狠操网| 99精品国产自在现线免费下载 | 亚洲爆操 | 亚洲免费视频网址 | 国产午夜人做人视频羞羞 | 国产高清在线精品一区在线 | 亚欧日韩毛片在线看免费网站 | 97麻豆精品国产自产在线观看 | 131美女一区二区三区视频 | 两个人免费观看www在线 | 正在播放国产无套露脸 | 国自产拍在线天天更新91 | 久久免费资源福利资源站 | 成人网在线播放 | 欧美色视频在线观看 | 午夜精品久久久久久久四虎 | 国产亚洲欧美日韩在线看片 | 最新欧美在线 | 四大菩萨谁最厉害排第一位 | 精品一区 二区三区免费毛片 | 亚洲免费黄色网 | 亚洲第一se情网站 | 久久成人动漫 | 在线免费观看一级毛片 | 国产极品美女网站在线观看 | 日韩高清免费观看 | 亚洲色在线视频 |