Hallo, gibt es ein Tool mit dem ich die Laufzeit einer Schleife bestimmen kann ohne 2 Stunden lang Assembler Befehle zu zählen. Ich möchte die Periode einer Regelschleife verringern und wissen was der Berechnungsaufwand des Algorithmus im Programm minimal zulässt. Eine Lösung die ich bisher genutzt habe war mit jedem neuen Schleifendurchlauf ein PIN zu toggeln und mir das dann am Oszilloskop anzuschauen. Danke für Eure Tipps
Wie wäre es wenn Du bei eintritt in die Schleife einen Timer startest und bei austritt stoppst. Er zeigt Dir dann die Zeit. Nur sollte der Timer breit genug sein das kein Überlauf entsteht.
Wenn Du noch einen Timer freihast, kannst Du ihn wunderbar zur Messung der Zeit einsetzen: Am Beginn der Schleife resetten und starten, am Ende stoppen, Wert auslesen, per SPI o. ä. auf ein LC-Display o. ä. ausgeben.
Nur eine Minute... lach :-)
>Nur sollte der Timer breit genug sein das kein Überlauf entsteht.
Dem kann man durch passende Wahl des Prescalers entgegenwirken.
Ja, eine Minute :) Genau, Prescaler... Das muss man dann nur bei der Betrachtung des Wertes berücksichtigen...
oder am Ende der Schleife einen Portpin kippen - dann reicht ein Oszi (oder Stopuhr - je nach Zeit) Grüße, Gisbert
Setze beim Scheifeneintritt einen Portpin auf H. Beim Verlassen der Schleife auf L. Mit dem Oszi kannst Du die Zeit bestimmen.
Macht er doch schon :-) Hier sind alle Antworten aber recht knapp... Schade das nicht auch die Sekunden angezeigt werden :-P
ich hätte den Beitrag des OP wohl bis zu Ende lesen sollen... Aber was ist an dieser Lösung schlecht? Alles andere ist wesentlich aufwändiger (da es ja wohl um die Minimierung der Programmierung geht) Grüße, Gisbert
>Schade das nicht auch die Sekunden angezeigt werden :-P
Wenn er das will, könnte er sich einfach ein Impulsdauermessgerät bauen.
Dann reicht im Messobjekt simples Pin-Toggeln bei Ein-/Austritt in/aus
dem interessierenden Codeabschnitt. Das Messgerät kann im einfachsten
Fall nur aus einem quarzgetakteten µC bestehen, wenn man sich die
Messwerte von ihm über die serielle Schnittstelle zum PC schicken läßt.
Der riesige Bereich möglicher sinnvoller Messzeiten (wenige µs bis
etliche s) ist zu bewältigen, indem man mehrere, unterschiedlich schnell
tickende Zähler laufen lässt (reichen evtl. zwei aus?).
Ja, ich hatte gedacht, es gibt in Simulavr, avrStudio usw. eine Möglichkeit ohne irgendwelchen Programmieraufwand (nicht gleich hauen :-) ) die Sache eins zwei drei zu bekommen. Dann bleib ich bei der Oszi Methode, der Timer ginge natürlich auch, müsste man nur ein bisschen drüber nachdenken, dass er nicht überläuft.
View Toolbars Processor aktivieren. Mit Rechtsklick auf 'Stopwatch' kriegt man die Option die Stopuhr zurückzusetzen.
AVRFan wrote: > Nur eine Minute... lach :-) > >>Nur sollte der Timer breit genug sein das kein Überlauf entsteht. > > Dem kann man durch passende Wahl des Prescalers entgegenwirken. Was allerdings auch die Aufloesung verringert. Wenn Du es genau wissen willst zaehle die Befehle, schau im Datenblatt nach wieviel Takte sie brauchen. Bei nem AVR kann man sowas noch machen. Unterbrechungen durch Interrupts und andere Ereignisse sind dann natuerlich nicht mit beruecksichtigt, also "Netto"Laufzeit.
genau das macht die Stoppuhr im AVRStudio Simulator ja, die Takte zählen. Und wenn der CPU Takt richtig eingestellt ist kriegt man die Zeit auch gleich in ms angezeigt.
AVRStudio wie von Johannes beschrieben. Fleißige können auch die Prozessorzeiten aufschreiben und subtrahieren.
Wenn du einen RS232 Verbindung zum PC hast, kannst du HTerm (Forensuche) als 'Stoppuhr' verwenden. Einfach beim Betreten und beim Verlassen der Schleife jeweils ein Zeichen über den UART schicken, dann kannst du im Terminal die Zeit zwischen dem Empfang der Zeichen ablesen.
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.