2

「ByteBuffer」と呼ばれる Arduino ライブラリ (ここにあります) があり、これは循環バッファーの実装です。バイト以外のすべてのデータ型のサポートを切り捨て、いくつかの便利なメソッドを追加することで、少し変更しました (「ByteBufferPro」と呼びます)。私はこれを割り込みサービスルーチンで使用するつもりです。これはすでにいくつかの重労働を行っています。ISR のワークロードを少し軽減するために、ISR が情報のバイトを循環バッファーにプッシュできるようにするつもりですが (それらのキャプチャ/保存はタイム クリティカルであるため)、その情報の実際の処理はそれほどタイム クリティカルではありません。これはメイン loop() で行います。

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' ポインターに関するクリベッジを取ると、ByteBuffer の実装を C++ から C のもの (OO から手続き型) に変更すると、それを修正する簡単な方法になるはずですが、OO は本当に気に入っています。セマンティクス。他に方法がない場合は、そうします。

4

1 に答える 1

3

定数オブジェクトに必要な修飾子とvolatile同様に、すべての関数に修飾子が必要です。const次に例を示します。

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

    void init() volatile
    {
        cout << "A::init()" << endl;
    }
};
于 2012-01-05T04:52:22.523 に答える