Genau...Ich habe das jetzt so interpretiert, dass die einzige Funktion, die immer
wieder wiederholt wird int main () ist. Und die prüft, ob die flags entsprechend gesetzt wurden und ruft die dazugehörigen Funktionen auf.
in C ist main() eigentlich immer die "Hauptfunktion", d.h. das Programm beginnt immer mit main().
Die Endlosschleife in main() übernimmt genau die von dir beschriebene Funktion.
Ja, ganz genau so ist es.Wie ist es jetzt, wenn ich - banal ausgedrückt - die Taste drücke?
Wird dann die INTx ISR aufgerufen , die dann erst einmal feststellt "fallende Flanke -> also intx_start merken" und beim zweiten Aufruf "steigende Flanke -> Dauer berechnen und flangs setzen" ausführt?
Der Controller ruft - wenn er richtig konfiguriert wurde - die passende ISR automatisch auf, sobald das zugehörige Ereignis eintritt.
Naja, er kann natürlich nicht wirklich zwei Dinge gleichzeitig tun, aber rein prinzipiell ist das schon so eine Art Multitasking (allerdings recht primitiv).Heißt das dann dass der atmega8 also mehrere tasks gleichzeitig (oder so gut wie ?) ausführen kann? Es kann ja sein, dass ich beide tasten gleichzeitig drücken will. Wird int main() während des Abarbeitens einer ISr unterbrochen? Ja oder?.
Wenn ein Interrupt ausgelöst wird, unterbricht der Controller automatisch das laufende Programm, und springt zur ISR. Sobald er diese abgearbeitet hat, springt er zurück zu der Stelle an der das Programm unterbrochen wurde.
Dabei ist es übrigens auch möglich daß sich Interrupts gegenseitig unterbrechen.
Falls du es tatsächlich schaffen solltest die beiden Taster exakt zum gleichen Zeitpunkt zu betätigen ist das auch nicht weiter schlimm, denn der Controller merkt sich von selbst was er noch zu tun hat, und bearbeitet die beiden ISRs dann halt nacheinander.
Das nicht, aber eine binäre Zuweisung gibt es in C nicht, und die hexadezimale Schreibweise ist in solchen Fällen sozusagen die nächstbeste Lösung was die Lesbarkeit betrifft (bei dezimalzahlen ist es recht schwer herauszufinden welche Bits denn da nun gesetzt sind und welche nicht, hexadezimal ist das leichter da man die Bits immer schön in 4er Gruppen betrachten kann).Nur noch eine allerletzte für diesen post:
jegliche Zuweisungen...Ports, Pins und flags... geschehen die in c++ hexadezimal?
Ein C Tutorial (C++ macht bei Mikrocontrollern nicht viel Sinn) gibt es unter anderem in unserem Wiki: RN-Wissen C-Tutorial
Lesezeichen