Hallo,
ich bekomme es leider immer noch nicht vernünftig hin, Interruptroutinen
für einen Atmega in C++ zu implementieren.
Jetzt wollte ich die Objekte Global machen und in den ISRs dann die
entsprechende Funktion aufrufen.
Zum Testen möchte ich zunächst wieder die LED and PB5 blinken lassen.
Aber diese bleibt aus. Auch in der Simulation wird nicht in die ISR
gesprungen. Kann mir da jemand evtl. sagen, wieso die ISR nicht
aufgerufen wird?
In der Simulation wird der Brakepoint an der Stelle
1
if(timer0.getNewTime() == true){
auch nie erreicht. Vorher wird alles Resettet und von vorne gestartet.
Gruß
Franz
hp-freund schrieb:> sei();
natürlich, das habe ich ausversehen mit rausgelöscht. habe ich aber vor
der while-schleife stehen.
Stefan E. schrieb:> avr/interrupt.h einbinden, und das ISR()-Makro verwenden.
habe ich geändert
1
ISR(TIMER0_COMPA_vect)
2
{
3
timer0.interrupt();
4
}
Matthias H. schrieb:> #include "system.h"> #include "Timer/timer.h
system.h: hier ist nur F_CPU definiert
Übersetzt du den obigen Code mit g++?
Wenn ja, dann musst du die Funktion als extern "C" deklarieren.
1
extern "C" ISR(TIMER0_COMPA_vect)
2
{
3
timer0.interrupt();
4
}
Generell sollte man die Nutzung von C-Makros unter C++ vermeiden, vor
allem wenn sie wie im Fall von Atmel offensichtlich nicht für C++
ausgelegt sind.
Die Methode direkt Aufrufen ist ausschließlich dann möglich, wenn sie
statisch ist.
Franz schrieb:> Hallo,> ich bekomme es leider immer noch nicht vernünftig hin, Interruptroutinen> für einen Atmega in C++ zu implementieren.
Ich denke, mal, dass der Timer gar nicht läuft. Du stellst da TimerMode
6 (reserved) ein. Schau Dir mal an, was Du in tccr0a schreibst.
Vincent H. schrieb:> Übersetzt du den obigen Code mit g++?> Wenn ja, dann musst du die Funktion als extern "C" deklarieren.
Nein, muss er nicht. Das erledigt das ISR-Makro bereits.
Vincent H. schrieb:> wenn sie wie im Fall von Atmel offensichtlich nicht für C++> ausgelegt sind
Wie kommst du darauf?
Eine eigene Frage?
Dieser Thread ist über 9 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.