Memory uC/OS II内存管理,OSMemPut()返回未清除内存的内存块

Memory uC/OS II内存管理,OSMemPut()返回未清除内存的内存块,memory,ucos,Memory,Ucos,我是uC/os II的新手,对内存管理感到困惑。 在函数OSMemGet()中,我们可以看到任务需要内存区域链表的第一块(OSMemFreeList), 然后在OSMemPut()中,将使用过的块返回到OSMemFreeList的第一个块,而不清除内存。 如果有一个任务获取一个块,在其中存储一个int(例如250),然后返回这个块。在本任务的后面部分,OSMemGet()再次需要此块,int 250是否仍在该块中?我怎样才能再读一遍呢?啊哈,我现在知道如何获取以前存储的内容了。我们从OSMemF

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

啊哈,我现在知道如何获取以前存储的内容了。我们从OSMemFreeList中获得的每个内存块,将下一个块的地址存储在它的前4个字节中,我们需要跳过这些字节,然后我们可以再次读取这些数据,因为ucos不会清除OSMemPut()中的内存块。

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