私は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型へのポインタであると仮定していますか? もしそうなら、無効関数ポインタの配列を初期化する適切な方法はありますか?