-2

私はArduino用の共有ライブラリに取り組んでいます。割り込みアタッチメントで、型が の割り込みサービス ルーチンを宣言する必要がありvoid(*)()ます。

次のように、void 関数の配列を渡し、それをループしてオブジェクトのプロパティを設定します。

MainUnit.h

class MainUnit {
public:
    MainUnit(const String type,
             const int revisionNumber,
             const int totalInputs,
             uint8_t avrPinNumbers[],
             uint8_t spdtPinNumbers[],
             void* isrs[]);

private:
    void* InterruptServiceRoutines[];
};

MainUnit.cpp

MainUnit::MainUnit(const String type,
                   const int revisionNumber,
                   const int totalInputs,
                   uint8_t avrPinNumbers[],
                   uint8_t spdtPinNumbers[],
                   void* isrs[] )
{
    // copy spdt pins and isrs over
    for (uint8_t input = 0; input < totalInputs; input++) {
        this->InterruptServiceRoutines[input] = isrs[input];
    }
}

の代わりにこれを使用する方法はありますかvoid(*)()。次のようなことをしようとすると、「型の左辺値void*をパラメーター型に変換できません」というエラーが表示されます。void(*)()

attachInterrupt(digitalPinToInterrupt(8), this->InterruptServiceRoutines[0], CHANGE)

私が持っているより大きな質問は、 と の違いは何void*ですかvoid(*)()? 検索してみましたが、これに対する答えは見つかりませんでした。私はvoid(*)()void関数へvoid*のポインタであるのに対し、void型へのポインタであると仮定していますか? もしそうなら、無効関数ポインタの配列を初期化する適切な方法はありますか?

4

1 に答える 1