Zdravim,
Mam za ulohu doplnit cast kodu na obsluhu rotacneho enkodera do existujuceho AVR cpp projektu (mega32).
Enkoder ma byt zapojeny na INT0 a INT1 (to je danne). Borim sa s problemom ako v preruseni nastavovat premenne v objekte enkodera.
Vytvoril som kostru.
enc.h
class Enc {
public:
Enc();
static Enc* Enc_pointer;
volatile bool statusChanged;
inline void handle_interruptINT0(void);
};
enc.cpp
Enc* Enc::Enc_pointer;
Enc::Enc()
{
Encoder_pointer = this;
}
inline void Enc::handle_interruptINT0()
{
statusChanged = true;
}
ISR(INT1_vect, ISR_ALIASOF(INT0_vect));
ISR(INT0_vect)
{
Encr::Enc_pointer->handle_interruptINT0();
}
main.cpp
Enc enc;
main(void) {
while(1) {
if (enc.statusChanged) {
enc.statusChanged = false;
}
}
}
moze toto fungovat ?
Diky
Enkoder+cpp+IRQ
Moderátori: psichac, Moderátori
Re: Enkoder+cpp+IRQ
Nemůže,
mimo jiné proto, že v hlavním programu jenom vynuluješ nějaký flag.
O stavu enkodéru se nedozvíš nic.
mimo jiné proto, že v hlavním programu jenom vynuluješ nějaký flag.
O stavu enkodéru se nedozvíš nic.
0
Re: Enkoder+cpp+IRQ
Toto je len kostra. Mne ide o princip ci v ISR mozem tymto sposobom nastavit premennu v objekte.
To co potom urobim v hlavnom programe je momentalne vedlajsie.
To co potom urobim v hlavnom programe je momentalne vedlajsie.
0