Warmstartflag
Verfasst: So 13. Dez 2015, 00:12
Hallo
ich habe mich heute mal etwas mit dem Warmstartflag befasst.
Es scheint ja im Prinzip zu funktionieren aber mir ist der Wirkmechanismus etwas unklar.
Zum erkennen ob ein Kalt/Warmstart erfolgt findet im eRAM statt.
Bei einem Reset Hart-/Software seitig bleibt dieser aber unverändert da der Inhalt der Zelle nicht verändert wird
Der einzige Speicherbereich der nach einem Hart-/Software seitigen Reset sicher wieder hergestellt wird ist der DAT Bereich.
Funktionsprinzip:
Der DAT Bereich sollte in allen Programmen vorkommen.
Auch wenn er für das jeweilige Programm nicht gebraucht wird.
ich habe mich heute mal etwas mit dem Warmstartflag befasst.
Es scheint ja im Prinzip zu funktionieren aber mir ist der Wirkmechanismus etwas unklar.
Zum erkennen ob ein Kalt/Warmstart erfolgt findet im eRAM statt.
Bei einem Reset Hart-/Software seitig bleibt dieser aber unverändert da der Inhalt der Zelle nicht verändert wird
Der einzige Speicherbereich der nach einem Hart-/Software seitigen Reset sicher wieder hergestellt wird ist der DAT Bereich.
Funktionsprinzip:
Code: Alles auswählen
DAT ' Am Anfang des Programmcodes von regnatix
MAGIC byte $FF
PUB main | a
a := ini
PRI ini : wflag
if byte[@MAGIC]>7
'kaltstart
ram_wrlong(sysmod,SYSVAR,RAMEND) 'Zeiger auf letzte freie Speicherzelle setzen
ram_wrlong(sysmod,0,RAMBAS) 'Zeiger auf erste freie Speicherzelle setzen
ram_wrbyte(sysmod,0,RAMDRV) 'Ramdrive ist abgeschaltet
ram_wrbyte(sysmod,0,TIB2) 'tib-puffer mit leerstrin belegen
wflag := 0
else
'warmstart
wflag := 1
byte[@MAGIC] := cogid
Auch wenn er für das jeweilige Programm nicht gebraucht wird.
Code: Alles auswählen
DAT ' Am Anfang des Programmcodes von regnatix
MAGIC byte $FF
PUB main
byte[@MAGIC] := cogid