Forum: Mikrocontroller und Digitale Elektronik Return Anweisung


von Ernst (Gast)


Lesenswert?

Hallo,

ich kenne eine Return Anweisung als Wertübergabe an die Funktion, 
vielleicht wird in der Return Anweisung noch eine Berechnung 
durchgeführt.

Aber den unteren Return Aufruf verstehe ich nicht, da es wie eine 
Abfrage aussieht.

return ((spi_sr & 0x02) == 0);

Ich davon aus, dass mir jemand weiter helfen kann.

Gruß
Ernst

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Ernst schrieb:
> Hallo,
>
> ich kenne eine Return Anweisung als Wertübergabe an die Funktion,

da bist Du der Einzige ...


> Aber den unteren Return Aufruf verstehe ich nicht, da es wie eine
> Abfrage aussieht.
>
> return ((spi_sr & 0x02) == 0);

Es wird der Ausdruck spi_sr & 0x02 berechnet. Ist der == 0 ist der
gesamte Ausdruck TRUE, anderenfalls FALSE. Dies wird zurückgegeben.

von Sebastian Hepp (Gast)


Lesenswert?

Ja, das ist eine Abfrage. Überlege mal, was eine Abfrage (Hier ein 
Vergleich) für ein Ergebniss haben kann. ;)

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Dieses return gibt einfach nur true oder false zurück, je nachdem ob der 
Ausdruck wahr oder falsch ist. Allerdings ist es einfach an der ersten 
Zeile der Prozedur zu erkennen, die du hier nicht mitgepostet hast.
Die wird vermutlich so aussehen:
1
boolean MeineUnterroutine() {
2
3
return ((spi_sr & 0x02) == 0);
4
}

Ernst schrieb:
> ich kenne eine Return Anweisung als Wertübergabe an die Funktion,

He? Meinst du diese Pascal Nummer, wo der Aufrufer die Daten aufn Stack 
schiebt, und die Unterroutine das auch macht?

von Ernst (Gast)


Lesenswert?

Ich hätte es besser beschreiben müssen.

Mit Return wird der ausführenden Funktion ein Parameter übergeben.

Die gesamte Prozedur sieht so aus. Keine Boolean Anfrage, sondern nur 
ein Char-Typ.
1
static unsigned char SPI(void)
2
{
3
unsigned char spi_sr = SPISTAT;
4
5
return ((spi_sr & 0x02) == 0);  
6
}
Ernst

von Oliver S. (oliverso)


Lesenswert?

Nun ja, da C eigentlich keine boolean-Typ kennt, hat der unbekannte 
Autor dieses Codes dafür einen unsigned char genommen. Was nichts daran 
ändert, daß entweder eine 0, falls der Vergleich unwahr ist, oder irgend 
etwas anderes, falls der Vergleich wahr ist, zurückgegeben wird.

Oliver

von Karl H. (kbuchegg)


Lesenswert?

Ernst schrieb:

> Die gesamte Prozedur sieht so aus. Keine Boolean Anfrage, sondern nur
> ein Char-Typ.

An dieser Stelle steht der unsigned char für einen 'kleinen Integer ohne 
Vorzeichen'.
Nicht überall, wo das Schlüsselwort 'char' vorkommt, hat man es mit 
Textverarbeitung zu tun. Manchmal benutzt man einen char auch einfach 
nur als 'Variable die wenig Speicherplatz verbraucht und abgesehen davon 
auch einfach nur Zahlen enthält'. zb die Zahlen 0 bzw. 1, wie sie ein 
Vergleich erzeugt.

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Ein Return Wert (darum heißt der auch so) der aufgerufenen Funktion 
gibt etwas ZURÜCK. Nämlich der aufrufenden Funktion einen definierten 
"exit"Status.

Welche Eingangsparameter dei aufgerufene Funktion hat (in Form von 
übergebenen Variablen, Pointern, globalen Variablen etc) hat damit 
reineweg garnix zu tun.

Der Return-Wert der aufgerufenen Funktion (Datentyp: integer) dient der 
aufrufenden Funktion dazu, schnell&einfach einen Statuswert über den 
Erfolg der durchgeführten Funktion mitzuteilen

von Ernst (Gast)


Lesenswert?

Danke für die schnellen Antworten.

Ernst

von Rolf Magnus (Gast)


Lesenswert?

Oliver S. schrieb:
> Nun ja, da C eigentlich keine boolean-Typ kennt,

Doch, schon seit Ende letzten Jahrtausends.
Daß es um C zu gehen scheint, mußte man übrigens auch erst mal raten.

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.