Hallo,
ich habe in mein Programm einen FPS-Counter eingebaut, um die Auswirkung von neuem Code/neuen Routinen/neuen Libs auf die Performance gleich ablesen zu können. Eigentlich kein schwieriges Unterfangen, sollte man meinen. Ich habe den Timer so eingestellt, daß er mit 16bit-Timer bei 16MHz alle 200ms in den Interrupt verzweigt und die "Frames" alle 5 Durchläufe ausgegeben werden. Damit ich weiß, ob überhaupt der Interrupt richtig funktioniert hab ich auch noch ein wenig Sound ausgegeben (ohne Sound-Funktion identisches Verhalten). Die Ausgabe erfolgt nun über RS232.
Das Problem ist folgendes: Es wird einige Sekunden das wohl richtige Ergebnis gezeigt, dann plötzlich ein Wert, der genau doppelt oder drei bzw. viermal so groß ist.
Was ich schon Probiert habe, um das Problem zu lösen: Stack/Framesize geändert. Erzeugen des Ergebnisses in der Interruptroutine (ich brauche später einen String für I2C). Entfernen aller waits/anderer Bibliotheken.
Übrig geblieben ist folgender Code, der jedoch immer noch dieses komische Verhalten zeigt. Als ob beim Sprung in die Interruptroutine die Fpsc-Variable um 1 nach links geshiftet würde....
Falls jemand eine Idee hat, warum ich hier so gewaltig auf dem Holzweg bin, wäre ich sehr dankbar.
Grüße
Species8372
Code:'################################################### ' FPS Counter '####################################################### $regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 64 $crystal = 16000000 'Quarzfrequenz $baud = 38400 Wait 1 Dim Fpsstr As String * 7 Config Timer1 = Timer , Prescale = 64 Const Timervorgabe = 15536 '65536 (16Bit)-$crystal/Prescale Dim Fpsc As Long Dim Timeslice As Byte Dim Displayed As Byte Timeslice = 0 On Timer1 Timer_irq Enable Timer1 Enable Interrupts Do If Timeslice = 0 Then If Displayed = 0 Then Displayed = 1 Print Fpsstr End If End If If Timeslice <> 5 Then Incr Fpsc End If Loop End 'Pro 200ms ein Aufruf Timer_irq: 'DBG Timer1 = Timervorgabe Incr Timeslice If Timeslice <> 5 Then Sound Portd.7 , 100 , 1 End If If Timeslice = 5 Then Fpsstr = Str(fpsc) Fpsc = 0 Displayed = 0 Timeslice = 0 Sound Portd.7 , 100 , 10 End If Return







					
					
					
						
Zitieren

Lesezeichen