verbleidende Leistung in MIPS anzeigen

Gast #1563234
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?
#1563248
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
Gast #1563595
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.
Gast #1563604
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.
#1563608
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
Gast #1563625
@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.
#1563662
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.