Hallo, ich versuche gerade, folgenden Beitrag zur Entprellung von Tastern nachzuvollziehen: http://www.mikrocontroller.net/articles/Entprellung Dort (und in einigen anderen Beiträgen) tauchen die Funktionen "sbi()" und "cli()" einige Male auf. Kommentiert sind die jeweiligen Zeilen mit "// read and clear atomic !" bzw. "// read key state and key press atomic !" Trotz einiger Sucherei im Forum und den beteiligten Headerdateien, konnte ich irgendwie keine Rückschlüsse auf die Herkunft respektive die Funktionsweise dieser Funktionen ziehen. Kann das jemand erklären, um was es sich genau handelt?
LOL Guckstu ins Tutorial und wirst finden http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Interrupts_mit_dem_AVR_GCC_Compiler_.28WinAVR.29 Und es heist sei() = SystemEnableInterrupt :-P
SBI heißt: Set Bit in Register Es dient dazu, gezielt nur ein Bit in einem Register auf 1 zu setzen. CBI heißt: Clear Bit in Register Das macht das Gegentum von SBI MfG Paul
cli() schaltet die Interrupts ab sei() schaltet die Interrupts an Code der also zwischen cli und sei steht, kann nicht von Interrupts unterbrochen werden. Das dient meist dazu, den Zugriff auf Variablen atomar zu gestalten, wenn diese in ISRs genutzt werden. Gruß Oliver
Ok, danke! Habe ich irgendwie überlesen. Handelt sich scheinbar ja nur um inline-Assembler-Befehle.
Oliver J. schrieb: > Das dient meist dazu, den Zugriff auf Variablen > atomar zu gestalten, wenn diese in ISRs genutzt werden. Das wäre gleich meine nächste Frage gewesen. Da der Interrupt schon vor dem Ende der Funktion wieder aktiviert wird, könnte es doch passieren, dass dieser wieder ausgelöst ist, bevor ins Hauptprogramm zurückgesprungen wird. Gehen dann Tastendrücke verloren?
Paul Baumann schrieb: > SBI heißt: Set Bit in Register > > Es dient dazu, gezielt nur ein Bit in einem Register auf 1 zu setzen. > > CBI heißt: Clear Bit in Register > > Das macht das Gegentum von SBI > > MfG Paul Nicht wirklich, bei SBI/CBI geht's um I/O, sonst wär da ein R statt ein I, für Register ist's SBR/CBR.
Könnenwoller schrieb: > könnte es doch passieren, > dass dieser wieder ausgelöst ist, bevor ins Hauptprogramm > zurückgesprungen wird. Gehen dann Tastendrücke verloren? Nein. Peter Dannegger hat sich da schon ein gut durchdachtes Konzept überlegt. Gruß Oliver
Vielen Dank an alle! Dann werde ich erstmal gründlich damit experimentieren. Schönen Abend noch!
Könnenwoller schrieb: > zurückgesprungen wird. Gehen dann Tastendrücke verloren? Nur dann, wenn du Superman heißt und es schaffst für das Niederdrücken und Loslassen einer Taste weniger als ein paar Tausendstel Sekunden zu brauchen. Der gemeine Homo sapiens kriegt das aber nicht hin.
@MWS Stimmt -da bin ich weggerudert.... Wie schnell man das verlernt, ist erschreckend. :-( Hier ist ein Link zu den Befehlen, falls es noch jemanden Anderen nützt: http://www.avr-asm-tutorial.net/avr_de/beginner/commands.html MfG Paul
Paul Baumann schrieb: > Hier ist ein Link zu den Befehlen, falls es noch jemanden Anderen > nützt: > http://www.avr-asm-tutorial.net/avr_de/beginner/co... Da wäre noch die offizielle Referenz erwähnenswert: http://www.atmel.com/images/doc0856.pdf Finde ich beiläufig übersichtlicher.
Hi >Hier ist ein Link zu den Befehlen, falls es noch jemanden Anderen >nützt: >http://www.avr-asm-tutorial.net/avr_de/beginner/co... Wenn schon, dann das: http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf MfG Spess
Das menschliche Gehirn ist schon ein eigen Ding. Benutzt man über einen langen Zeitraum hinweg die Kombination: sei und cli so kleben diese sozusagen zusammen. Gleiches gilt auch für die Kombination: sbi und cbi. Ist mir ja nicht anders ergangen. Vielleicht könnte "Könnenwoller" ja mal klarstellen ob wirklich sbi und cli gemeint waren. Die Antworten auf seine Frage waren ja recht variabel.
Er meinte schon sei() und cli(). Geht aus dem Eingangsposting eindeutig hervor.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.