Atmel Studio 7 bug?

OP #4971533
Lesenswert?

Vielleicht hab ich aber auch ein Brett vor dem Kopf.

Folgendes :
1
while (j<=50)
2
{
3
   i++;
4
   if (data[i]!=',')
5
   j++;
6
}

ergibt für i den Wert 62 was 12 Kommata im Array entsprechen.

Dies wiederum:
1
while (j<=12)
2
{
3
   i++;
4
   if (data[i]==',')
5
   j++;
6
}

ergibt für i den Wert 16346 und nicht wie zu erwarten wäre: 62

Woran könnte das liegen?
OP #4971566
Lesenswert?

@Marc: Wenn in einem Array nach 62 Zeichen 50 "Nicht-Kommata" übrig 
bleiben kann man davon ausgehen dass 12 von den 62 Zeichen ein Komma 
waren.

Wenn man innerhalb des gleichen Arrays nach 12 Kommata sucht ist zu 
erwarten das diese nach 62 Zeichen alle aufgefunden sein sollten.

Oder etwa nicht? Verwirrend!
Gast #4971571
Lesenswert?

Attila C. schrieb:
> Was sind [c] Tokens?

C-Code in Forenbeiträgen bitte in solche Tags einschließen (siehe 
Abschnitt "Formatierung" in der Beschreibung über dem Textfeld).

> Der Code ist eine Funktion. i und j sind beim Aufruf dieser Funktion 0.
Und wie sieht data aus?

Attila C. schrieb:
> ergibt für i den Wert 16346 und nicht wie zu erwarten wäre: 62

Warum wäre das zu erwarten; wie sind die Variablen definiert (Datentyp), 
wie sind diese vorher belegt etc?

> Woran könnte das liegen?
Können wir so nicht beurteilen.

=> Bitte vollständigen Code posten (bzw. ein für sich compilierbares 
Minimalbeispiel, das das beschriebene Verhalten zeigt).
(Firma: Vescomp) #4971577
Lesenswert?

Attila C. schrieb:
> @Marc: Wenn in einem Array nach 62 Zeichen 50 "Nicht-Kommata" übrig
> bleiben kann man davon ausgehen dass 12 von den 62 Zeichen ein Komma
> waren.

 LOL.
 Da wird nirgendwo auf die Arraygrenze geprüft - mit diesem Code
 kannst du genausogut nur 3 Komma im Array haben, aber dafür  4 Mal
 durch den ganzen Array (und den Rest der RAM, falls es sich um
 Integer handelt) durchpfeifen...

 Falls es aber uint8_t sind, wird dein Array solange von 0 bis 255
 abgefragt, bis 12 Komma zusammenkommen...
Moderator (Firma: Titel) Persönliche Seite #4971581
Lesenswert?

Attila C. schrieb:
> Was sind [c] Tokens?
Das wird direkt über jeder Eingabebox beschreiben. Gleich nach
*Wichtige Regeln - erst lesen dann posten!*

Attila C. schrieb:
> Wenn man innerhalb des gleichen Arrays nach 12 Kommata sucht ist zu
> erwarten das diese nach 62 Zeichen alle aufgefunden sein sollten.
> Oder etwa nicht?
Was, wenn das unbekannte Array 1234567 Zeichen aufnehmen kann? Nur du 
kennst bisher dein Array? Wie soll dir da irgendwer sonst helfen 
könnnen? Du musst schon ausführliche und brauchbare Informationen 
beisteuern.

> Re: Atmel Studio 7 bug?
Die Antwort auf diese Frage lautet "Sicherlich einige. Aber nicht in 
diesem Fall".
Angehängte Dateien:
OP #4971605
Lesenswert?

Es handelt sich um ein NMEA Protokoll. Wenn ich nicht auf Kommata prüfe 
und es so mache........
1
while (i<62)
2
{
3
  test[k]=data[i];
4
  i++;
5
  k++;
6
}

(So richtig mit den Tokens?)

.......dann sehe ich auf dem Display die korrekten Daten.

Ich verstehe nicht warum die Array-Größe oder Array-Grenze eine Rolle 
spielt. Die Prüfung auf nicht-Komma ist korrekt. Das Array enthält 
innerhalb der 62 Zeichen 12 Kommata und 50 nicht-Kommata. Warum ergibt 
dann die Prüfung auf 12 Kommata einen solch absurden Wert?
OP #4971804
Lesenswert?

So:Nach 3 Tagen funktioniert dieses völlig kranke Konstrukt:
1
void fetchGPS (char datensatz)
2
{
3
  int i=0,j=0,k=0;
4
  float wert=0;
5
  char test[100];
6
  
7
  while (j<=datensatz)
8
  {
9
    i++;
10
    if (gpsdata[i]==',')
11
    j++;
12
  
13
    if (j==datensatz)
14
    {
15
      i++;
16
      while(j==datensatz)
17
      {
18
        test[k]=gpsdata[i];
19
        k++;
20
        i++;
21
          if (gpsdata[i]==',')
22
          j++;
23
      }
24
    }
25
  }
26
string(test);
27
cursorhome();
28
}

Warum , z.B. in der letzten while Schleife ein "while (gpsdata[i]!=',') 
partout nicht funktionieren will erschleisst sich mir nicht. Nur der 
Umweg über j führt zum Ergebnis.
Gast #4971826
Lesenswert?

> Debugger? Das habe ich noch nie gemacht.

Dann wird es jetzt Zeit, das zu lernen. Kannst du auch mit dem Simulator 
machen, wenn du keine Debugger-Hardware hast.

Für genau solche Probleme ist ein Debugger und das Durch-Steppen ideal.
OP #4972653
Lesenswert?

ich wäre dann mal wieder mit meinem Latein am Ende:
1
float fetchGPS (char datensatz)
2
{
3
  int i=0,j=0,k=0;
4
  float wert=0.0;
5
  char nmea[20];
6

7
  while (j<=datensatz)
8
  {
9
    i++;
10
    if (gpsdata[i]==',')
11
    j++;
12
  
13
    if (j==datensatz)
14
    {
15
      i++;
16
      while(j==datensatz)
17
      {
18
        nmea[k]=gpsdata[i];
19
        k++;
20
        i++;
21
          if (gpsdata[i]==',')
22
          j++;
23
      }
24
    }
25
  }
26
  
27
  wert=atof(nmea);
28
  
29
      //string(nmea);
30
      //cursorhome();
31
      
32
  if (nmea=='A')
33
  wert=123.45;
34
  
35
  return wert;
36
}

Lasse ich mir den auskommentierten string anzeigen steht da ein "A". 
Lasse ich mir den return Wert anzeigen steht da 0.00. Numerische return 
Werte werden ansonsten korrekt angezeigt.
Beitrag #4972670 wurde von einem Moderator gelöscht.
Beitrag #4972686 wurde von einem Moderator gelöscht.

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