a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 實時單片機通訊網絡中的內存管理

實時單片機通訊網絡中的內存管理

作者: 時間:2009-05-13 來源:網絡 收藏

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

本文引用地址:http://www.j9360.com/article/173739.htm

這樣在某一時刻,可能有1~15個獨立的內存區(空閑的或已分配的)。也就是說,可用內存表表項的最大數目為15。但在某一時刻,卻可能只有1個區(如初始化后只有1個空閑內存區)。為了查找某時刻實際內存的分配情況,我們設計了逆向搜索鏈,該鏈由內存表項的后兩欄組成,如圖1所示。

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

其中,00C0H~00C2H和00F0H的地址用來存放表頭和表尾的標志,內存表的主要內容有15項,每一項3個欄目,每一個欄目占用一個實際內存單元.初始化后的0400H到3FFFH的15K內存均為空閑,故從終止塊號15逆推15塊,1~15塊均為空閑塊,即內存表中只有一個內存區.在內存表的結構圖中反映為表中主要內容的第15項的標志位為free, 內存區的終止塊號為15,塊數為15,其它表項則是無用的。


上一頁 1 2 下一頁

評論


相關推薦

技術專區

關閉