Forum: Mikrocontroller und Digitale Elektronik "sbi()" und "cli()": Welche Funktionsweise?


von Könnenwoller (Gast)


Lesenswert?

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?

von loller (Gast)


Lesenswert?

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

von Könnenwoller (Gast)


Lesenswert?

Sorry, natürlich meinte ich sei()!

von Paul B. (paul_baumann)


Lesenswert?

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

von Oliver J. (skriptkiddy)


Lesenswert?

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

von Könnenwoller (Gast)


Lesenswert?

Ok, danke! Habe ich irgendwie überlesen. Handelt sich scheinbar ja nur 
um inline-Assembler-Befehle.

von Könnenwoller (Gast)


Lesenswert?

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?

von MWS (Gast)


Lesenswert?

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.

von Oliver J. (skriptkiddy)


Lesenswert?

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

von Könnenwoller (Gast)


Lesenswert?

Vielen Dank an alle! Dann werde ich erstmal gründlich damit 
experimentieren. Schönen Abend noch!

von Karl H. (kbuchegg)


Lesenswert?

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.

von Paul B. (paul_baumann)


Lesenswert?

@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

von MWS (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von amateur (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
Noch kein Account? Hier anmelden.