Я работаю над общей библиотекой для 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(*)()
.Я получаю сообщение об ошибке «Невозможно преобразовать lvalue типа void*
в тип параметра void(*)()
», когда я пытаюсь что-то вроде этого:
attachInterrupt(digitalPinToInterrupt(8), this->InterruptServiceRoutines[0], CHANGE)
Я думаю, больший вопрос, который у меня есть, в чем разница междуvoid*
и void(*)()
?Я пытался найти и не нашел ответов на этот вопрос.Я предполагаю, что void(*)()
- это указатель на функцию void, а void*
- это указатель на тип void?Если так, есть ли правильный способ инициализировать массив указателей на функцию void?