www.mikrocontroller.net

Forum: Compiler & IDEs Tutorial Zeiger


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
ich habe eine frage zu dem Code:
#include <avr/io.h>
#include <inttypes.h>
#ifndef F_CPU
#warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"
#define F_CPU 3686400UL     /* Quarz mit 3.6864 Mhz  */
#endif
#include <util/delay.h>     /* bei alter avr-libc: #include <avr/delay.h> */      
 
/* Einfache Funktion zum Entprellen eines Tasters */
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
{
    if ( ! (*port & (1 << pin)) )
    {
        /* Pin wurde auf Masse gezogen, 100ms warten   */
        _delay_ms(50);  // max. 262.1 ms / F_CPU in MHz
        _delay_ms(50); 
        if ( *port & (1 << pin) )
        {
            /* Anwender Zeit zum Loslassen des Tasters geben */
            _delay_ms(50);
            _delay_ms(50); 
            return 1;
        }
    }
    return 0;
}
 
int main(void)
{
    DDRB &= ~( 1 << PB0 );                 /* PIN PB0 auf Eingang (Taster)            */
    PORTB |= ( 1 << PB0 );                 /* Pullup-Widerstand aktivieren            */
    ...
    if (debounce(&PINB, PB0))             /* Falls Taster an PIN PB0 gedrueckt..    */
        PORTD = PIND ^ ( 1 << PD7 );  /* ..LED an Port PD7 an-
                                   bzw. ausschalten */
    ...
}

wieso verwendet man hier Zeiger? Kann man den Port nicht auch direkt 
übergeben?

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> wieso verwendet man hier Zeiger?
Weil in der Funktion der Port gelesen werden soll, dazu muss die 
Funktion wissen, was sie lesen soll -- nämlich diesen Port (bzw. Die 
Stelle im Speicher, an der dieses Register liegt).

> Kann man den Port nicht auch direkt übergeben?
Wie sollte das denn gehen? Es geht nicht 'direkter' als mit einem 
Pointer.
Ein Pointer ist ja bloß eine Variable, in der ein Adresse gepeichert ist 
(davor muss man keine Angst haben ;) ).

hth. Jörg

Autor: naja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zeiger sind cool

delay schleifen nicht

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.