Ich muss jetzt doch mal fragen welche Zahlenlänge in den Variablen Typ uint32_t passt . In diese Variable schreibe ich 123456 rein und vergleiche dann in einer Abfrage ob 123456 dem Wert der Variablen entspricht . Dies tut es jedoch nie ?! .Lasse ich mit den Wert der Variablen im Display ausgeben bekomme ich einen Wert von -1039 ?! . Wie kann es bitte sein das ich bei einem unsigned typ einen negativen Wert habe ?! . Fehler in der Prozedur kann ich im übrigen ausschließen zumal ich zb mit dem Wert 1234 keine Probleme habe . Dieser Wert wird dann auch als 1234 auf dem Display ausgegeben . Welchen Fehler mache ich bei den Variablen ? . Ich brauche etwas wo ich 9 stellige Zahlen abspeichern kann . Einen string möchte ich hier allerdings nicht nutzen .
Magnus schrieb: > Fehler in der Prozedur kann ich im übrigen ausschließen zumal ich zb mit > dem Wert 1234 keine Probleme habe . Du vielleicht. Wir hingegen schliessen bei der Fehlersuche grundsätzlich erst einmal gar nichts aus solange nicht das Gegenteil bewiesen ist. Daher: Beschreib nicht deinen Code. Zeige ihn! In der Zeit, die du zum Tippen deiner Beschreibung gebraucht hast, hättest du den Code auch per Copy&Paste mindestens 5 mal einfügen können und wenn du deinen Code einfach als Dateianhang mitgepostet hättest, hättest du das in der Zeit mindestens 10 mal machen können. Und wir bräuchten nicht nachfragen.
> Display ausgeben bekomme ich einen Wert von -1039
Wenn du bei einem unsigned Wert ein negatives Vorzeichen hast, ist das
schon mal ein deutlicher Hinweis darauf, dass du die falsche
Ausgabefunktion benutzt.
das i in itoa steht für Integer. Genauso wie das l in ltoa für long
steht. Und beide werden als 'mit Vorzeichen' angenommen! Die Funktionen
bekommen jeweils ein Bitmuster. Sie können nicht wissen, dass das bei
dir ursprünglich unsigned Zahlen waren.
wenn du einen negativen Wert angezeigt bekommst, liegt das nicht an der Variablen, sondern an der Funktion mit der Du das machtst (printf("%d",variable) geht davon aus, das die Variable signed ist, sonst müsstest du "%ud" schreiben, der Typ der Variablen spielt aber bei Vergleichen und Operationen mit ihr eine Rolle. mfG Ingo
Magnus schrieb: > Ich brauche etwas wo ich 9 stellige Zahlen abspeichern kann . 9-stellig? Was willst du machen? Das Budgetdefizit ausrechnen?
Ein Long, longint, longword sind alle um die 9 stellen. Wenn noch was uebrig sein soll, dann wuerde man quadword, longlong oder longlongint verwenden
Hallo, mir fällt dazu folgendes ein / auf: - welche Programmiersprache verwendest du? in C ist uint32_t kein Schlüsselwort, es muss also ein define oder typedef geben, das daraus einen Typ macht. Wie sieht das bei dir aus? - welche Art Controller verwendest du? Bei einem 8-Bitter kann die Verwendung einer long-Var bei Ausgaben anders aussehen als bei einem 32-Bitter. Gruß Martin
Aha danke für den Hinweis mit dem itoa .Und genau das habe ich bei mir gefunden :S.Wie ich die Funktion wissen lassen kann das es ein unsigned int ist habe ich allerdings noch nicht ganz herausgefunden . Kann mir hier vielleicht jemand auf die Sprünge helfen ?! . Bin fast sicher das ich hier ein Problem habe !
> Wie ich die Funktion wissen lassen kann das es ein unsigned > int ist habe ich allerdings noch nicht ganz herausgefunden Versuchs mal mit utoa() respektive ultoa() HTH
Magnus schrieb: > Aha danke für den Hinweis mit dem itoa .Und genau das habe ich bei mir > gefunden :S.Wie ich die Funktion wissen lassen kann das es ein unsigned > int ist habe ich allerdings noch nicht ganz herausgefunden . Das geht gar nicht. Für unsigned gibt es utoa Aber vorsicht: Du hast prinzipiell keinen int, du hast einen long! Und die Funktion wiederrum heißt dann ultoa itoa für int utoa für unsigned int ltoa für long ultoa für unsigned long Das alles erklärt aber immer noch nicht, warum deine Vergleiche nicht funktionieren :-) Hast du vielleicht = anstelle von == geschrieben?
Karl heinz Buchegger schrieb: > Das alles erklärt aber immer noch nicht, warum deine Vergleiche nicht > > funktionieren :-) Doch und zwar habe ich eine Routine die die Variable mit dem 123456 ins Eeprom schreibt .Ins Eeprom schreibe ich diese Zahl allerdings erstmal als String so wie ich sie vom PC bekomme . Der Wert wird dann vor dem Vergleich abgerufen vom string umgewandelt und verglichen . Da die Umwandlung aber nicht stimmte ,stimmte auch der Vergleich nicht . Allerdings habe ich Dussel gerade nach itoa gefragt .Ich brauche aber das Gegenstück also atoi für long int ?! . Ich habe hier strtoul gefunden .Allerdings erwartet diese Funktion wieder einiges mehr .Stelle 1 ist ein Pointer auf meinen String aus dem EEprom ,Stelle zwei soll das Ende im String markieren (brauche ich aber nicht also wie umgehen ?! .Und Stelle drei ist ja klar 10 für Dezimal . Oder gibt es noch eine bessere funktion ?
Magnus schrieb: > Ich habe hier strtoul gefunden .Allerdings erwartet diese Funktion > wieder einiges mehr .Stelle 1 ist ein Pointer auf meinen String aus dem > EEprom ,Stelle zwei soll das Ende im String markieren (brauche ich aber > nicht also wie umgehen ?! Doku lesen. Du darfst NULL angeben um der Funktion zu sagen: Behalte deine Ergüsse für dich.
Magnus schrieb: > Doch und zwar habe ich eine Routine die die Variable mit dem 123456 ins > Eeprom schreibt .Ins Eeprom schreibe ich diese Zahl allerdings erstmal > als String so wie ich sie vom PC bekomme . > Der Wert wird dann vor dem Vergleich abgerufen vom string umgewandelt > und verglichen . > Da die Umwandlung aber nicht stimmte ,stimmte auch der Vergleich nicht . Und damit ist das mal wieder ein Paradebeispiel dafür, warum der Code gepostet werden muss, und nicht eine Beschreibung des Codes. Für dich mag die Beschreibung ausreichend sein, alle anderen haben aber etwas gänzlich anderes verstanden als in deinem Code steht. Bleibt die Frage, warum du den Wert überhaupt für den EEPROM in einen String umwandelst? Ist ja nicht so, als müssten die EEPROM-Daten besonders portabel sein oder sonstwas, also kannst du auch einfach den uint32_t als 4 Bytes im EEPROM speichern. Spart sowohl eine ganze Menge Code als auch Platz im EEPROM. Andreas
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.