Forum: Compiler & IDEs Programm auf PC und AVR: unterschiedliche Ergebnisse


von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Das Programm misst Werte vom ADC, legt über die letzen 64 Werte eine
Ausgleichsgerade und misst so die Steigung, die im Ruhszustand (also
ADC Werte ändern sich nicht) auf 0 liegen sollte.
Allerdings ist diese immer leicht negativ.
Die rohen Messwerte und das Ergebniss lasse ich mir auch über den UART
ausgeben, berechne auf dem PC (mit genau demselben Code) die Steigung
und da bekomme ich die richtigen Werte.

Wo steckt also der Fehler ?

von Rolf Magnus (Gast)


Lesenswert?

Du könntest mal checken, in welchem Wertebereich deine int-Variablen so
sein können. Auf einem PC ist int 32 bit breit, auf dem AVR nur 16 bit.
Vielleicht läuft da was über.

von Fritz G. (fritzg)


Lesenswert?

Wenn ich daran zweifle ruf ich das auf:
1
          printf ("char %d short %d int %d long %d longlong %d
2
bit\n",
3
          8 * sizeof (char), 8 * sizeof (short), 8 * sizeof (int),
4
          8 * sizeof (long), 8 * sizeof (long long));

von Rolf Magnus (Gast)


Lesenswert?

Besser noch:
1
printf("char %d short %d int %d long %d longlong %d bit\n", 
2
       CHAR_BIT * sizeof (char),
3
       CHAR_BIT * sizeof (short),
4
       CHAR_BIT * sizeof (int), 
5
       CHAR_BIT * sizeof (long),
6
       CHAR_BIT * sizeof (long long));

Es soll ja auch Plattformen geben, auf denen ein Byte nicht 8 bit breit
ist.

von Benedikt (Gast)


Lesenswert?

Ich habe noch ein paar signed/long Cast Kombinationen ausprobiert, und
jetzt läuft es.
Zusätzlich hat noch ein Interrupt mit nichtgesicherten Registern die
Ergebnisse ab und zu versaut..

von A.K. (Gast)


Lesenswert?

@Rolf: Im Prinzip korrekt so, aber welche noch existierende Plattform
hat Bytes <> 8-Bit (und wird in C programmiert)? Die letzten, von denen
ich mal gehört habe, stammen aus den frühen 70ern.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

bei einigen DSP (TI, Analog) ist das wohl üblich das sizeof(char) ==
sizeof(short) == sizeof(int) und CHAR_BITS != 8 hatt man mir zumindest
mal erzählt. Selber hatte ich meine Finger noch nicht an so einem
Teil.

Matthias

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
Noch kein Account? Hier anmelden.