Ich verwende ein ATMEGA32 für die ansteuerung einiger Schrittmotoren... Hier ist es natürlich zweckmäßig... für größere Verfahrwege die aktuelle Position sowie die "Fahraufträge" mit dem Typ LONG zu speichern... Bei der konvertierung der über die UART Schnittstelle reinkommenden Zahlen gibt es allerdings probleme: anscheinend funktioniert die "atol" funktion nicht richtig. mit "atoi" wie im Beispiel angegeben funktioniert alles (natürlich nur bis die Anzahl der schritte größer als der int wird)... sobald ich das mit "atol" ersetze wird xdestination immer =0... für größere Zahlen ergibt sich allerdings ein wert: z.B. eingabe:1000000 -> xdestination=15... hat jemand eine Idee?? Vielen Dank im Voraus Christian P.S.: Sorry für den grausamen code :-D Code: <-schnipp unsigned char in_data[110]; unsigned char out_data[110]; int verbose; long x_actual=0; long x_destination=0; long temp_long; if (strncmp(in_data,"xsteptorel=",11) == 0) { // x_destination = x_actual + (2 * atoi((&in_data[11]))); x_destination = x_actual + (2 * atol((&in_data[11]))); if (verbose == 1) { temp_long = atol((&in_data[11])); UARTWrite("Fahre jetzt "); sprintf(out_data, "%d", temp_long); UARTWrite(out_data); UARTWrite(" Schritte!!!\n\r"); } <-schnapp
- atoi und atol sind tot, strtoXXX sind aktuell - 'long' ist in diesem Fall ungünstig, guck lieber mal nach <stdint.h> - in <inttypes.h> stehen auch Formate für 'sprintf' und Konsorten drin - welches System benutzt denn \n\r als Zeilentrenner...? grins
1 | #include <stdlib.h> |
vergessen? (Abgesehen vom obligaten Hinweis auf strtol)
hmmm mit strtol hatte ich es auch schon versucht... also folgende Zeile: <-schnipp x_destination = x_actual + (2 * strtol (&in_data[11],NULL,10)); <- schnapp war dann an stelle der atol funktion verwendet... zeigt aber das gleiche Verhalten :-(... -> das Ergebnis: 0 das long ersetze ich dann mal durch ein int32_t. Sollte aber keine verbesserung der Problems bringen oder? sprintf bringt mir doch nur was für den "Rückweg", oder?... also das umwandeln des int in ein chararray... (das funktioniert ja auch schon so wies im code ist). ups... ist \r\n nicht aktuell? Was macht man denn sonst? Sorry hab lange nichts mehr programmiert... Hier geht es übrigens um einen ATMEL32, der eine Schrittmotorsteuerung ansteuert... Gesetzt werden dir Werte über einen Windowsrechner mit LabView :-X... Grüße Christian
stdlib.h ist drin... hab ich nur vergessen hier mit reinzukopieren :-)... Sorry...
> sprintf(out_data, "%d", temp_long);
Das ist der falsche Formatspezifizierer.
... und die falsche Formatierung des Quelltextes; es geht nicht mit schnipp und schnapp sondern mit [-c-] am Anfang und [-/-c-] am Ende (ohne die Bindestriche.) Dann sieht der Quelltext schon mal so aus, daß man sich nicht dafür entschuldigen muß.
> - welches System benutzt denn \n\r als Zeilentrenner...? grins
Und welches ... als Satzende? ;-)
rotfl na ihr habt ja ne gute Stimmung hier... das "..." ist ne ganz blöde Angewohnheit vom mir :-) sorry...
jaaaa genau das wars... verwende jetzt %ld und alles ist in Butter... Hab den Fehler völlig woanders gesucht und erwartet... Vielen Dank und macht weiter so :-)... grüße Christian
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.