www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Initialisierung UART


Autor: Wildsau (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Wildsau (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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" :-)

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Im Controller Datenblatt steht dazu gar nichts.

Aber mit Sicherheit steht die Formel im Datenblatt des Controllers.

Autor: Wildsau (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: john (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.