2013-09-25 37 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个字节看到的是下一个块的地址。空闲块被存储为链接列表,因此它们被创建/放回,它们在链中重新链接。