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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 實(shí)時(shí)單片機(jī)通訊網(wǎng)絡(luò)中的內(nèi)存管理

          實(shí)時(shí)單片機(jī)通訊網(wǎng)絡(luò)中的內(nèi)存管理

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

          在AUTO 2000 DCS系統(tǒng)中,我們采用了.這是一種具有不確定控制站監(jiān)控的主從式總線.大致的工作過(guò)程是:系統(tǒng)上電,各站點(diǎn)進(jìn)行控制權(quán)爭(zhēng)奪確立控制站和非控制站;控制站輪詢各站點(diǎn),被輪詢的站點(diǎn)若有數(shù)據(jù)發(fā)送即成為主站,執(zhí)行主機(jī)/從機(jī)的通訊;通訊結(jié)束后(無(wú)論成功與否)主站將控制權(quán)歸還給控制站;控制站然后輪詢下一個(gè)站點(diǎn),周而復(fù)始?!?br />  為了提高通訊效率,采取了一系列相應(yīng)的措施.例如,我們把站點(diǎn)集分為活動(dòng)站點(diǎn)集和非活動(dòng)站點(diǎn)集.這樣,網(wǎng)中如有某站點(diǎn)出現(xiàn)故障,該站點(diǎn)被控制站詢問(wèn)時(shí)響應(yīng)將超時(shí),則該站點(diǎn)將從活動(dòng)站點(diǎn)集轉(zhuǎn)到非活動(dòng)站點(diǎn)集中.這樣,系統(tǒng)在下一次輪詢時(shí)就不再輪詢?cè)撜军c(diǎn).故障站點(diǎn)恢復(fù)正常后或有新的站點(diǎn)開機(jī)上線,控制站將在輪詢周期結(jié)束后的測(cè)試周期中將它們加入到活動(dòng)站點(diǎn)集中.事實(shí)上,控制站輪詢的是活動(dòng)站點(diǎn),測(cè)試的是非活動(dòng)站點(diǎn).這無(wú)疑是一種提高網(wǎng)絡(luò)效率的方法。
            另外還有一種更為重要的途徑即為本文將要介紹的動(dòng)態(tài)方法。DCS網(wǎng)絡(luò)系統(tǒng)所要傳輸?shù)臄?shù)據(jù)一般有下述幾種:較長(zhǎng)的周期性數(shù)據(jù),較短的隨機(jī)上報(bào)數(shù)據(jù)及較短的命令/響應(yīng)數(shù)據(jù)。對(duì)周期性數(shù)據(jù),稍微的滯后甚至一兩次丟失都是允許的;而對(duì)隨機(jī)上報(bào)數(shù)據(jù)和命令/響應(yīng)數(shù)據(jù),則要求盡可能快地完成傳輸。在傳統(tǒng)的靜態(tài)分配方式下,甲網(wǎng)卡接收到乙網(wǎng)卡的數(shù)據(jù)后在上傳至宿主機(jī)前宣布緩沖區(qū)滿而不能接收其它站點(diǎn)的數(shù)據(jù)。這顯然是對(duì)內(nèi)存資源的一種浪費(fèi),同時(shí)也嚴(yán)重影響了網(wǎng)絡(luò)的通訊效率。采用動(dòng)態(tài)內(nèi)存分配方式后,甲網(wǎng)卡每收到一批數(shù)據(jù),只從自己有限的空閑內(nèi)存中分配出合適的一塊來(lái)存放該批數(shù)據(jù),剩下的空閑內(nèi)存仍可接收其它網(wǎng)卡的數(shù)據(jù),并當(dāng)宿主機(jī)有空時(shí),將所有接收的數(shù)據(jù)一并上傳至宿主機(jī)并清空內(nèi)存。因此通訊效率大為提高。
          1 結(jié)構(gòu)
            為了對(duì)網(wǎng)卡上內(nèi)存進(jìn)行,設(shè)置了一張內(nèi)存狀況表(簡(jiǎn)稱)來(lái)記錄當(dāng)前內(nèi)存的使用情況。所謂內(nèi)存,實(shí)際上即為內(nèi)存的分配和回收,主要解決兩個(gè)問(wèn)題:
            (1) 對(duì)需要申請(qǐng)的內(nèi)存長(zhǎng)度,分配程序需從中尋找出合適的空閑區(qū).分配給該批數(shù)據(jù)使用,并對(duì)內(nèi)存表進(jìn)行更新。
            (2) 進(jìn)程或作業(yè)釋放內(nèi)存資源時(shí),和相鄰的空閑區(qū)進(jìn)行鏈接合并,更新可用表。
            具體地,以某一基本容量(視系統(tǒng)通訊的數(shù)據(jù)量而定,在此為1K)對(duì)可用內(nèi)存區(qū)域(如0400H ~ 3FFFH)進(jìn)行劃分和編號(hào)(1~15),每一個(gè)實(shí)際的已分配內(nèi)存區(qū)和空閑內(nèi)存區(qū)在內(nèi)存表中占據(jù)一個(gè)表項(xiàng)位置,而每一表項(xiàng)結(jié)構(gòu)為:

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

          這樣在某一時(shí)刻,可能有1~15個(gè)獨(dú)立的內(nèi)存區(qū)(空閑的或已分配的)。也就是說(shuō),可用內(nèi)存表表項(xiàng)的最大數(shù)目為15。但在某一時(shí)刻,卻可能只有1個(gè)區(qū)(如初始化后只有1個(gè)空閑內(nèi)存區(qū))。為了查找某時(shí)刻實(shí)際內(nèi)存的分配情況,我們?cè)O(shè)計(jì)了逆向搜索鏈,該鏈由內(nèi)存表項(xiàng)的后兩欄組成,如圖1所示。

          該圖中,第15表項(xiàng)的結(jié)束塊號(hào)肯定為15,表示編號(hào)為15的內(nèi)存區(qū)域(3C00H~3FFFH)肯定是某個(gè)已分配區(qū)域(或空閑區(qū)域)的一部分。但該區(qū)域究竟有多大,要看第15表項(xiàng)的第3欄(塊數(shù)),設(shè)為5。這就表明其相鄰的上一區(qū)域的結(jié)束塊號(hào)為15減去5。然后查找內(nèi)存表的第10表項(xiàng) ,可知其大小為8。接下來(lái)查找第2表項(xiàng),得到其分配塊大小為2。從而可得該時(shí)刻內(nèi)存中實(shí)際分配3個(gè)區(qū),大小分別為5,8,2。至于內(nèi)存表中的其它表項(xiàng)在該時(shí)刻是無(wú)用的。 運(yùn)行初始化程序init_table后,內(nèi)存表的結(jié)構(gòu)如圖2所示。

          其中,00C0H~00C2H和00F0H的地址用來(lái)存放表頭和表尾的標(biāo)志,內(nèi)存表的主要內(nèi)容有15項(xiàng),每一項(xiàng)3個(gè)欄目,每一個(gè)欄目占用一個(gè)實(shí)際內(nèi)存單元.初始化后的0400H到3FFFH的15K內(nèi)存均為空閑,故從終止塊號(hào)15逆推15塊,1~15塊均為空閑塊,即內(nèi)存表中只有一個(gè)內(nèi)存區(qū).在內(nèi)存表的結(jié)構(gòu)圖中反映為表中主要內(nèi)容的第15項(xiàng)的標(biāo)志位為free, 內(nèi)存區(qū)的終止塊號(hào)為15,塊數(shù)為15,其它表項(xiàng)則是無(wú)用的。


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

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(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); })();