国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種異步非對(duì)稱的讀寫存儲(chǔ)區(qū)管理方法與流程

      文檔序號(hào):12786282閱讀:363來(lái)源:國(guó)知局
      一種異步非對(duì)稱的讀寫存儲(chǔ)區(qū)管理方法與流程

      本申請(qǐng)涉及讀寫存儲(chǔ)區(qū)管理領(lǐng)域,具體是一種異步非對(duì)稱的讀寫存儲(chǔ)區(qū)管理方法。



      背景技術(shù):

      在一些應(yīng)用場(chǎng)景中,對(duì)數(shù)據(jù)處理的實(shí)時(shí)性要求不高,但是數(shù)據(jù)傳輸速度要求較高,通常使用異步FIFO來(lái)傳輸數(shù)據(jù)。異步FIFO一般采用環(huán)形存儲(chǔ)區(qū)來(lái)高效的實(shí)現(xiàn),當(dāng)然只是邏輯地址連續(xù),實(shí)際地址不連續(xù),因此在使用DMA進(jìn)行數(shù)據(jù)寫入,且單次傳輸長(zhǎng)度不固定時(shí),需要一種方法來(lái)解決地址不連續(xù)的問(wèn)題。



      技術(shù)實(shí)現(xiàn)要素:

      為了解決現(xiàn)有技術(shù)中存在的上述技術(shù)問(wèn)題,本發(fā)明提供了一種異步非對(duì)稱的讀寫存儲(chǔ)區(qū)管理方法,數(shù)據(jù)由DMA寫入和CPU讀出,設(shè)置限制標(biāo)志位,當(dāng)存儲(chǔ)區(qū)用到結(jié)尾放不下一個(gè)完整的數(shù)據(jù)包時(shí),使限制標(biāo)志位指向?qū)嶋H占用的結(jié)尾處,然后將完整的數(shù)據(jù)包存放到存儲(chǔ)區(qū)的頭部,從而使得交給DMA來(lái)搬運(yùn)數(shù)據(jù)的地址是連續(xù)的。

      進(jìn)一步的,向存儲(chǔ)區(qū)放入數(shù)據(jù)的過(guò)程包括如下步驟:

      i.要存入n個(gè)字節(jié),首先判斷空閑空間在內(nèi)存中是否是連續(xù)的;若連續(xù),就跳到ii。若不連續(xù),就跳到iii;

      ii.連續(xù)則判斷空閑空間大小是否足夠,足夠就直接存入數(shù)據(jù),不足夠就提示剩余空間不足;

      iii.不連續(xù)則先查看尾部空閑空間是否足夠。若足夠,就直接存入數(shù)據(jù);若不足夠,就跳到iv;

      iv.尾部空閑空間不足夠,則判斷頭部空閑空間是否足夠。若足夠,就直接存入數(shù)據(jù);若不足夠,就提示剩余空間不足。

      進(jìn)一步的,從存儲(chǔ)區(qū)取出數(shù)據(jù)的過(guò)程包括如下步驟:

      i.要取出n個(gè)字節(jié),首先判斷數(shù)據(jù)空間在內(nèi)存中是否連續(xù);若連續(xù),就跳到ii;若不連續(xù),就跳到iii;

      ii.連續(xù)則判斷數(shù)據(jù)空間是否足夠,足夠就直接取走數(shù)據(jù),不足夠就提示沒(méi)有足夠的數(shù)據(jù);

      iii.不連續(xù)則先判斷尾部數(shù)據(jù)空間是否足夠;若足夠,就直接取走數(shù)據(jù);若不足夠,就跳到iv;

      iv.尾部數(shù)據(jù)空間不足夠,則判斷頭部和尾部數(shù)據(jù)空間總大小是否足夠;若足夠,就先取出全部的尾部數(shù)據(jù),再?gòu)念^部取走所需的剩余大小數(shù)據(jù);若總大小不足夠,就提示沒(méi)有足夠的數(shù)據(jù)。

      本發(fā)明當(dāng)2個(gè)功能模塊之間的數(shù)據(jù)交換可以參考生產(chǎn)者和消費(fèi)者模型關(guān)系,即讀取和寫入是異步且非對(duì)稱(讀取長(zhǎng)度和寫入長(zhǎng)度不等且可變)時(shí),若數(shù)據(jù)由DMA寫入,通過(guò)跳過(guò)環(huán)形FIFO尾部長(zhǎng)度不夠的空間來(lái)巧妙地解決DMA地址必須連續(xù)的問(wèn)題。

      附圖說(shuō)明

      圖1是向存儲(chǔ)區(qū)放入數(shù)據(jù)流程圖;

      圖2是從存儲(chǔ)區(qū)取出數(shù)據(jù)流程圖;

      圖3-9是具體實(shí)施圖。

      具體實(shí)施方式

      下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步說(shuō)明。

      本發(fā)明的異步非對(duì)稱的讀寫存儲(chǔ)區(qū)管理方法,包括向存儲(chǔ)區(qū)放入數(shù)據(jù)和從存儲(chǔ)區(qū)取出數(shù)據(jù)兩方面。

      如圖1所示,向存儲(chǔ)區(qū)放入數(shù)據(jù)的過(guò)程包括如下步驟:

      i.要存入n個(gè)字節(jié),首先判斷空閑空間在內(nèi)存中是否是連續(xù)的。若連續(xù),就跳到ii。若不連續(xù),就跳到iii。

      ii.連續(xù)則判斷空閑空間大小是否足夠,足夠就直接存入數(shù)據(jù),不足夠就提示剩余空間不足。

      iii.不連續(xù)則先查看尾部空閑空間是否足夠。若足夠,就直接存入數(shù)據(jù)。若不足夠,就跳到iv。

      iv.尾部空閑空間不足夠,則判斷頭部空閑空間是否足夠。若足夠,就直接存入數(shù)據(jù)。若不足夠,就提示剩余空間不足。

      如圖2所示,從存儲(chǔ)區(qū)取出數(shù)據(jù)的過(guò)程包括如下步驟:

      i.要取出n個(gè)字節(jié),首先判斷數(shù)據(jù)空間在內(nèi)存中是否連續(xù)。若連續(xù),就跳到ii。若不連續(xù),就跳到iii。

      ii.連續(xù)則判斷數(shù)據(jù)空間是否足夠,足夠就直接取走數(shù)據(jù),不足夠就提示沒(méi)有足夠的數(shù)據(jù)。

      iii.不連續(xù)則先判斷尾部數(shù)據(jù)空間是否足夠。若足夠,就直接取走數(shù)據(jù)。若不足夠,就跳到iv。

      iv.尾部數(shù)據(jù)空間不足夠,則判斷頭部和尾部數(shù)據(jù)空間總大小是否足夠。若足夠,就先取出全部的尾部數(shù)據(jù),再?gòu)念^部取走所需的剩余大小數(shù)據(jù)。若總大小不足夠,就提示沒(méi)有足夠的數(shù)據(jù)。

      具體通過(guò)如下方式實(shí)現(xiàn):

      1)使用一片內(nèi)存作為存儲(chǔ)區(qū),大小為max;outx記錄存儲(chǔ)區(qū)占用區(qū)塊的開(kāi)始處,也即讀取首地址;inx記錄存儲(chǔ)區(qū)空閑區(qū)塊的開(kāi)始處,也即寫入的首地址; limit記錄實(shí)際占用的結(jié)尾處。開(kāi)始時(shí)的存儲(chǔ)區(qū)如圖3所示。

      2)當(dāng)數(shù)據(jù)生產(chǎn)者使用DMA搬運(yùn)了n次數(shù)據(jù)到存儲(chǔ)區(qū)后,圖中灰色方塊表示每次寫入的數(shù)據(jù),L[n]表示第n次數(shù)據(jù)搬運(yùn)的數(shù)據(jù)長(zhǎng)度。具體分布情況如圖4所示。

      3)數(shù)據(jù)消費(fèi)者從存儲(chǔ)區(qū)取走了部分?jǐn)?shù)據(jù)后。如圖5所示。

      4)在寫入過(guò)程中會(huì)出現(xiàn)如圖6所示。

      5)這時(shí)若數(shù)據(jù)生產(chǎn)者使用DMA搬運(yùn)了L+5個(gè)數(shù)據(jù)到存儲(chǔ)區(qū),但是存儲(chǔ)區(qū)的尾部只剩下L個(gè)數(shù)據(jù)大小的空間,所以從存儲(chǔ)區(qū)頭部開(kāi)始存放,limit指向?qū)嶋H占用的結(jié)尾處。如圖7所示。

      6)在讀取過(guò)程中會(huì)出現(xiàn)如下情況,如圖8所示。

      7)這時(shí)數(shù)據(jù)消費(fèi)者要取走L+5個(gè)數(shù)據(jù)時(shí),先取出從outx指向的地址開(kāi)始到limit指向的地址為結(jié)尾的L個(gè)數(shù)據(jù),limit重新指向max。然后再取出存儲(chǔ)區(qū)頭部的5個(gè)數(shù)據(jù),outx指向首地址加5的地址。如圖9所示。

      在多功能打印機(jī)芯片的USB device驅(qū)動(dòng)中,底層USB device驅(qū)動(dòng)作為數(shù)據(jù)生產(chǎn)者,而上層數(shù)據(jù)處理模塊為數(shù)據(jù)消費(fèi)者,使用了這種方法來(lái)解決DMA地址要連續(xù)的問(wèn)題。

      USB 在數(shù)據(jù)收發(fā)過(guò)程中,驅(qū)動(dòng)程序事先分配好存儲(chǔ)空間給DMA使用,大部分情況是滿512字節(jié)的長(zhǎng)包,但也存在不滿512字節(jié)的短包,因此會(huì)遇到存儲(chǔ)區(qū)用到結(jié)尾時(shí)放不下一個(gè)USB包的情況。使用本發(fā)明的機(jī)制,讓limit指向?qū)嶋H占用的結(jié)尾處,然后將USB包存放到存儲(chǔ)區(qū)的頭部(如果足夠),從而使得交給DMA來(lái)搬運(yùn)USB數(shù)據(jù)包的地址是連續(xù)的。

      當(dāng)前第1頁(yè)1 2 3 
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1