2013-09-25 38 views
0

我是一個關於uC/os II的新手,並且與內存管理混淆。 在函數OSMemGet()中,我們可以看到該任務需要OSMemPut()中存儲區鏈表(OSMemFreeList)的第一個塊 ,然後將已使用的塊返回到OSMemFreeList的第一個塊,而無需清理內存。 如果有一個任務獲得一個塊,存儲一個int(例如250),然後返回該塊。在這個任務的後面,OSMemGet()再次需要這個塊,int 250仍然在這個塊中?我如何再讀一遍?uC/OS II內存管理,OSMemPut()返回內存塊沒有內存清除

回答

0

aha,我知道如何獲取之前存儲的內容。我們從OSMemFreeList獲得的每個內存塊,將下一個塊的地址存儲在前4個字節中,我們需要跳過這些字節,然後我們可以再次讀取這些數據,因爲ucos不會清除OSMemPut()中的內存塊。

0

你不應該訪問你已經放回的塊,所以不能保證這將在未來工作。你在前4個字節看到的是下一個塊的地址。空閒塊被存儲爲鏈接列表,因此它們被創建/放回,它們在鏈中重新鏈接。