Hallo, wie kann man eigentlich in C die Zeit ermitteln, die man pro Befehlabarbeitung braucht. In ASM kann man ja die Zyklen zusammenzählen. Konkretes Bsp. ist eine Verzögerung mit z.B. einer For-Schleife. Kann man das nur durch ausprobieren oder debuggen ermitteln, oder gibt es Berechnungsmethoden, um die Zeit während des Programmierens zu ermitteln. Gruss Johnjoe
Lässt sich nicht pauschal sagen, da der Compiler optimiert kommt da unter Umständen jedes mal etwas ganz anderes raus. Für Verzögerungsschleifen legt man eine Schleife an und verhindert mittels einer Inline-Assembler-Anweisung (Kommentar reicht glaub` ich schon) die Wegoptimierung der leeren Schleife.
Also den Inline Assembler verwenden und dann wie gehabt die Verzögerungen aufbauen. Danke Gruss
für Warteschleifen die mitgelieferten Funktionen nehmen (<util/delay.h>), ansonsten im Simulator "mitstoppen", es gibt sowohl einen Zyklenzähler als auch 'ne Stoppuhr - und natürlich alle Rechnungen dem Compiler überlassen
> und verhindert mittels einer Inline-Assembler-Anweisung (Kommentar > reicht glaub` ich schon) die Wegoptimierung der leeren Schleife. Wenn man sie 'asm volatile' macht, sollte es reichen.
johnjoe wrote: > wie kann man eigentlich in C die Zeit ermitteln, die man pro > Befehlabarbeitung braucht. Wenn man Assembler kann, kann man in das Assemblerlisting schauen. Mit den entsprechenden Einstellungen (compilerabhängig) kann man die C-Zeilen als Kommentar mit einfügen lassen. > Konkretes Bsp. ist eine Verzögerung mit z.B. einer For-Schleife. Das ist nun genau ein Fehler, den man immer wieder bei Anfängern sieht und der unter Fortgeschrittenen verpönt ist. Grund ist, daß solche Delays nie stabil arbeiten (compilerabhängig, werteabhängig, optimierungsabhängig). Man nimmt entweder Delayfunktionen aus der Bibliothek oder macht sie mit Hilfe eines Timers. Wenn der Complier keine passende Delayfunktion bereitstellt, schreibt man eine, ermittelt deren Laufzeit und ruft sie dann an den benötigten Stellen in einer Schleife auf. Beim AVR-GCC 4.1.1 muß man diese aber in ein separates Objekt packen, sonst kann sie seinem Optimierungswahn zum Opfer fallen (unerwünschtes Inlining, Reordering). Peter
Danke, mit dem Timer hab ich mir dann auch überlegt. Ist wahrscheinlich das Beste und universell. Konkret ist es für einen MSP430. Gruss
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.