我是uC / os II的新手,与内存管理混淆。 在函数OSMemGet()中,我们可以看到该任务需要内存区域链表的第一个块(OSMemFreeList), 然后在OSMemPut()中,将使用过的块返回到OSMemFreeList的第一个块,而不用内存清理。 如果有任务获取块,则将int(例如250)存储到其中,然后返回此块。稍后在这个任务OSMemGet()再次需要这个块,int 250仍然在这个块中?我怎么能再读一遍呢?
答案 0 :(得分:0)
啊哈,我知道现在如何获取以前存储的内容。我们从OSMemFreeList获取的每个内存块,在它的前4个字节中存储下一个块的地址,我们需要跳过这些字节,然后我们可以再次读取这些数据,因为ucos不会清除OSMemPut()中的内存块。
答案 1 :(得分:0)
您不应该访问已放回的块,因此无法保证将来可以使用。您在前4个字节中看到的是下一个块的地址。空闲块存储为链接列表,以便在创建/放回时将它们重新链接到链中。