Forum: Mikrocontroller und Digitale Elektronik verbleidende Leistung in MIPS anzeigen


von Philipp Karbach (Gast)


Lesenswert?

Hallo, ich habe letztens ein microcontroller demo gesehen, in dem 
angezeigt wird wieviel Restleisung in MIPS noch verfügbar ist. Mein 
mega644 erzeugt ein BAS signal, RAM ist noch massig da, flash auch. 
Jetzt interessiert mich wieviel Rechenleistung ich noch vorhanden. Wie 
berechnet man soetwas?

von Marc D. (cosinus)


Lesenswert?

Einen Task erzeugen der immer dann laeuft, wenn nichts Anderes getan 
wird und schauen wie oft innerhalb des Tasks eine bestimmte Anzahl von 
Instructions, innerhalb einer bestimmten Zeit, abgearbeitet werden.

Oder immer wenn dein Programm nichts zu tun hat die clockticks zaehlen 
bis dein Programm wieder was zu tun hat. Ueber z.B. eine Sekunde 
aufsummieren und dann ausgeben und den counter resetten.

Ist aber alles nicht so einfach, solange du kein Multitasking OS 
verwendest. Aber machbar.

Gruss
Marc

von Klaus W. (mfgkw)


Lesenswert?

Relativ gängige Alternative: Immer wenn etwas getan wird einen
Pin setzen sonst löschen.
Das ergibt eine PWM-Ausgabe, z.B. für ein Oszi

von Philipp Karbach (Gast)


Lesenswert?

hmmm gefällt mir alles nicht so richtig. Könnte man nicht einfach noch 
etwas berechnen lassen um zu bestimmen wieviel rechenleistung noch da 
ist? Beispiel mein Interrupt macht das Signal etc. und ich berechne im 
Main loop PI oder irgendwas anderes und sammle die benötigten Ticks, 
habe daher ein Rückschluss wieviel Rechenleistung allein für die 
Signalerzeugung draufgeht und kann damit zumidestens schonmal 
einschätzen was ich noch im hintergrund machen darf/kann.

von Bastler (Gast)


Lesenswert?

Die PWM-Ausgabe ist genial, da kann man direkt eine Drehspulanzeige 
anschließen.

Ich setze auch oft ein Pin beim Aufruf einer Funktion und setze ihn beim 
Ende zurück. Damit lässt sich die "Bearbeitungsdauer" leicht messen.

von Marc D. (cosinus)


Lesenswert?

PI berechnen brauchst bestimmt nicht. da reicht auch einfach eine 
while(1). dort die Ticks zaehlen und einmal pro Sekunde ueber einen 
interrupt ausgeben und zuruecksetzen.

EDIT:
schreib die schleife in ASM und du weisst genau wie viel ticks benoetigt 
werden. Dann einfach jedesmal in der Schleife das zu einer Variablen 
hinzuaddieren und dann wie oben ausgeben und zuruecksetzen.

Gruss

Marc

von Peter (Gast)


Lesenswert?

@Klaus Wachtler (mfgkw)
> Relativ gängige Alternative: Immer wenn etwas getan wird einen
> Pin setzen sonst löschen.
> Das ergibt eine PWM-Ausgabe, z.B. für ein Oszi
wie geht das genau, wenn ich der in main den Pin setze dann muss ich ihn 
ja in jeder Interupt der kommen kann löschen? Sonst wird ja die Zeit in 
der ISR als Idle Zeit berechnet.

von Marc D. (cosinus)


Lesenswert?

@Peter:

oder du setzt den Pin beim eintritt in die ISR und loescht ihn am Ende, 
oder im Main Loop, wenn da nicht allzuviel getan wird.
Aber im Prinzip musst du fuer jeden Interrupt das implementieren.

Gruss
Marc

von Joerg W. (joergwolfram)


Lesenswert?

wenn vorhanden, kannst Du den VSYNC nutzen. Am einfachsten ist es, die 
freien Takte während der LOW-Zeit und dann die waährend der HIGH-Zeit zu 
messen und schliesslich beides zu addieren. Es muss ja nicht auf 3 
Kommastellen genau sein.

Bei 20MHz Takt und 50Hz (PAL) könnte es so gehen:

-X Register auf 0 setzen
- auf H-> L Flanke des VSYNC-Pins warten
- während der L-Zeit alle 156 Takte X um eins hochzählen
- während der H-Zeit alle 156 Takte X um eins hochzählen
- im XH Resister steht dann die Rechenleistung in 1/10 MIPS

Jörg

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.