0

我是 uC/os II 的新手,对内存管理感到困惑。在函数OSMemGet()中,我们可以看到任务需要内存区域链表(OSMemFreeList)的第一个块,然后在OSMemPut()中,将使用过的块返回到OSMemFreeList的第一个块,不进行内存清理。如果有任务获取一个块,将一个 int(例如 250)存储到其中,然后返回这个块。稍后在此任务中 OSMemGet() 再次需要此块,int 250 是否仍在此块中?我怎样才能再读一遍?

4

2 回答 2

0

您不应该访问已放回的块,因此不能保证将来会起作用。您在前 4 个字节中看到的是下一个块的地址。空闲块存储为链表,因此在创建/放回它们时,它们会在链中重新链接。

于 2013-11-07T16:28:06.687 回答
0

aha , I know how to get previous stored content now. every memory block we get from the OSMemFreeList, storing next block's address in it's first 4 bytes,we need skip these bytes ,then we can read these data again for ucos does not clear memory block in OSMemPut().

于 2013-09-26T05:47:18.637 回答