PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bascom Simulator



hofbauer51
03.02.2010, 12:44
Was mache ich falsch?
Beim Starten des Simulators zählen erstmal die Register R30, R31 und R24 auf null und erst dann startet der eigentliche Simulator. Bis die Register alle auf null sind vergehen schon mal 2-5 Minuten.
Das kann dich nicht normal sein - oder?
Gruß
Günther

Che Guevara
03.02.2010, 14:04
Hallo Gunther,

zeig uns doch mal dein Programm, könnte hilfreich sein ;-)

Gruß
Chris

Richard
03.02.2010, 14:16
Hast Du im Proramm oben $sim vor den Compiliren eingesetzt?
wenn nicht läuft der Simulator bei einigen behelen nicht richtig.

Zum Echten Betrieb muß noch einmal ohne das $sim Compiliert werden.

Gruß Richard

Jaecko
03.02.2010, 15:55
Naja das Programm läuft ohne $sim genau so. Nur werden hier sämtliche Warteschleifen auch wirklich gewartet (bei $sim werden die rausgeworfen). Und da ein solcher µC-Simulator (oder Emulator) auch bei heutigen PCs bei weitem keine Echtzeit schafft, ist das Verhalten eigentlich normal.

Wenn du irgendwo ein Wait 1 drin hast, dann wird der Simulator auch die nötige Anzahl Zyklen warten, bis diese 1 Sekunde im Programm vergangen ist. In der Realität kann das durchaus mehrere Minuten dauern.

hofbauer51
04.02.2010, 08:17
Die Wartezeit ist unabhängig vom Programm und von wait-Anweisungen.
Der Zeiger, der die aktuell bearbeitete Zeile im Simulator anzeigt steht auf der 1. Zeile und steht dort solange bis die Register runtergezählt sind. Erst dann beginnt die Simulation.
Gruß
Günther

Jaecko
04.02.2010, 08:35
Zeig doch einfach mal den Code. Es kann durchaus sein, dass da noch irgend ne Initialisierung läuft, die man bei Bascom nicht explizit angeben muss.
z.B. wird ein LCD automatisch initialisiert, sobald ein "LCD"-Kommando vorkommt. Diese Initialisierung (Befehl "InitLCD") taucht im Quelltext nicht auf, wird aber trotzdem ausgeführt und dauert seine Zeit.

hofbauer51
05.02.2010, 10:03
Ich habs mal reduziert auf



Config Lcd = 16 * 4
$crystal = 5000000
$regfile = "m8535.dat"

Home L

End

Wenn dien Zeile Home L rausfällt startet der Simulator sofort.
Aber die Zeile sollte doch ok sein oder?
GRuß
Günther

Jaecko
05.02.2010, 10:17
Genau die Vermutung.
Die Wartezeit kommt durch die Initialisierung des LCD. Die wird automatisch ausgeführt, sobald ein LCD-Kommando (in dem Fall "Home") verwendet wird. Ist diese Anweisung weg, fällt natürlich auch die Initialisierung raus (wozu was initialisieren, das nicht verwendet wird?)

hofbauer51
05.02.2010, 12:02
Das LCD ist natürlich im Programm eingebunden und wird unbedingt gebraucht. Nur in diesem eingedampften Ausschnitt nicht.
Dauert die Initialisierung des LCD wirklich fast 5 Minuten? PC ist quad-core mit 2.8GHz. Kennt jemand einen Ausweg?
Gruß
Günther

stefan_Z
05.02.2010, 13:34
Wenn $SIM nicht hilft, dann schmeiß das INITLCD einfach raus für den Test. Die Ausgaben sollte er immer noch simulieren...

Jaecko
05.02.2010, 13:42
Das ist eins der Probleme. "InitLCD" macht Bascom von sich aus, wenn es erkennt, dass irgendwelche Displaybefehle verwendet werden.
Mit $SIM kann man die Wartezeiten in der Initialisierung auf 0 setzen, durchgeführt wird die trotzdem noch.
Ganz raus kriegt man die Init aber nur, wenn es auch keine LCD-Befehle mehr gibt. Dann zeigt natürlich der Simulator aber auch nichts mehr an.

stefan_Z
05.02.2010, 13:46
Die Frage ist auch, ob man die LCD-Befehle drinhaben muss.
Ansonsten Conditional Compile mit
#IF _SIM = 0 THEN
INITLCD
#ENIF

und das dann auch vor allen Ausgaben - kann man auch per #ELSE auf die UART umleiten.

hofbauer51
05.02.2010, 13:58
Ich werds bei neuen Projekten berücksichtigen. Die bestehenden umzuschreiben ist mir zu mühsam.
Gut ist auf jeden fall, dass das Problem lokalisiert wurde.
Ev. sollte man bei Updates hier was tun.
Danke an alle, die sich die Mühe gemacht haben mir zu antworten.
Gruß
Günther