mikrocontroller.net

Forum: Compiler & IDEs Komisches Verhalten von fread auf Grasshopper / AP7000


Autor: Kriz Lee (kriz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, alle zusammen.

Mir wurde ja schon das letzte Mal erfolgreich geholfen, daher wende ich 
mich (nach Auswertung anderer Hilfsmöglichkeiten z.B. Doku) wieder in 
dieses Forum mit der Hoffnung, dass mir irgendjemand weiterhelfen kann!

Ich habe ein Programm geschrieben, dass Pins 1-10 am PORT D ansteuert 
und entsprechend der gewählten Option bestimmte LEDs leuchten läßt.

Mein Problem ist nun folgendes:
fread(&mem, sizeof(mem), 1, portd) macht nicht das, was ich von dieser 
Programmzeile erwarte. Statt "einmalig" die GPIOs auszulesen, scheint 
fread (meistens) jedes 2. Mal so lange auszulesen, bis ich eine Taste 
drücke und sie dann wieder loslasse! Ich habe ein wenig monkeymaessig 
debuggt. Hab als Debug-Code hinter die Zeile geschrieben:
printf(".");
Der Punkt erscheint aber erst, wenn ich die Taste loslasse... Und ein 
printf vorher ist schon noch zu sehen, so dass ich annehme, dass der 
Fehler im fread liegt.

Code ist angehängt. Ich benutze avr32-linux-gcc Version 4.2.2.-Atmel 
1.0.8. (Falls jemand streckenweise ähnlichen Code schonmal gesehen zu 
haben glaubt, dann kann ich nur sagen, dass es wahrscheinlich auch so 
ist! Ich habe den Code von Christian Z. benutzt, um die GPIOs ansteuern 
zu können.)

Wer kann mir nu das mysteriöse Verhalten meines Grasshoppers erklären?

Autor: Kriz Lee (kriz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch eine kleine Geschichte, die vielleicht weiterhelfen könnte das 
Ganze aufzulösen.

Letzte Woche hat sich das fread etwas zuverlässiger verhalten und hat 
jedes Mal das Programm gestoppt, bis ich eine Taste gedrückt habe (bzw 
losgelassen habe). Ich habe ja in meinem Code switch Statements, die nun 
mit einem zuverlässigen fread-Stopp nicht mehr nötig waren. Als ich die 
Switch-statements herausnahm, ist das Programm einmal komplett 
durchgelaufen und hat dann beim 1. fread in der main-while-Schleife 
(while(1){...}) Halt gemacht....

Und ich so: "Hääääh????"

(Die Switche sind wieder drin, da ich wohl das Programm auch über n 
Webinterface steuern will, so dass die Unterscheidung der Cases anhand 
fread und einer manuellen Änderung des programmcounters erfolgen muss.)

Viel Spass beim "Rätseln" und vielen Dank allen die helfen wollen!

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.