Hi, ich frage mit einem Atmega8 einen DHT11 Feuchtigkeitsfühler ab (ähnlich 1 wire). Nun möchte ich aber 4 Fühler auslesen (jeder hängt an einem eigenen Pin). Kann ich die Port/Pin-Definitionen irgendwie meinen Funktionen übergeben? Danke! Grüßle, Alex
Alex schrieb: > Hi, > > ich frage mit einem Atmega8 einen DHT11 Feuchtigkeitsfühler ab (ähnlich > 1 wire). Nun möchte ich aber 4 Fühler auslesen (jeder hängt an einem > eigenen Pin). Kann ich die Port/Pin-Definitionen irgendwie meinen > Funktionen übergeben? Sicher kann man
1 | void foo( volatile uint8_t* port, uint8_t pin ) |
2 | {
|
3 | if( *port & ( 1 << pin ) ) |
4 | ...
|
5 | }
|
6 | |
7 | int main() |
8 | {
|
9 | ....
|
10 | |
11 | foo( &PINB, PB5 ); |
12 | ....
|
13 | }
|
Man muß allerdings aufpassen, ob das 1W-Timing dadurch nicht zu stark verzögert wird. Auch werden dadurch schon 5 Register belegt, die Funktionen werden wohl nicht ohne Stackframe auskommen. Besser ist daher, die Sensoren liegen alle auf einem Port und man übergibt der 1W-Funktion nur die Bitmaske.
Alex schrieb: > Vielen Dank! > Braucht man das volatile? JA!!! Der Compiler versucht ohne das volatile, das Programm zu optimieren, in dem der Zugriff auf uint8_t* port weggelassen wird. Das Erkennen einer Änderung ist so nicht möglich. volatile ist zwingend erforderlich, wenn Lesezugriffe auf externe Grössen erfolgen sollen. Gruss Robert
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.