Tutorial Zeiger

Gast #709383
Lesenswert?

hi,
ich habe eine frage zu dem Code:
1
#include <avr/io.h>
2
#include <inttypes.h>
3
#ifndef F_CPU
4
#warning "F_CPU war noch nicht definiert, wird nun mit 3686400 definiert"
5
#define F_CPU 3686400UL     /* Quarz mit 3.6864 Mhz  */
6
#endif
7
#include <util/delay.h>     /* bei alter avr-libc: #include <avr/delay.h> */      
8
 
9
/* Einfache Funktion zum Entprellen eines Tasters */
10
inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
11
{
12
    if ( ! (*port & (1 << pin)) )
13
    {
14
        /* Pin wurde auf Masse gezogen, 100ms warten   */
15
        _delay_ms(50);  // max. 262.1 ms / F_CPU in MHz
16
        _delay_ms(50); 
17
        if ( *port & (1 << pin) )
18
        {
19
            /* Anwender Zeit zum Loslassen des Tasters geben */
20
            _delay_ms(50);
21
            _delay_ms(50); 
22
            return 1;
23
        }
24
    }
25
    return 0;
26
}
27
 
28
int main(void)
29
{
30
    DDRB &= ~( 1 << PB0 );                 /* PIN PB0 auf Eingang (Taster)            */
31
    PORTB |= ( 1 << PB0 );                 /* Pullup-Widerstand aktivieren            */
32
    ...
33
    if (debounce(&PINB, PB0))             /* Falls Taster an PIN PB0 gedrueckt..    */
34
        PORTD = PIND ^ ( 1 << PD7 );  /* ..LED an Port PD7 an-
35
                                   bzw. ausschalten */
36
    ...
37
}

wieso verwendet man hier Zeiger? Kann man den Port nicht auch direkt 
übergeben?
Gast #709399
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren