PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : komische L-Werte in Ultraschall Funktion für ASURO



Darthmina123
21.10.2010, 17:21
Hallo!

Ich bin neu hier und beschäftige mich zur Zeit mit einem ASURO-Bot mit Ultraschllerweiterung.

Ich habe dann mal mit nem Osziloskop an den Aus- und Eingängen des Erweiterungsboards gemessen und mir den Code dazu angeschaut um mal zu verstehen wie das den eigentlich funktioniert.

Habe soweit auch alles verstanden, nur ist mir diese Codestelle hier in der ultrasonics.c aufgefallen, die offenbar den Abstand berechnen soll.


dist = (unsigned int) ((long) ((344L * ((sleeptime * 1000L) / 72L) / 10000L) / 2L));

Ich programmiere zwar schon etwas länger mit C, trotzdem Frage ich mich, was bei 344L, 1000L und 72L das L bedeutet.

Weiß das hier jemand? Danke für eure Hilfe[/b]

radbruch
21.10.2010, 20:29
Hallo

Das "L" bedeutet Longint und kennzeichnet den Wert als 32-Bit-Konstante. Damit wird der Kompiler gezwungen die Rechung mit 32-Bit Zwischenwerten auszurechnen und erst am Ende der Rechnung das Ergebniss auf 16 Bit zu kürzen.

((long) ((344L * ((sleeptime * 1000L)

Ohne (long) und L und mit sleeptime != 0 würde ein 16-Bit-Zwischenergebniss schon bei 344*1000 überlaufen. Oder so ähnlich...

Ganzzahlkonstante (http://openbook.galileocomputing.de/c_von_a_bis_z/005_c_basisdatentypen_019.htm#mjb5d32a7c3c1c65c6a1 658a8ab25ba0cb)

Gruß

mic

Darthmina123
22.10.2010, 07:45
Danke erstmal für die schnelle Antwort, es handelt sich also um eine Art Cast.

MfG
Darthmina123