przerwania a c++ (mikrokontroler)
Ostatnio zmodyfikowano 2016-06-22 20:27
mateczek Temat założony przez niniejszego użytkownika |
przerwania a c++ (mikrokontroler) » 2016-06-18 08:35:30 Właściwie to szukam metody, jak w miarę czytelnie i przejrzyście korzystać z przerwań w mikrontrolerze (pętla zdarzeń lub coś). Na początek napisałem klasę przycisk. Po naciśnięciu wpisuje do zmiennej "timer" pewną wartość i wartość ta w przerwaniu ma być zmniejszana do zera. Zerowa wartość timera daje zezwolenie na kolejne wciśnięcie przycisku. Problem w metodzie jest taki, że korzysta ze składowej statycznej. Co za tym idzie działa na wszystkie obiekty klasy przycisk, nie zaś na jeden konkretny. #include <iostream> #include "windows.h" using namespace std;
class przycisk { public: static int timer; static void decrementTimers() { if( timer > 0 ) timer--; } bool isPressed() { bool statusKlawisza =( GetKeyState( VK_UP ) & 0x8000 ); bool zbocze = statusKlawisza &&( !timer ); if( statusKlawisza ) timer = 1000000; return zbocze; } };
int przycisk::timer = 0;
extern "C" { void timerSystick() { przycisk::decrementTimers(); } }
int main() { przycisk P1; while( 1 ) { if( P1.isPressed() ) { cout << "klikniento klika" << endl; } timerSystick(); } }
Program na windows PC. Program ma zabezpieczyć przed szybkimi wciśnięciami klawisza (tutaj strzałka góra). Chciałbym się dowiedzieć Jak z poziomu przerwania (luźna funkcja) oddziaływać na obiekty. Ps, W mikro-kontrolerze mogę korzystać z jakieś części biblioteki standardowej c++ więc użycie jej również wchodzi w drogę Dzięki za uwagę. |
|
jankowalski25 |
» 2016-06-19 11:17:03 Możesz trzymać w statycznej zmiennej stan wszystkich przycisków i odwoływać się przez indeks. |
|
mateczek Temat założony przez niniejszego użytkownika |
» 2016-06-20 00:52:24 |
|
mateczek Temat założony przez niniejszego użytkownika |
» 2016-06-22 19:34:03 przyznam się szczerze że nie dokońca rozumiem temat funktorów. i jeśli ktoś mógłby luknąć i powiedzieć dlaczego takie coś się nie kompiluje #include <iostream> #include<vector> #include<functional> using namespace std;
std::vector < std::function < void >() > timerEvents;
class przycisk { int timer = 0; public: przycisk() { timerEvents.push_back( std::bind( & przycisk::timerevent, this ) ); } void timerevent() { if( timer > 0 ) timer--; } };
void timerSystick() { for( auto fun: timerEvents ) { fun(); } }
int main() { przycisk P1; while( 1 ) { timerSystick(); } } |
|
carlosmay |
» 2016-06-22 19:53:37 std::vector < std::function < void() > > |
|
mateczek Temat założony przez niniejszego użytkownika |
» 2016-06-22 20:27:06 dzięki :) |
|
« 1 » |