mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer Interrupt und sprintf mit float


Autor: Bob A. (strippenzieher)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe gerade ein schönes Problem entdeckt:

AT32UC3A0512 auf eigener Hardware funktioniert wunderbar. Nun habe ich 
eine neue Aufgabe für das gute Stück.
Ein Timer taktet mir ein 4,4kHz Clock Signal.
Durch Abfrage von einem Flag werden die Datenbits synchronisiert.
Bei jedem 128. Takt wird eine AD-Wandlung gestartet.
Den Wert dieser wandlung gebe ich der einfachen Lesbarkeit halber in 
Volt umgerechnet als float auf die serielle Schnittstelle.

Leider blieb des alles nach einem Durchlauf hängen.
Nach etlicher Sucherei bin ich nun drauf gekommen dass der 
Timer-Interrupt nicht mehr ausgelöst wird obwohl der Timer noch schön 
taktet.

Weiter gesucht und ich kann nun sagen, dass es bei sprintf hakt.
Genauer gesagt folgende Zeile:
sprintf(cText ," %+03.3f", Flow);

Sieht harmlos aus, aber sobald die ausgeführt wurde geht mir der 
Timer-Interrupt flöten.

Soweit bin ich mit der Fehlersuche gekommen und nun weiss ich nimmer 
weiter :/
Bei den Bibliotheksfunktionen kenn ich mich garnet aus, leider.

Ich hab AVR32 Studio Version: 2.5.0 und bisher auch keine Probleme 
gehabt.

Hat irgendwer schonmal ein ähnliches Problem gehabt, oder eine Idee was 
da schieflaufen könnte.

Bin für jeden Hinweis dankbar!!

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeig deinen kompletten Code

Autor: Bob A. (strippenzieher)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist ziemlich viel...
Was darf's denn genau sein? Hast du schon einen Verdacht wo ich 'en 
Bockmist eingebaut haben könnte?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bob A. schrieb:
> Das ist ziemlich viel...
> Was darf's denn genau sein? Hast du schon einen Verdacht wo ich 'en
> Bockmist eingebaut haben könnte?

Nein, eben nicht.
Der kann überall stecken. Angefangen damit dass dein cText zu klein 
dimensioniert ist.

Das eigentliche Problem kann aber auch ein ganz anderes sein und was du 
siehst sind nur die Symptome, haben aber mit der Ursache an sich gar 
nichts zu tun.

Alles ist möglich.

Autor: Huch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Das ist ziemlich viel...
Dann nimm alles aus dem Code raus, was nicht notwendig ist um den Fehler 
auszulösen. Reduziere ihn also Schritt für Schritt. Wenn der Fehler 
nicht mehr auftritt, darfst Du das Codestück nicht entfernen.

Aber ich habe da so einen Verdacht: Du rufst nicht zufällig im Interrupt 
printf auf?

Autor: Bob A. (strippenzieher)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein printf im Interrupt mach ich nicht...

Ich reduzier den code mal auf's Notwendigste und berichte dann wieder.

Danke erstmal!

Autor: Bob A. (strippenzieher)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da scheint was anderes mir reinzufunken...
Immer wieder mal fehlt der Interrupt. Einmal war es die 
sprintf-Zuweisung, einmal der Zugriff auf SPI, einiges konnte ich gar 
nich ausmachen was schuld war...

Deutet alles daraufhin dass ich das Projekt einstampf und komplett neu 
beginnen muss...
Och menno, keine Lust! :/

Trotzdem Danke für Eure Hilfe!

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Bob A. (strippenzieher)

>Deutet alles daraufhin dass ich das Projekt einstampf und komplett neu
>beginnen muss...

Das muss man manchmal. Ein vermurkstes Konzept retten zu wollen ist 
meist aufwändiger und mit schlechterem Ergebnis als alles neu zu machen. 
Da kann man die gewonnenen Erkenntnisse einfliessen lassen und Altlasten 
abwerfen.

MFG
Falk

P S Sag doch einfach mal, was das insgesamt werden soll, dann kann man 
dir deutlich besser helfen, siehe Netiquette.

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.