有一个名为 'ByteBuffer' 的 Arduino 库(在此处找到),它是一个循环缓冲区实现。我通过取消对所有非字节数据类型的支持并添加了一些便利方法,对它进行了轻微修改(称为“ByteBufferPro”)。我打算在我的中断服务例程中使用它,这已经在做一些繁重的工作了。为了减轻 ISR 的一些工作量,我打算让 ISR 在循环缓冲区中推送信息字节(因为捕获/存储它们是时间关键的),但该信息的实际处理不是时间关键的,我在主循环()中做的。
按照可以在 ISR 中更新的任何变量在声明中都应具有“volatile”限定符的逻辑,我确实将缓冲区声明为 volatile,但现在我看到了这些编译错误:-
ByteBufferProExample.cpp: In function 'void setup()':
ByteBufferProExample:12: error: passing 'volatile ByteBufferPro' as 'this' argument of 'void ByteBufferPro::init(unsigned int)' discards qualifiers
ByteBufferProExample.cpp: In function 'void loop()':
ByteBufferProExample:24: error: passing 'volatile ByteBufferPro' as 'this' argument of 'void ByteBufferPro::clear()' discards qualifiers
想知道是什么原因,以及如何解决这个问题?考虑到关于“this”指针的 cribbage,我有一种感觉,如果我将 ByteBuffer 的实现从 C++ 转换为 C(OO 到程序),这应该是一种简单的修复方法,尽管我真的很喜欢 OO语义。会这样做,如果没有其他办法。