999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

接口透明傳輸中數(shù)據(jù)緩存的建模設(shè)計(jì)

2014-01-21 00:52:34韓東
電子設(shè)計(jì)工程 2014年20期

韓東

(華北計(jì)算機(jī)系統(tǒng)工程研究所 北京 100083)

在工業(yè)應(yīng)用中,同一系統(tǒng)中常會(huì)連接許多不同類型的設(shè)備,但因設(shè)備的接口不同,嵌入式系統(tǒng)中會(huì)涉及到不同接口間的數(shù)據(jù)透傳,比如串口485/232的數(shù)據(jù)透明傳輸?shù)揭蕴W(wǎng)接口等。這樣的系統(tǒng)中需要建立接口間的數(shù)據(jù)緩存FIFO,來實(shí)現(xiàn)接口的數(shù)據(jù)接收和發(fā)送。

為了通用性,不具體指定接口,而是概念化為實(shí)現(xiàn)接口A、B、C、D、W、X、Y、Z間的數(shù)據(jù)透傳處理的數(shù)據(jù)緩存 FIFO模型。

1 名詞定義

在緩存建模前先定義幾個(gè)名詞的概念。

1.1 接口映射

考慮透傳時(shí)接口的分配,即一個(gè)接口接收到的數(shù)據(jù)需要從哪個(gè)接口發(fā)送出去。為每個(gè)接口設(shè)定一個(gè)發(fā)送到接口屬性,接口PORT(T)(T指任一接口)的發(fā)送到屬性值記為DATA_TO(T)。當(dāng)有 DATA_TO(T)=PORT(V)時(shí),意味著 PORT(T)接收到的數(shù)據(jù)將由PORT(V)發(fā)送,這稱為DATA_TO接口映射,簡稱接口映射。

圖1 接口映射Fig.1 Interface mapping

若對(duì)于任意 T和任意 V,當(dāng) PORT(T)≠PORT(V)時(shí),有DATA_TO(T)≠DATA_TO(V),則稱該接口映射為接口單射[3]。

若對(duì)于任意 T和任意 V,當(dāng) PORT(T)≠PORT(V)時(shí),可DATA_TO(T)≠DATA_TO(V)有,則稱該接口映射為接口多射。

若兩個(gè)接口 T和 V,當(dāng) PORT(T)≠PORT(V)時(shí),有DATA_TO(T)=PORT(V)同時(shí) DATA_TO(V)=PORT(T),則稱該接口映射為接口T和V對(duì)射,稱PORT(T)和PORT(V)為一組對(duì)射對(duì)。

若所有2N個(gè)接口既滿足單射又滿足兩兩對(duì)射[1],則稱2N個(gè)接口映射為接口一一映射。

1.2 數(shù)據(jù)收發(fā)有序

如有一個(gè)數(shù)據(jù)序列Q,按序列順序分為n個(gè)序列組Q(n)(n=0,1,...N),當(dāng)將 Q(n)按 n 的字典順序(Q(0),Q(1),...Q(N))排列成序列Q’時(shí),滿足Q′=Q,稱Q(n)為Q的有序序列組。

如果一個(gè)數(shù)據(jù)序列Q在從一個(gè)接口PORT(T)接收并按序列組Q(n)寫入緩存后,緩存中的存放的序列組Q(n)為Q的有序序列組,則稱數(shù)據(jù)有序接收。

如果緩存中的Q序列組被一個(gè)接口PORT(V)發(fā)送時(shí),發(fā)送出的數(shù)據(jù)序列組Q(n)為Q的有序序列組,則稱數(shù)據(jù)有序發(fā)送。

如果一個(gè)數(shù)據(jù)序列Q在從接口PORT(T)接收后在接口PORT(V)發(fā)送出,發(fā)送出的數(shù)據(jù)序列組Q(n)與為Q的有序序列組,則稱數(shù)據(jù)有序收發(fā),簡稱有序。

1.3 分塊緩存

如果每次寫入或讀出操作的緩存對(duì)象是直接數(shù)據(jù),則稱之為無分塊緩存;而如果操作對(duì)象是一個(gè)緩存區(qū)的地址,則稱之為分塊緩存,且該地址指明的是一個(gè)緩存塊的首地址[2]。

如果一個(gè)緩存塊,在其使用過程中涉及建立一個(gè)新的緩存塊。若緩存允許此操作,則稱之為可嵌套分塊緩存;若緩存不允許此操作,則稱之為無嵌套分塊緩存。

如果一個(gè)分塊緩存,每個(gè)緩存塊的大小固定相等,則稱之定長分塊緩存;而若每個(gè)緩存塊的大小可變,則稱之可變長分塊緩存。

1.4 私用緩存

如果一個(gè)緩存區(qū)只有一個(gè)特定接口PORT(T)可以訪問和得到使用權(quán),則稱之為PORT(T)的私有緩存區(qū),否則如果所有端口都能訪問及得到使用權(quán),則稱之為公用緩存。

2 接口單射有序私有無分塊緩存的設(shè)計(jì)

首先構(gòu)建最精簡的FIFO緩存模型,接口單射私有無分塊緩存,它僅須實(shí)現(xiàn)單字節(jié)數(shù)據(jù)序列的寫入和讀出操作,無其它特殊要求。

為每個(gè)接口PORT(T)建立一個(gè)私有的數(shù)據(jù)FIFO緩存區(qū)BUF(T),緩存區(qū)大小為SIZE_BUF(T),以輔助 T接口數(shù)據(jù)的接收和發(fā)送操作[4]。

緩存模型建立如下:

1)選定一個(gè)連續(xù)的RAM地址空間,在此空間上開辟一段大小為SIZE_BUF(T)的連續(xù)空間,將此塊空間初始化為環(huán)形FIFO區(qū)作為T接口的緩存區(qū),記作BUF(T)。

2)設(shè)置輔助指針T_PUT_POINTER和T_GET_POINTER,及變量 T_BUF_LENGTH。 其中,T_PUT_POINTER指向BUF(T)中下一個(gè)可寫入數(shù)據(jù)的地址;T_GET_POINTER指向BUF(T)中下一個(gè)可讀出的數(shù)據(jù)的地址;T_BUF_LENGTH為BUF(T)中有效字節(jié)數(shù)據(jù)的數(shù)量[6]。

①寫入操作

字節(jié)數(shù)據(jù)寫入BUF(T)緩存時(shí)執(zhí)行寫入操作,首先判斷緩存區(qū)是否已經(jīng)寫滿。緩存區(qū)已經(jīng)寫滿的標(biāo)志是T_BUF_LENGTH大小為 SIZE_BUF(T),此時(shí) T_PUT_POINTER與T_GET_POINTER指相同一空間。如緩存已滿,則該數(shù)據(jù)被丟棄。否則,將其寫入T_PUT_POINTER指向的空間。同時(shí),T_PUT_POINTER增加一個(gè)字節(jié)空間,如果增加后超過了BUT(T)的底地址,則T_PUT_POINTER指向其首地址。最后更新T_BUF_LENGTH增加一字節(jié)長度[5]。

②讀出操作

讀出BUF(T)緩存中數(shù)據(jù)時(shí)執(zhí)行讀出操作,首先判斷緩存區(qū)是否已空。緩存區(qū)空的標(biāo)志是T_BUF_LENGTH大小為0,此時(shí)T_PUT_POINTER與T_GET_POINTER指相同一空間。如果緩存已空,則讀出無效標(biāo)志。否則讀出T_GET_POINTER指向的空間。同時(shí)T_GET_POINTER增加一個(gè)字節(jié)空間,如果增加后超過了BUF(T)的底地址,則T_GET_POINTER指向其首地址。最后更新T_BUF_LENGTH減少一字節(jié)長度[7]。

圖2 單字節(jié)FIFOFig.2 Single byte FIFO

3)建立好以上緩存區(qū)后,為T接口增添數(shù)據(jù)接收和發(fā)送操作函數(shù),其中接收操作映射為緩存區(qū)BUF(T)的寫入操作,發(fā)送操作映射為T的對(duì)應(yīng)接口X的緩存區(qū)BUF(X)的讀出操作。

3 接口單射有序私有定長無嵌套分塊緩存

考慮接口接收到的字節(jié)序列為幀格式報(bào)文塊,實(shí)現(xiàn)其收發(fā)有序。

假設(shè)一個(gè)數(shù)據(jù)塊的接收或發(fā)送過程中,沒有其它接口數(shù)據(jù)插入,仍為接口單射私有緩存。這樣,在上個(gè)模型的基礎(chǔ)上建立可分塊的緩存組,稱作緩存塊。

假設(shè)各報(bào)文塊的大小不會(huì)超過緩存塊的數(shù)據(jù)容量,且接收?qǐng)?bào)文到一個(gè)數(shù)據(jù)塊或發(fā)送一個(gè)數(shù)據(jù)塊的報(bào)文到接口的過程中,沒有其它數(shù)據(jù)塊的借出,即緩存塊無嵌套。

如此,只需在上節(jié)模型基礎(chǔ)上將單字節(jié)FIFO緩存,替換成緩存塊地址的FIFO緩存,實(shí)現(xiàn)緩存塊的地址取出和存入處理即可。以下將緩存塊的取出稱為緩存塊借出,將緩存塊的存入稱為緩存塊歸還。

模型改進(jìn)如下:

1)將上節(jié)緩存中接口PORT(T)的緩存BUF(T)分為N個(gè)固定字節(jié)長度為BUF_DIV_SIZE(T)的緩存塊BUF_DIV(T)。

2)為每個(gè)分塊添加固定字節(jié)長度為HEAD_SIZE(T)的信息頭。其中,信息頭位于BUF_DIV(T)的起始位的BUF_DIV_HEAD_SIZE(T)個(gè)字節(jié)的地址空間。信息頭依次固定包含分塊狀態(tài)、分塊數(shù)據(jù)長度及下一個(gè)分塊起始地址。分塊數(shù)據(jù)長度最大為BUF_DIV_SIZE(T)-BUF_DIV_HEAD_SIZE(T),標(biāo)記為 BUF_DIV_BODY_SIZE(T)。

3)建立兩個(gè)如上節(jié)模型所述的FIFO,將其操作對(duì)角由單字節(jié)替換成對(duì)32位的4字節(jié),輔助緩存塊的寫入借出、寫入歸還和讀出借出、讀出歸還操作。設(shè)置其中一個(gè)FIFO存放還未寫入數(shù)據(jù)的緩存塊地址,稱為T_FREE_TABLE,另一個(gè)存放已經(jīng)寫入數(shù)據(jù)的緩存塊地址,稱為T_USED_TABLE。

4)為T_FREE_TABLE添加輔助指針T_FREE_TABLE_P UT_POINTER和T_FREE_TABLE_GET_POINTER,及變T_FR EE_TABLE_LENGTH。T_FREE_TABLE_PUT_POINTER指向下一個(gè)可存入要?dú)w還的分塊地址的FIFO地T_FREE_TABLE_GET_POINTER指向下一個(gè)存儲(chǔ)著可借出的FREE分塊地址的FIFO地址。T_FREE_TABLE_LENGTH指示FIFO中存儲(chǔ)的可用FREE空分塊地址數(shù)據(jù)的數(shù)量。其借出和歸還操作,類同于上節(jié)所述的讀出和寫入操作,不同的是操作的對(duì)象現(xiàn)在是FREE分塊地址數(shù)據(jù),而上節(jié)中是單字節(jié)數(shù)據(jù)。現(xiàn)在指針增加或減小1,是指一個(gè)緩存塊大小。對(duì)于整個(gè)分塊模型來說,T_FREE_TABLE中的借出是指報(bào)文的寫入前借出,即借出的FREE分塊地址用來寫入接收來的報(bào)文數(shù)據(jù)分組,以下簡稱寫入借出;T_FREE_TABLE中的歸還是指報(bào)文的讀出后歸還,即歸還的分塊地址是已經(jīng)完成了其中報(bào)文數(shù)據(jù)分組的讀空操作的FREE分塊地址,以下簡稱讀出歸還。

5)為T_USED_TABLE添加輔助指針T_USED_TABLE_PUT_POINTER和T_USED_TABLE_GET_POINTER,及變量T_USED_TABLE_LENGTH。T_USED_TABLE_PUT_POINTER指向下一個(gè)可存入要?dú)w還的USED分塊地址數(shù)據(jù)的FIFO地址T_USED_TABLE_GET_POINTER指向下一個(gè)存儲(chǔ)著可借出的USED分塊地址數(shù)據(jù)的FIFO地址。T_USED_TABLE_L ENGTH指示FIFO中存儲(chǔ)的可用USED分塊地址數(shù)據(jù)的數(shù)量。對(duì)于整個(gè)模型來說,T_USED_TABLE中的借出是指報(bào)文的讀空前借出,即借出的USED分塊地址用來讀出發(fā)送其中的報(bào)文數(shù)據(jù)分組,以下簡稱讀出借出;T_USED_TABLE中的歸還是指報(bào)文的寫入后歸還,即歸還的分塊地址是已經(jīng)完成了其中報(bào)文數(shù)據(jù)分組的寫入操作的USED分塊地址,以下簡稱寫入歸還。

6)假設(shè)完成接口對(duì)射組PORT(T)與PORT(X)之間的數(shù)據(jù)透傳。設(shè)定接口PORT(T)的接收操作映射到T的緩存區(qū)BUF(T),PORT(T)的發(fā)送操作映射到接口X的緩存區(qū)BUF(X);當(dāng)接口PORT(T)有數(shù)據(jù)需要接收時(shí),首先執(zhí)行寫入借出操作,T_FRE E_TABLE中借出一個(gè)可供數(shù)據(jù)寫入的FREE緩存塊地址,使用該分塊地址再執(zhí)行PORT(T)接收數(shù)據(jù)的寫入操作;寫入完成后,執(zhí)行寫入歸還操作,將已寫入數(shù)據(jù)的FREE緩存塊標(biāo)志成USED緩存塊,并將其地址歸還到在T_USED_TABLE中。而需要X接口發(fā)送數(shù)據(jù)時(shí),首先要執(zhí)行讀出借出操作,在T_USED_TABLE中借出一個(gè)已經(jīng)寫入了數(shù)據(jù)的USED緩存塊的地址,使用該分塊地址去執(zhí)行PORT(X)的數(shù)據(jù)讀出發(fā)送操作,讀出完成后,執(zhí)行讀出歸還操作,將已經(jīng)讀空了的USED緩存塊標(biāo)志成FREE緩存塊,并將其地址歸還到T_FREE_TABLE中。

圖3 無嵌套傳輸過程Fig.3 No nested transmitting procedure

4 接口單射有序私用定長可嵌套分塊緩存

現(xiàn)在在上節(jié)的基礎(chǔ)上設(shè)計(jì)接口單射有序定長可嵌套分塊緩存。可嵌套的意思是在寫入借出一個(gè)FREE分塊后,記作FREE_BUF_0,寫入數(shù)據(jù)過程仍在進(jìn)行中且還未標(biāo)志成USED分塊,尚未執(zhí)行寫入歸還操作前,又需要一個(gè)新的寫入借出FREE分塊,記作FREE_BUF_1。同時(shí)后借出的分塊FREE_BUF_1會(huì)先于FREE_BUF_0執(zhí)行寫入歸還操作。歸還后FREE_BUF_0標(biāo)記為USED_BUF_0,而FREE_BUF_1標(biāo)記為 USED_BUF_1。

這樣在相應(yīng)USED_TABLE表中USED_BUF_1排列在USED_BUF_0前,即執(zhí)行讀出借出時(shí)會(huì)先借出分塊USED_BUF_1,但是要求 USED_BUF_0會(huì)先于USED_BUF_1讀出借出。在寫入數(shù)據(jù)時(shí)因?yàn)閿?shù)據(jù)量超過一個(gè)分塊最大數(shù)據(jù)長度而會(huì)在出現(xiàn)嵌套分塊情況。

模型改進(jìn)如下:

1)在上節(jié)模型中為接口PORT(T)的緩存塊BUF_DIV(T)的信息頭添加上一個(gè)新的 32位信息標(biāo)志USED_LINK_NEXT_DIVBUF,用來存放嵌套時(shí)的下一個(gè)借出分塊地址。

2)嵌套接收操作過程為:接收開始,執(zhí)行寫入借出操作借出第一個(gè)FREE_BUF_0,根據(jù)需求執(zhí)行寫入借出操作借出第 二 個(gè) FREE_BUF_1并 將 FREE_BUF_0的USED_LINK_NEXT_DIVBUF置為 FREE_BUF_1的地址,如需要第三個(gè) FREE_BUF_2則將 FREE_BUF_1的USED_LINK_NEXT_DIVBUF置為 FREE_BUF_2的地址,以此類推直到最后一個(gè)的FREE_BUF_LAST,此時(shí)將FREE_BUF_LAST的 USED_LINK_NEXT_DIVBUF置為NULL。當(dāng)寫入數(shù)據(jù)完成后需要執(zhí)行寫入歸還操作時(shí),除了FREE_BUF_0須要執(zhí)行寫入歸還之外,嵌套中其它FREE_BUF則不執(zhí)行寫入歸還操作。

3)無嵌套接收過程為:接收開始,執(zhí)行寫入借出操作借出個(gè)FREE_BUF_0,根據(jù)需求不用嵌套分塊,這時(shí)將FREE_BUF_0的USED_LINK_NEXT_DIVBUF置為NULL。當(dāng)寫入數(shù)據(jù)完成后執(zhí)行寫入歸還操作。

4)發(fā)送分塊操作過程為:

①發(fā)送開始,執(zhí)行讀出借出操作借出第一個(gè)USE_BUF_0;

②然后讀空其中的數(shù)據(jù),并在讀出歸還操作前讀出USE_BUF_0中的USED_LINK_NEXT_DIVBUF值;

③最后執(zhí)行在讀出歸還操作。如果USED_LINK_NEXT_DIVBUF值不為空,則利用該值作為下一個(gè)USE_BUF,轉(zhuǎn)回到②。如果為空,則結(jié)束。

圖4 嵌套緩存塊Fig.4 Nested cache block

5 接口單射有序公用定長可嵌套分塊緩存

為了節(jié)省及更有效率的利用緩存塊,可將所有接口的各自私有緩存塊公用化。

模型改進(jìn)如下:

1)取消各自的私用緩存區(qū)和FREE_TALBE表,建立公用緩存區(qū)和公用FREE_TABLE表[9],指示公用緩存中的空緩存塊信息。保留各接口的USED_TABLE表。

2)將各接口的寫入借出和讀出歸還操作合并為對(duì)公用FREE_TABLE的寫入和讀出操作。而寫入歸還和讀出歸還操作保留。

3)PORT(T)接收操作變?yōu)椋簣?zhí)行寫入借出操作從公用FREE_TABLE中借出公用FREE__BUF,寫入數(shù)據(jù)后,執(zhí)行寫入歸還操作將其放入PORT(T)的私有T_USED_TABLE中。

4)PORT(T)的對(duì)射方發(fā)送操作變?yōu)椋簣?zhí)行讀出借出操作從公用T_USED_TABLE中借出私有USED__BUF,讀空數(shù)據(jù)后,執(zhí)行讀出歸還操作將其放入公用FREE_TABLE中。

6 結(jié)束語

多接口間的數(shù)據(jù)透傳如果采用單字節(jié)的一收一發(fā),效率不如分塊收發(fā)。尤其是當(dāng)所用的接口芯片中自帶有硬件緩存時(shí),更是如此,因此分塊緩存很有必要。但是在緩存分了塊后,還存在著分塊容量大小的限制,如果要存下的數(shù)據(jù)大于一個(gè)分塊或更多,則可嵌套的分塊可以保證接收數(shù)據(jù)序列間的連續(xù)性,特別是在接口多射或是接口還有其它任務(wù)時(shí)。

[1]沈建華.ARM嵌入式系統(tǒng)開發(fā)-軟件設(shè)計(jì)與優(yōu)化[M].北京:北京航空航天大學(xué)出版社,2005.

[2]Reek K A.C和指針[M].北京:人民郵電出版社,2008.

[3]趙亮,候國銳.單片機(jī)C語言編程與實(shí)例[M].北京:人民郵電出版社,2003.

[4]譚浩強(qiáng).C程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,1991.

[5]周立功.ARM嵌入式系統(tǒng)基礎(chǔ)教程[M].北京:北京航空航天大學(xué)出版社,2005.

[6]Labrosse J J.嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II[[M].2版.邵貝貝,等譯.北京:北京航空航天大學(xué)出版社,2005.

[7]沈建華.ARM處理器與嵌入式系統(tǒng)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2010(11):5-7.SHEN Jian-hua.ARM processors and embedded systems[J].Microcontroller and Embedded Systems,2010(11):5-7.

[8]Linden P V D.C專家編程[M].北京:人民郵電出版社,2008.

[9]施先旺,王鵬武.發(fā)動(dòng)機(jī)工況實(shí)時(shí)調(diào)節(jié)軟件設(shè)計(jì)[J].火箭推進(jìn),2012(5):70-76.SHI Xian-wang,WANG Peng-wu.Design of real-time regulation software for engine power[J].Journal of Rocket Propulsion,2012(5):70-76.

主站蜘蛛池模板: 免费日韩在线视频| 91精品网站| 国产尤物视频在线| 一本综合久久| 中文字幕无码av专区久久 | www亚洲精品| 在线播放真实国产乱子伦| 欧美精品三级在线| 欧洲一区二区三区无码| 免费高清a毛片| 欧美精品在线观看视频| 在线高清亚洲精品二区| 亚洲精品图区| 欧美视频二区| 国产精品亚洲一区二区三区z| 国产精品一区不卡| 99热线精品大全在线观看| 国产一区二区网站| 暴力调教一区二区三区| 国产成人综合亚洲网址| 91精品国产综合久久香蕉922| 欧美精品一区二区三区中文字幕| 美女潮喷出白浆在线观看视频| 1024你懂的国产精品| 国产黄在线免费观看| 99热这里只有精品5| 国产区免费| 超碰91免费人妻| 国产成人盗摄精品| 在线看片中文字幕| 亚洲成人黄色网址| 国产精品三级专区| 亚洲一道AV无码午夜福利| 国产人碰人摸人爱免费视频| 美女视频黄频a免费高清不卡| 亚洲中文字幕无码mv| 国产欧美日韩在线一区| 曰AV在线无码| 中文字幕欧美日韩| 91网红精品在线观看| 国产在线麻豆波多野结衣| 98超碰在线观看| 久青草国产高清在线视频| 午夜a级毛片| 无码综合天天久久综合网| 婷婷综合在线观看丁香| 精品自窥自偷在线看| 在线视频亚洲色图| 久久综合AV免费观看| 色首页AV在线| 欧美www在线观看| 五月天香蕉视频国产亚| 日本日韩欧美| 久久国产精品娇妻素人| 成人国产精品网站在线看| 亚洲性视频网站| 99re精彩视频| 91视频国产高清| 婷婷在线网站| 精品人妻系列无码专区久久| 欧美日韩午夜视频在线观看| 色婷婷综合在线| 国产亚洲精品在天天在线麻豆| 99热这里只有精品免费| 亚洲乱亚洲乱妇24p| 日本91视频| 伊人大杳蕉中文无码| 精品欧美日韩国产日漫一区不卡| 国产综合精品日本亚洲777| 国产99热| 国产中文一区二区苍井空| 五月天久久婷婷| a级毛片网| 国产精品蜜臀| 精品剧情v国产在线观看| 国产香蕉在线| 久久99蜜桃精品久久久久小说| 免费观看亚洲人成网站| 国产91精品最新在线播放| 欧美精品1区| 欧美一区二区三区国产精品| 国产办公室秘书无码精品|