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?
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
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
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.
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.
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
@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.
@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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.