mikrocontroller.net

Forum: Compiler & IDEs Frage GCC Tutorial Tastenentprellung


Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Flo S. (tuxianer)
Datum:

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

Autor: Uhu Uhuhu (uhu)
Datum:

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

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
If heißt 'wenn'...

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

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Florentin Schirmer wrote:
> ist das so korrekt?

Genau so ist es.

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Uhu Uhuhu (uhu)
Datum:

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

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
noch ne frage:

hier erstmal der Link zum Tut:
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...


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)

?

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Flo S. (tuxianer)
Datum:

Bewertung
0 lesenswert
nicht 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_bi...

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

Autor: Flo S. (tuxianer)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.