<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

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

2 的分配
  那么,如何利用這張表進(jìn)行分配呢?分配方法采用。用一個(gè)例子來(lái)說(shuō)明這個(gè)問(wèn)題。例如經(jīng)過(guò)若干次分配和空閑區回收后,甲站點(diǎn)的主要情況如圖3所示(卡上還有一批數據未傳入宿主機)。

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

在這種情況下,乙站點(diǎn)申請分配4塊內存,則先把地址指針定位00EDH處(第15項的標志欄處),由于該項的標志為free但大小不夠,故需向前查找.用該項的終止塊號(15)減去該項的塊數(1)得到數字14,故將地址指針定位到第14項處的標志欄處,雖塊數大小夠但該內存區為busy,故仍需往前找.此時(shí)用第14項處的終止塊號(14)減去該項的塊數(4)得到數字10,所以將地址指針定位到第10項的標志欄處。第10項的塊數大于需分配的內存塊數,故可以在此處分配.分配后的的主要情況如圖4所示。

的匯編程序中,動(dòng)態(tài)分配內存是調用allocate子程序來(lái)完成的.具體步驟是這樣的:
  (1)先由入口參數寄存器R3和R2(存放需要申請的內存長(cháng)度)折合成需分配的內存塊數,并將其值傳遞給變量required_size。
  (2)從末(00ED H處)自后向前找.即先把地址指針定位在00EDH處(第15項的標志欄處),如果該項的標志不為free或該項的標志為free但該項的內存塊數小于需分配的內存塊數,則用該項第二欄的數字(終止塊號)減去該項第三欄的數字(塊數)作為下一次向前查找的表項號,并由此定位下一次向前查找的地址指針.就這樣一直向前查找,直到找到不小于需分配的內存塊數或已到內存表頭.
  (3) 如找到不少于申請塊數的空閑區,將空閑區的低端分配給該批數據使用,相應地修改內存表中的相關(guān)項,子程序返回分配成功標志;否則,子程序返回分配不成功標志。
3 內存的釋放和合并
  雖然我們成功地制定了內存分配的算法和子程序,但是在內存中還要處理空閑區的釋放和相鄰空閑區的合并。free_and_join子程序就是用來(lái)完成這個(gè)任務(wù)的.當接收方(從機)接收完發(fā)送方(主機)發(fā)來(lái)的報文數據并將數據上傳給宿主機后,就需要在free_and_join子程序中釋放該報文數據在本機中所占的內存(free),并且需要檢測該被釋放的內存與其相鄰的空閑內存是否可以合并。如能,合并之.這樣,該機如接收其它主機發(fā)來(lái)的長(cháng)的報文數據時(shí),可以有足夠大的連續的空閑內存來(lái)分配;同時(shí),也保證了內存操作的完備性.算法是這樣實(shí)現的:
  (1)內存表中被釋放項的標志改為free。
  (2)由于表項中的第二欄為終止塊號而非起始塊號,且在內存表中向前查找是沿著(zhù)內存表的地址減小的方向進(jìn)行的,故需先尋找上相鄰,再尋找下相鄰.
  (3) 判斷上相鄰表項是否free;如果是,合并之。
  用被釋放項的終止塊號r_block_end (R2)減去該項的塊數r_block_num (R3),并將其值傳給R4,再調用block_to_address子程序來(lái)向前找上相鄰.如果該項處的標志為free,則是上相鄰.取出上相鄰表項處的塊數,加到本表項(被釋放項)的塊數R3上,并寫(xiě)入本表項;并將上相鄰表項處的標志置為03H(異于busy和free即可)。
  (4) 判斷下相鄰表項是否free;如果是,合并之。
  把地址指針定位00ED H處(內存表尾),從內存表尾向前找.取出地址指針處的表項的終止塊號并存入R5,再取出該表項的塊數并存入R4.直到R5減去R4的結果等于被釋放項的終止塊號為止.若此時(shí)地址指針處的表項的標志為free,則該表項是被釋放項的下相鄰.在下相鄰表項處,將該項的塊數加上被釋放項的塊數并存入;在被釋放項處將標志置為03H(異于busy和free即可).
  舉一個(gè)例子能更好地表明這種的釋放和合并算法.例如將被釋放的內存區在內存表中是第6塊和第7塊.其上相鄰處內存區為第3,4,5塊,且其標志為free;其下相鄰處內存區為第8,9,10塊,且其標志為free;合并的過(guò)程如圖5所示。

總之,與固定分區法相比,法在報文接收前不建立分區.分區的建立是在報文接收的過(guò)程中進(jìn)行的,且其大小可隨報文長(cháng)度動(dòng)態(tài)改變,這就改變了法中的即使是小數據量也要占據大分區的浪費堵塞現象,從而提高了內存的利用率.另外,也提高了DCS系統通訊的短數據的平均傳輸速率,更適應DCS系統的性要求.


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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>