Initialisierung UART

Gast #166820
Lesenswert?
• ▲
▼
Wir haben nach dem GCC Tutorial die Initialisierung der UART
Schnittstelle versucht.

Nach 2 Stunden haben wir endlich den Fehler (durch Zufall) entdeckt:

UBRR = F_CPU / (UART_BAUD_RATE * 16l) - 1;

Am Flachbildschirm ist das l hinter der 16 nicht als L, sondern als 1
zu erkennen.

Kann mir jemand sagen was das L da macht?

(ich hab mir erlaubt im Tutorial die kleinen l durch große L zu
ersetzen.
Gast #166821
Lesenswert?
• ▲
▼
das zeigt dem Compiler an, dass es sich um eine Long-Zahl handelt.
Wenn da nur 16 steht, rechnet er mit byte- oder Int-Werten, was dazu
führen würde, dass da nix steht.
Es hilft übrigens nicht nur das Tutorial durchzuarbeiten, sondern auch
gelegentlich das Datenblatt des Controllers zu Rate zu ziehen.

Gruß Rahul
Gast #166822
Lesenswert?
• ▲
▼
Im Controller Datenblatt steht dazu gar nichts.

Ehrlich gesagt schockiert mich die Tatsache etwas, dass der Compiler
das kommentarlos übernimmt.
Ich hab früher außschließlich Programme für Windows erstellt. Da wäre
soetwas bei keinem Compiler durchgegangen. So wie ich das verstehe ist
das ja ein TypeCast.

Aber ich hab nachgeschaut. Ist tatsächlich ANSI-C Standart.

So langsam vertseh ich auch, warum meine Profs immer gesagt haben:
"Finger weg von C, lässt viel zu viele Fehler zu. Java ist in" :-)
Gast #166823
Lesenswert?
• ▲
▼
So ein Schwachsinn!

Wie soll ein Compiler erkennen, ob Du L, l, 1 oder 3232 Tippen
wolltest?

Der Compiler kennt die Berechnungsformel aus dem Datenblatt (in dem Du
diese tatsächlich findest) nicht im Geringsten...
Gast #166825
Lesenswert?
• ▲
▼
Formel ja, aber ... -16, sonst nix.

was soll daran schwachsinn sein?

Ich multipliziere mit einer Konstanten, nämlich 16. Und dann steht
plötzlich ein string dahinter. Du hast mich falsch verstanden. Das er
meine Eingaben nicht kontrolliert ist mir klar.

Was ich gefährlich finde ist, dass man so einfach eine Typwandelung
durchführen kann. Ich muss hier sicherheitsgerichtet programmieren,
durch solche Fehler sind schon Menschen ums Leben gekommen ...

Wenn eine Typumwandlung gewollt ist, dann mach ich das so:
x = (float)y --> da kann mir kein Tippfehler passieren.
Aber x = 16l ....

Naja, ist ja auch egal. Standart ist Standart.
Gast #166827
Lesenswert?
• ▲
▼
Wenn Du sicherheitsgerichtet Programmieren musst, dann sollte dieses
'L' Dein kleinstes Problem in C darstellen. Es gibt noch wesentlich
schwerwiegendere Probleme mit dieser Sprache!

Und Standart ist eben nicht gleich Standard...

SCNR

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