Forum: Compiler & IDEs Frage GCC Tutorial Tastenentprellung


von Flo S. (tuxianer)


Lesenswert?

hi,
ich habe auch mal ne frage zum Tut. Und zwar hänge ich an der stelle:


if ( ! (*port & (1 << pin)) )

hier geht der aktuelle zustand des Pins doch garnicht ein oder? was 
heist die Zeile ausgeschrieben. überprüft es durch das "!" ob ein wert 
ungleich 0 geliefert wird? wenn es so wäre könnte man ja höcgstens auf 
Änderungen am Pin überprüfen. Ich versteh nur Bahnhof.

von Uhu U. (uhu)


Lesenswert?

> if ( ! (*port & (1 << pin)) )

heißt:

   wenn das Port-Pin pin 0 ist, dann...

(1) *port holt alle Bits aus dem Port

(2) (1 << pin) ergibt eine 1 an der Position pin

*port & (1 << pin) gibt die bitweise Undverknüpfung von (1) mit (2), 
d.h. einen Wert != 0, wenn der pin eine 1 sieht

! negiert alles logisch: 0, wenn das Argument != 0 ist; 1, wenn es null 
ist.

von Flo S. (tuxianer)


Lesenswert?

ok das verknüpfen habe ich verstanden...aber was genau ist jetzt die 
bedingeung? durch was wird sie ausgedrückt?

von Uhu U. (uhu)


Lesenswert?

Wenn der Port-Pin pin 0 ist, wird das bedingte Statement ausgeführt.

von Flo S. (tuxianer)


Lesenswert?

ja das ist mir nun auch klar...aber womit ist die bedingung in dem 
befehhla ausgedrückt?

Wenn der port 1 ist also die taste nicht gedrückt ergibt sich ja das 
Schema:


1 and 1 -> 1 -> ! --> 0

und wenn sie Gedrückt ist:

0 and 1 -> 0 -> ! --> 1


wo steht jetzt das wenn das Ergebnis 1 ist fortgefahren wird oder ist 
das in der If schon enthalten, das eine eins im Ergebnis automatisch als 
wahr anerkannt wird.? Und somit eine Bedingung weg fällt?

von Flo S. (tuxianer)


Lesenswert?

naja ist ja eher ne Algemeine Frage. ich machs am besten nochmal 
verständlicher:



if (1)

{

//bedingung erfüllt --> diese stelle wird als nächstes ausgeführt

}


if (0)

{

//bedingung nicht erfüllt --> diese Stelle wird nie erreicht

}


ist das so korrekt?

von Uhu U. (uhu)


Lesenswert?

If heißt 'wenn'...

Also: wenn die Bedingung erfüllt ist, dann führe den Befehl nach der 
schließenden Klammer aus.

von Uhu U. (uhu)


Lesenswert?

Florentin Schirmer wrote:
> ist das so korrekt?

Genau so ist es.

von Flo S. (tuxianer)


Lesenswert?

ich glub wir reden aneinander vorbei. Mit der Bedingung ist mir ja klar 
nur zählt die Bedingung als war, wenn eine 1 zurück gegeben wird oder 
muss das extra noch definiert werden?


€dit:

ok dann haben wir's doch ^^


ich bin die ganze Zeit davon ausgegangen, das das extra noch festgelegt 
werden muss. Vielen Dank für deine Hilfe!

von Uhu U. (uhu)


Lesenswert?

Wenn die Bedingung != 0 ist, wird der Befehl ausgeführt; wenn sie 0 ist, 
nicht. Das ist in die Sprache eingebaut.

von Flo S. (tuxianer)


Lesenswert?

noch ne frage:

hier erstmal der Link zum Tut:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#.28Tasten-.29Entprellung


was bringen return 0 bzw. 1


und wie funktioniert das überhaupt mit dem Funktions aufruf...


if (debounce(&PINB, PB0))             /* Falls Taster an PIN PB0 
gedrueckt..    */

hier werden ja die Aktuellen Werte bzw. die Portnamen an die Funkton 
übergeben.


und was macht die zeile:

inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)

?

von Uhu U. (uhu)


Lesenswert?

Vielleicht solltest du dir doch mal die Grundlagen von C einverleiben. 
Recht gut ist das hier: 
http://www.roboternetz.de/wissen/index.php/C-Tutorial

von Flo S. (tuxianer)


Lesenswert?

ja das habe ich mir auch schon überlegt vlt. werde ich mir auch mal ein 
Buch dazu kaufen ich habe an das hier gedacht:

http://www.galileocomputing.de/openbook/c_von_a_bis_z/c_001_004.htm

den ich finde es echt bemerkenswert das es auch online angeboten wird 
und man sollte sowas unterstützen...

von Flo S. (tuxianer)


Lesenswert?

ich les jetzt erstmal das tut auf Roboternetz! Das scheint ganz gut zu 
sein. Danke für den Tipp!

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.