Forum: Mikrocontroller und Digitale Elektronik Initialisierung UART


von Wildsau (Gast)


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.

von Rahul (Gast)


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

von Wildsau (Gast)


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" :-)

von OldBug (Gast)


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...

von Thorsten (Gast)


Lesenswert?

> Im Controller Datenblatt steht dazu gar nichts.

Aber mit Sicherheit steht die Formel im Datenblatt des Controllers.

von Wildsau (Gast)


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.

von john (Gast)


Lesenswert?

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" :-)

LOL - hast wohl das falsche forum erwischt

von OldBug (Gast)


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

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.