Hallo,
ich wollte ein von mir geschriebenes BASIC-Programm im BASCOM-eigenen Simulator testen.
Meine BASCOM-Version ist eine Demoversion, die aktuellste, die im Moment zum Download angeboten wird.
Nun zum Problem:
Der Simulator scheint ziemlich langsam zu sein, eine Sekunde im Timer verbraucht circa 3 Sekunden auf dem Rechner, wobei 99% CPU-Leistungbenutzt werden (selbst, wenn der Simulator wieder steht (?))
Mit zunehmender Komplexität des Programms dauert die Verarbeitungszeit immer länger.
Im Simulatorfenster erscheint häufig die Meldung "Stack pointer and software stack overlap".
Hier der Code des Programms (ist nicht der schönste, ist das erste mal, dass ich BASIC lerne):
Code:
'$sim
$regfile = "m8def.dat"
$crystal = 8000000
$framesize = 16
$swstack = 8
$hwstack = 32
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcdbus = 4
Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1
Enable Timer1 'schalte den Timer1 ein
On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1
Enable Interrupts
Timer1 = 34285 'Timer1 soll schon von 34285 wegzählen
Dim Hours As Integer
Dim Mins As Integer
Dim Secs As Integer
Dim Dchge As Integer
' Hours = 24
' Mins = 60
' Secs = 60
' Dchge = 0
Hours = 0
Mins = 0
Secs = 5
Dchge = 0
Cls
Do
If Dchge = 0 Then
Locate 1 , 1
Lcd "Verbleibend:"
End If
If Dchge = 1 Then
Locate 1 , 1
Lcd "Wechsel!"
End If
If Hours = 0 Then
If Mins = 0 Then
If Secs = 0 Then
Hours = 24
Dchge = 1
End If
End If
End If
If Mins = 0 Then
If Secs = 0 Then
If Hours > 0 Then
Mins = 60
Decr Hours
End If
End If
End If
If Secs = 0 Then
Secs = 59
Decr Mins
End If
Locate 2 , 1
Lcd Hours ; "h:" ; Mins ; "m:" ; Secs ; "s :)"
Loop
End
Isr_von_timer1: 'ISR von Timer1
Timer1 = 34285 'Timer1 soll wieder von 34285 wegzählen
Decr Secs
Return
Der Code macht eigentlich nix schwieriges:
Auf dem Display steht die verbleibende Zeit bis zum "Wechsel", ich habe das im Programm so eingestellt, dass es nur noch 5 sekunden sind, die bis zum wehcsel verbleiben.
Habt ihr eine Idee?
Vielen Dank,
grüße Simon
Lesezeichen