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.
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
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" :-)
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...
> Im Controller Datenblatt steht dazu gar nichts.
Aber mit Sicherheit steht die Formel im Datenblatt des Controllers.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.