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


von Noob A. (strippenzieher)


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:
1
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!!

von Karl H. (kbuchegg)


Lesenswert?

Zeig deinen kompletten Code

von Noob A. (strippenzieher)


Lesenswert?

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

von Karl H. (kbuchegg)


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.

von Huch (Gast)


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?

von Noob A. (strippenzieher)


Lesenswert?

Nein printf im Interrupt mach ich nicht...

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

Danke erstmal!

von Noob A. (strippenzieher)


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!

von Falk B. (falk)


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.

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.