Forum: Mikrocontroller und Digitale Elektronik Avr zeitproblem - atmega16 zu langsam


von Alexander Sellemond (Gast)


Lesenswert?

Hallo leute!

Ich habe folgendes problem:
Ich habe dn c code von dirk uffmann, einen kalman filter für einen 
balancierroboter (http://home.arcor.de/uffmann/ARTIST2.htm) auf einen 
atmega16 programmiert.
Ich verwende das selbe system(avrstudio mit winavr) und habe die selben 
fuses programmiert. Ich verwende die selbe taktfrequenz, doch das 
programm läuft irgendwie zu langsam.
Genauer: im programm ist eine schleife, die mit 4,1 ms, also mit 244 hz 
ausgeführt.
Mein controller braucht aus irgendeinem grund 3 mal so lang wie er 
sollte.
Bei Dirk uffmann war zuerst auch das problem, dass das Programm 3x so 
lang gedauert hat, dann ist er draufgekommen, dass er im makefile die 
math library nicht verlinkt hat, dann hat es geklappt mit den 4,1ms.
Ich habe jetzt sogar probiert das selbe makefile wie Dirk zu verwenden, 
bekomme aber immer das selbe ergebnis. Wenn ich in diesem makefile das
 -lm bei LDFLAGS
 entferne, ändert sich nichts, das ist sehr komisch. Ich glaube da 
funktioniett irgendwas noch nicht mit dem linken der math.h, aber keine 
ahnung wieso.
Wenn ich eine verzögerungs-routine aufrufe, wird diese aber richtig 
ausgeführt...also eine warteschleife zu 1ms dauert auch 1ms...
Weis jemand rat?

Vielen Dank

Schöne Grüße.   Alex

von Dietrich (Gast)


Lesenswert?

- gleiche LIBs verwendet?
- Compiler-Optimierung?

von Falk B. (falk)


Lesenswert?

@  Alexander Sellemond (Gast)

>Mein controller braucht aus irgendeinem grund 3 mal so lang wie er
>sollte.

Vielleicht falsche Taktquelle eingestellt, siehe AVR-Fuses.

>lang gedauert hat, dann ist er draufgekommen, dass er im makefile die
>math library nicht verlinkt hat, dann hat es geklappt mit den 4,1ms.

Naja, braucht man WIRKLICH FLießkomme? Oder reicht hier 
Festkommaarithmetik, das sollte deutlich schneller sein.

>Ich habe jetzt sogar probiert das selbe makefile wie Dirk zu verwenden,
>bekomme aber immer das selbe ergebnis. Wenn ich in diesem makefile das
> -lm bei LDFLAGS

Warum wurscheltst du da manuell im makefile rum? Leg ein normales 
Projekt im AVR-Studio an, das verwaltet für 99% aller Projekt das besser 
als du.

>Wenn ich eine verzögerungs-routine aufrufe, wird diese aber richtig
>ausgeführt...also eine warteschleife zu 1ms dauert auch 1ms...

Optimierungstufe richtig eingestellt?

MFG
Falk

von Peter D. (peda)


Lesenswert?

Alexander Sellemond schrieb:
> Wenn ich in diesem makefile das
>  -lm bei LDFLAGS
>  entferne, ändert sich nichts, das ist sehr komisch.

Dann steht es an der falschen Stelle.
Es muß hinter dem Sourcefile stehen.
Schau mal im MAP-File, ob da 264 Byte SRAM verschwendet werden.


Peter

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.