Warmstartflag

Du hast ein Betriebssystem für den Hive geschrieben oder beschäftigst dich mit den grundlegenden Systemfunktionen, dann bist du hier richtig!
Antworten
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Warmstartflag

Beitrag von PIC18F2550 »

Hallo

ich habe mich heute mal etwas mit dem Warmstartflag befasst.

Es scheint ja im Prinzip zu funktionieren aber mir ist der Wirk­me­cha­nis­mus 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

Der DAT Bereich sollte in allen Programmen vorkommen.
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
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: Warmstartflag

Beitrag von drohne235 »

Hmm, bin gerade etwas ratlos: Bezieht sich das auf Hive/TriOS-Code? Weil in meiner reg-ios.spin steht da was ganz anderes... :?: :roll:
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Warmstartflag

Beitrag von PIC18F2550 »

Nee drohne235 bei dir steht das so nicht drin.
Das ist nur ein Programmversuch um den Mechanismus zu Verstehen und zu vereinfachen.

Im regnatix Flash steht das:

Code: Alles auswählen

CON
'system
LOADERPTR       = $0FFFFB                               'eram-adresse mit pointer auf loader-register
MAGIC           = $0FFFFA                               'Warmstartflag

VAR
' achtung: reihenfolge der folgenden zwei variablen nicht ändern!
  byte  lflag                                           'flag zur steuerung des loaders
  byte  lname[16]                                       'stringpuffer für dateinamen

PUB main | spinbin,i                                    'loader: hauptroutine
{{main - loader: hauptroutine}}
  bus_init                                              'bus initialisieren
  wr_long(@lflag,LOADERPTR)                             'zeiger auf loader-register setzen
' ----------------------------------------------------- REGIME
  waitcnt(cnt + clkfreq)                                'kurze pause für slaves
  spinbin := load(@sysname)                             'start-bin laden
  bus_off                                               'bus deaktivieren
  run(spinbin)                                          'sys-objekt ausführen
' ----------------------------------------------------- LOADER
  repeat                                                'kommandoschleife
    repeat until lflag <> 0                             'warte das flag gesetzt ist
    lflag := 0                                         
    repeat i from 1 to 7                                'cog 1..7 anhalten
      cogstop(i)
    bus_init                                            'objekt laden und ausführen
    spinbin := load(@lname)
    bus_off
    run(spinbin)

DAT
sysname           byte "reg.sys", 0                         'name der systemdatei

Was mich wundert das gerade hier die MAGIC Adresse nicht angesprochen wird.
Hier müsste doch eigentlich ein Wert unterschiedlich von 235 für Kaltstart eingetragen werden.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: Warmstartflag

Beitrag von drohne235 »

Magic unterscheidet, ob der externe RAM nach dem Einschalten leer ist, also ungültige Werte enthält, oder nach einem Reset von Regnatix (oder aller drei Props) noch Daten enthält. Wenn ein Kaltstart vorliegt, wird der eRAM inklusive RAM Disk vom ersten Programm durch den Aufruf von ios.start initialisiert. Im Normalfall ist das regime, welches als reg.sys durch den Loader gestartet wird, kann aber auch ein anderes Programm sein.

In regflash.spin wird nur der Loader gestartet (und evtl. PropForth). Der Loaders wird dabei aber nur bei einem Neustart/Reset von Regnatix aus dem Flash geladen und muss dann auch (unabhängig vom Inhalt des eRAM) reg.sys erstmal starten, um danach auf Kommandos von den Programmen im Heap zu warten. Im Prinzip könnte man im Loader vielleicht (wenn ich gerade nichts übersehe) auch den eRAM + RAM Disk in Abhängigkeit von Magic initialisieren, aber meine Idee war es halt, den Loader selbst so klein wie möglich zu halten, um so viel wie möglich nutzbaren Heap für Programme zu besitzen.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
PIC18F2550
Beiträge: 2831
Registriert: Fr 30. Sep 2011, 13:08

Re: Warmstartflag

Beitrag von PIC18F2550 »

:oops: drohne235 Du hast natürlich Recht. Ich bin wieder mal falsch abgebogen.

Das Warmstartflag besagt ja nur ob sich Daten im eRAM befinden könnten die bei einen Neustart nicht Überschrieben werden dürfen.

Ausgelöst wurde der Gedanke das es keine Abfrage beim Neustart gibt ob die Daten Überschrieben/gesichert werden sollen.

Die Erkenntnis hatte ich heute Früh auf der Fahrt zur Arbeit.

Die Sache mit dem nutzbaren Heap für Programme ist schon ein wichtiger Punkt bei den 32k hRAM.
Gruß
PIC18F2550

drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Antworten