Problem mit atol (Schrittmotorsteuerung)

Gast #1321466
Lesenswert?
• ▲
▼
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
Gast #1321473
Lesenswert?
• ▲
▼
- 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
Gast #1323999
Lesenswert?
• ▲
▼
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren