Initialisierung UART

Gast #166820
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
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
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
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
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
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
Gast
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

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.