C++ ISR中使用的循环缓冲区(声明为volatile)给出错误。为什么?如何解决这个问题?

C++ ISR中使用的循环缓冲区(声明为volatile)给出错误。为什么?如何解决这个问题?,c++,arduino,volatile,isr,C++,Arduino,Volatile,Isr,有一个名为“ByteBuffer”(找到)的Arduino库,它是一个循环缓冲区实现。我稍微修改了它(称之为“ByteBufferPro”),切断了对所有非字节数据类型的支持,并添加了一些方便的方法。我打算在我的中断服务例程中使用它,它已经在做一些繁重的工作了。为了减轻ISR的一些工作负载,我打算让ISR将字节的信息推送到循环缓冲区(因为捕获/存储它们是时间关键型的),但对这些信息的实际处理并不像我在主循环()中那样时间关键 按照可以在ISR中更新的任何变量在声明中都应该具有“volatile”

有一个名为“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

想知道原因是什么,我该如何解决?考虑到CREBY是关于“这个”指针,我有一种感觉,如果我把ByteBuffer的实现从C++变成了C(OO到过程),那应该是一个简单的方法来修复它,尽管我非常喜欢OO语义。如果没有其他方法,可以这样做。

所有函数都应该有
volatile
限定符,就像常量对象需要
const
限定符一样。以下是一个例子:

class A
{
public:
    A(unsigned int a)
    {
    }

    void init() volatile
    {
        cout << "A::init()" << endl;
    }
};
A类
{
公众:
A(无符号整数A)
{
}
void init()volatile
{

CUT谢谢“DooTalo。我明白了。所以,在实例变量被声明为‘易失’的情况下,不能使用同一类定义,对吧?我手边没有C++标准,所以我不能肯定地告诉你。但是我相信必须这样做。比较它不变的对象。对于你的信息来说,有一个提升T。安置的圆形缓冲容器。