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