Helper schrieb:
> Dieser Teil mit dem "ret" leuchtet mir nicht ein.
Was leuchtet dir daran nicht ein?
Wo kommt denn dieses 'ret' her? Wie kriegt es seinen Wert?
Ja wohl hier
1 | ret = i2c_start(TWI_BLCTRL_BASEADDR + (motor << 1) + I2C_WRITE);
|
ret erhält also den Wert, den die Funktion i2c_start zurück liefert.
Also gehst du mal her und siehst in der Doku nach, was diese Funktion
für einen Wert liefert (oder du studierst den Code der Funktion unter
welcdhen Umständen die Funktion welchen Returnwert liefert)
Da der Wert so verwendet wird
hat der wohl 'boolsche' Eigenschaften. Ein Wert ungleich 0 gilt als
logisch wahr (TRUE) und ein Wert von 0 gilt als logisch falsch (FALSE).
D.h. da ergibt sich schon alleine daraus die Vermnutung, dass die
Funktion einen derartigen Wert liefern wird, je nachdem ob sich die
Gegenstelle gemeldet hat oder nicht. D.h. die Funktion liefert einen
Fehlercode und hier wird er ausgewertet. Denn wenn keine Gegenstelle
gefunden wurde oder die sich nicht meldet, dann hat es auch keinen Sinn,
der irgendwelche Befehle zu übermitteln.
> Dort wird allerdings nur die Geschwindigkeit übertragen. Wo wird
> die Adresse mitübertragen?
Ähm. Hier vielleicht?
1 | .... i2c_start(TWI_BLCTRL_BASEADDR + (motor << 1) + I2C_WRITE);
|
2 | **********************************
|
Mann der Berge, du musst Code schon auch ordentlich lesen. Steht doch
alles da!
> Hat dies vielleicht etwas mit diesem ret zutun?
Nö.
i2c_start versucht den Kontakt zur Steuerung mit der Adresse
"TWI_BLCTRL_BASEADDR + (motor << 1)" herzustellen. WEnn das gut geht,
dann setzt es dieser Steuerung einen neuen Geschwindigkeitswert. Wenn
nicht, dann eben nicht.
Was daran ist jetzt so schwer zu verstehen?