www.mikrocontroller.net

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


Autor: Benedikt (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fritz Ganter (fritzg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich daran zweifle ruf ich das auf:
          printf ("char %d short %d int %d long %d longlong %d
bit\n",
          8 * sizeof (char), 8 * sizeof (short), 8 * sizeof (int),
          8 * sizeof (long), 8 * sizeof (long long));

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Besser noch:
printf("char %d short %d int %d long %d longlong %d bit\n", 
       CHAR_BIT * sizeof (char),
       CHAR_BIT * sizeof (short),
       CHAR_BIT * sizeof (int), 
       CHAR_BIT * sizeof (long),
       CHAR_BIT * sizeof (long long)); 

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

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.