ARM嵌入式系统中面向对象的模块编程方法中的环形缓冲区


画线部分如何理解?我感觉 应该是 ptbuf->info.pValid = ptbuf->info.phead+ move_len;

在书中349页

另外提一个建议,这本书是非常棒的学习资料,但是可能是由于着急出书,书中有一定数量的错误,希望可以内部再勘误后重新发布

move_len是在写入的数据超过了总buff长度的时候,会从之前的pvalid地址开始,超出的数据个数。
因为是覆盖写,所以原本的从pvalid开始的数据会被覆盖写move_len这么多个。覆盖写之后,新的有效数据起始地址就应该是覆盖写了move_len后的新地址。
还有您提到的错误,希望能指正出来,谢谢,这样也能加快我们勘误的速度。

为什么不从pHead的位置开始写呢?这样的话前面的位置的数据不还是空的

如果从起始地址开始写的话和当成一个普通的数组来用有什么区别。
环形缓冲区和一般数组的应用区别在于,缓冲区可以存取任意长度的数据,而一般的数组,你要开辟多少长度才能够确定你不会遗漏数据或者读取多余的数据呢?

这个就是从起始地址pHead开始写的吧?是我对move_len的理解出现了问题,我原以为move_len是从pHead那开始算,

看您这个图 :dizzy:是理解了 感谢。