Есть ли возможность вызвать функцию-член, скажем, выход через UART, которая будет вызвана прерыванием?
Обычно я использовал бы вектор TIMER0_COMP, но я не могу заставить его работать с объектами.
SomeClass theObject;
// ...
ISR(USART_RX_vect)
{
theObject.someMethod();
}
Это то, что вы ищете?
Нет никакого способа, чтобы вектор прерывания указывал на конкретный объекты функция-член. Это связано с тем, что невозможно передать указатель * this на ISR напрямую.
Можно иметь вектор прерывания, указывающий на конкретный класса функция-член, при условии, что это статическая функция, которая возвращает void и не имеет параметров. Тем не менее, поскольку это статическая функция, она не имеет доступа к элементам данных, не являющихся статичными, для отдельных объектов.
Вот пример для компилятора IAR и вектора прерывания таймера от AVR:
class theClass
{
public:
...
#pragma vector=TCC1_CCA_vect
__interrupt static void isrTimer1CompareA(void);
...
}
Опять же, ограничения этого подхода заключаются в том, что ISR может получить доступ только к статическим данным для класса.
Если вы хотите, чтобы прерывание относилось к определенному объекту, вам нужно что-то в соответствии с рекомендациями H2C03, когда ISR знает о конкретном объекте, а затем вызывает член этого объекта в ISR. сам.