heap größe

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

heap größe

Beitrag von PIC18F2550 »

Nach dem mein Programm nach Reset nicht geladen wurde suchte ich nach der Ursache.

Der vorgesehene heap im EEprom war zu klein ( 1F12l ong = 31816 Bytes. :cry:

Also schnell mal umgeschrieben jetzt ist er ( 1F3Eh long = 31988 Bytes). :D

Da hatten eigendlich nur 7 Bytes gefehlt. :LACHEN

Im Anhang mein Loader r56 zum Testen z.B. für PLEXUS

Ergebnis loader geht nicht mit PLEXUS da werden noch ein parr Dinge mehr benötigt
Zuletzt geändert von PIC18F2550 am Di 3. Sep 2013, 10:29, insgesamt 1-mal geändert.
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
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: heap größe

Beitrag von PIC18F2550 »

Warum den Loder nicht mal in PASM?

Beim Booten verschwindet er in einem COG und wartet
Im letzten long des hRAM's in den unteren 16Bit wird ein Zeiger auf den Namen des zu Ladenden Image übergeben.
In den oberen übergibt der Loder seine COGID( zum Schutz ).
der Zeiger zeigt auf ein Feld von jeweils 3x12 Bytes.
Damit können in einem rutsch Administra, Bellatrix und Regnatix neu geladen werden.

Sind Dateinamen nicht hinterlegt wird auch nichts geladen.

Ran an den Speck. :D
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
zille9
Beiträge: 399
Registriert: Do 4. Okt 2012, 21:56
Wohnort: Berlin

Re: heap größe

Beitrag von zille9 »

PIC18F2550 hat geschrieben:Im letzten long des hRAM's in den unteren 16Bit wird ein Zeiger auf den Namen des zu Ladenden Image übergeben.
Übergib doch den (oder die) Dateinamen im E-Ram
Computer lösen die Probleme, die man ohne sie gar nicht hätte!
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: heap größe

Beitrag von PIC18F2550 »

zille9 hat geschrieben:Übergib doch den (oder die) Dateinamen im E-Ram
Da muß ich noch mehr routinen hineinpacken.
Außerdem Weis ich nicht was alles in den eRAM reinschreibt oder ihn sogar als Transferpuffer verwendet.
Nee das 1 long ist schon das kleinste Übel.

Die Dateinamen werden in den COG-Ram geladen damit steht bis auf einen Long der gesamte hRAM und eRAM zur verfügung.
Ein Programm muß nicht mit Reset oder so ähnichem verlassen werden einfach dem wartenden Loader einen Zeiger geben und weiter gehts.

Beim jetzigen Loader darf das Programm nur so groß sein wie der heap.
Der Speicher nach dem Heap ist dann ein toter bereich, der sich mit jedem Loaderaufruf (ohne Reset) vergrößert.
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
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: heap größe

Beitrag von PIC18F2550 »

Code: Alles auswählen

CON ' LOADER-KONSTANTEN
_CLKMODE        = XTAL1 + PLL16X
_XINFREQ        = 5_000_000

'signaldefinition regnatix
'#0,     D0,D1,D2,D3,D4,D5,D6,D7                         'datenbus
'#8,     A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10               'adressbus
'#19,    REG_RAM1,REG_RAM2                               'selektionssignale rambank 1 und 2
'#21,    REG_PROP1,REG_PROP2                             'selektionssignale für administra und bellatrix
'#23,    REG_AL                                          'strobesignal für adresslatch
'#24,    HBEAT                                           'front-led
'        BUSCLK                                          'bustakt
'        BUS_WR                                          '/wr - schreibsignal
'        BUS_HS '                                        '/hs - quittungssignal
'prop 1  - administra   (bus_putchar1, bus_getchar1)
'prop 2  - bellatrix    (bus_putchar2, bus_getchar2)
'                            +------------------------- al
'                            |+------------------------ /prop2
'          hbeat   --------+ ||+----------------------- /prop1
'          clk     -------+| |||+---------------------- /ram2
'          /wr     ------+|| ||||+--------------------- /ram1
'          /hs     -----+||| |||||           +--------- a0..a10
'                       |||| |||||           |
'                       |||| |||||-----------+ -------- d0..d7
DB_OFF           = %00000000_00000000_00000000_00000000 'maske: bus inaktiv
'DB_IN           = %00000111_11111111_11111111_00000000 'maske: dbus-eingabe
DB_OUT           = %00000111_11111111_11111111_11111111 'maske: dbus-ausgabe

M1               = %00000000_01011000_00000000_00000000 '/prop1=0, /wr=0, busclk=0  frida
M2               = %00000110_01011000_00000000_00000000 '/prop1=0, /wr=1, busclk=1  frida
M3               = %00000100_01111000_00000000_00000000 '/prop1=1, /wr=1, busclk=0  frida

M4               = %00000000_00000000_00000000_00000000
M5               = %00001000_00000000_00000000_00000000 '/hs=0?

#0,     OPT
        SD_MOUNT
        SD_DIROPEN
        SD_NEXTFILE
        SD_OPEN
        SD_CLOSE
        SD_GETC
        SD_PUTC
        SD_GETBLK
        SD_PUTBLK
        SD_SEEK
        SD_FATTRIB
        SD_VOLNAME
        SD_CHECKMOUNTED
        SD_CHECKOPEN
        SD_CHECKUSED
        SD_CHECKFREE
        SD_NEWFILE
        SD_NEWDIR
        SD_DEL
        SD_RENAME
        SD_CHATTRIB
        SD_CHDIR
        SD_FORMAT
        SD_UNMOUNT
        SD_DMACT
        SD_DMSET
        SD_DMGET
        SD_DMCLR
        SD_DMPUT
        SD_EOF

DAT ' Namen und Ort der zu ladenen Treiber
DATEN
        Byte "PROG1"  ,0,0,0,0,0,0,0, 0  ' Path Regnatix
        Byte "reg.bin"    ,0,0,0,0,0, 0  ' Regnatix

        Byte "PROG1"  ,0,0,0,0,0,0,0, 0  ' Path Bellatrix
        Byte 0,0,0,0,0,0,0,0,0,0,0,0, 0  ' Bellatrix

        Byte "LIB",0,0,0,0,0,0,0,0,0, 0  ' Path Administra
        Byte 0,0,0,0,0,0,0,0,0,0,0,0, 0  ' Administra

PUB main ' BOOT
    waitcnt(clkfreq*2+cnt)                                'kurze pause für slaves
    long[$7FFC]:=0
    cognew(@loader,0)
    long[$7FFC]:=@DATEN

DAT ' Loader
            org     0

'#####################################################################################
'# Warten auf Startfreigabe
'#####################################################################################
loader
            rdlong  STATUS, STATUSADR
            cmp     STATUS, $0
      if_z  jmp     #loader

'#####################################################################################
'# Copy Dateinahmen
'#####################################################################################
            mov     TEMP0,  78                ' Datenblock
            mov     TEMP1,  @PATH1            ' Zeiger auf internen Datenblock
nexta
            rdlong  TEMP1,  STATUS
            add     TEMP1,  $1
            add     STATUS, $1
            djnz    TEMP0,  #nexta

'#####################################################################################
'# Alle anderen COG's Stoppen
'#####################################################################################
            mov     TEMP0,  0                 ' 8 COG's
            cogid   TEMP1                     ' eigene COG- ausschließen
nextb
            cmp     TEMP0,  TEMP1
      if_nz cogstop TEMP0
            djnz    TEMP0,  #nextb

'#####################################################################################
'# Bus init
'#####################################################################################
'  outa[18..8]     := 0          ' adresse a0..a10 auf 0 setzen
'  outa[busclk]    := 0          ' busclk startwert
            andn    outa,   CON00
'  outa[reg_ram1]  := 1          ' ram1 inaktiv
'  outa[reg_ram2]  := 1          ' ram2 inaktiv
'  outa[reg_prop1] := 1          ' prop1 inaktiv
'  outa[reg_prop2] := 1          ' prop2 inaktiv
'  outa[bus_wr]    := 1          ' schreiben inaktiv
            or      outa,   CON01
'  dira := db_in                 ' datenbus auf eingabe schalten  frida
            mov     dira,   DBIN
'  outa[reg_al]    := 1          ' obere adresse in adresslatch übernehmen  frida
            or      outa,   REG_AL
            nop
'  outa[reg_al]    := 0                                                    'frida
            andn    outa,   REG_AL

'#####################################################################################
'# Path1
'#####################################################################################
            call    #spath1

'#####################################################################################
'# Load1
'#####################################################################################

'#####################################################################################
'# Path2
'#####################################################################################
            call    #spath2

'#####################################################################################
'# Load2
'#####################################################################################

'#####################################################################################
'# Path3
'#####################################################################################
            call    #spath3

'#####################################################################################
'# Load3
'#####################################################################################

'#####################################################################################
'# Bus OFF
'#####################################################################################
'  dira := db_off                ' datenbus auf eingabe schalten
            mov     dira,   $0

'#####################################################################################
'# Rücksprung
'#####################################################################################
            jmp     #loader

'#####################################################################################
'# Subroutine: PATH1
'#####################################################################################
spath1
            nop
spath1_ret  ret

'#####################################################################################
'# Subroutine: PATH2
'#####################################################################################
spath2
            nop
spath2_ret  ret

'#####################################################################################
'# Subroutine: PATH3
'#####################################################################################
spath3
            nop
spath3_ret  ret

'#####################################################################################
'# Variabeln und Constanten
'#####################################################################################
STATUSADR   long  $0000_7FFC
STATUS      long  $0000_0000

TEMP0       long  $0000_0000
TEMP1       long  $0000_0000

'                           +------------------------- al
'                           |+------------------------ /prop2
'         hbeat   --------+ ||+----------------------- /prop1
'         clk     -------+| |||+---------------------- /ram2
'         /wr     ------+|| ||||+--------------------- /ram1
'         /hs     -----+||| |||||           +--------- a0..a10
'                      |||| |||||           |
'                      |||| |||||-----------+ -------- d0..d7
CON00       long  %00000010_00000011_11111111_00000000  ' A0-A10 bus_wr busclk
CON01       long  %00000100_00111100_00000000_00000000  ' MEM1/2 PROP1/2 bus_wr
DBIN        long  %00000111_11111111_11111111_00000000
REG_AL      long  %00000000_10000000_00000000_00000000

PATH1       res   13            ' Verzeichnis von wo geladen werden Soll
DATEI1      res   13

PATH2       res   13
DATEI2      res   13

PATH3       res   13
DATEI3      res   13
So ungefähr sollte das beginnen.
Zuletzt geändert von PIC18F2550 am Sa 31. Aug 2013, 23:36, insgesamt 3-mal geändert.
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
zille9
Beiträge: 399
Registriert: Do 4. Okt 2012, 21:56
Wohnort: Berlin

Re: heap größe

Beitrag von zille9 »

Guter Anfang :DAUMENHOCH . Allerdings ist diese Variante durch den fest vergebenen Dateinamen (in diesem Fall reg.dat) zu unflexibel.
Für Aufrufe aus einem Programm heraus müsste der Dateiname übergeben werden, sonst taugt der Loader nur für den Erststart.
Oder soll die Dateinamenübergabe nach dem gleichen Prinzip funktionieren?

DATEI
Byte "BOOT" ,0,0,0,0,0,0,0,0, 0 ' Path
Byte "xyz.bin" ,0,0,0,0,0, 0 ' Regnatix
Byte 0,0,0,0,0,0,0,0,0,0,0,0, 0 ' Bellatrix
Byte 0,0,0,0,0,0,0,0,0,0,0,0, 0 ' Administra

PUB main ' BOOT
long[$7FFC]:=0
cognew(@loader,0)
long[$7FFC]:=@DATEI
Computer lösen die Probleme, die man ohne sie gar nicht hätte!
Benutzeravatar
TuxFan
Beiträge: 1022
Registriert: So 6. Sep 2009, 11:18

Re: heap größe

Beitrag von TuxFan »

Moin moin!
Mal der Neugier halber, wird das der Lader für Dein Hive-Basic? Der ausgefeilte Code-Ansatz sieht mir ganz danach aus.
Gruß
TuxFan
Wunder gibt es immer wieder.......
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: heap größe

Beitrag von drohne235 »

PIC18F2550 hat geschrieben:Warum den Loder nicht mal in PASM?
Nur kurz zu den Überlegungen bzgl. TriOS: Natürlich haben mir auch schon die Finger gejuckt bei dem Gedanken an einen PASM-Loader, aber die Grundidee bei TriOS war für mich persönlich immer, soviel wie möglich in Spin zu programmieren, da das für einen Einsteiger am einfachsten zu verstehen ist. Das soll natürlich niemanden hindern eine Alternative zu programmieren! ;) In der Laderoutine von mental (enthalten in TriOS R56 hive-trios\system\regnatix\m.spin) wird mental schon von einem PASM-Loader geladen und gestartet.

Wenn der PASM-Loader funktioniert, warum nicht gleich einen PASM-Backbone für den Hive?
"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: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: heap größe

Beitrag von PIC18F2550 »

drohne235 hat geschrieben:Wenn der PASM-Loader funktioniert, warum nicht gleich einen PASM-Backbone für den Hive?
Nicht gleich übertreiben es hatt ja noch keiner mal meinen Loader aus 001 getestet.

@TuxFan Nein.

@zille9
Die daten sind frei wählbar.

Meine Vorstellung vom SD-Kartenaufbau:

/BOOT
/LIB
/PROG1
/PROG2
/PROG3

Ich habe mal 005 etwas Aktuallisiert.
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
zille9
Beiträge: 399
Registriert: Do 4. Okt 2012, 21:56
Wohnort: Berlin

Re: heap größe

Beitrag von zille9 »

PIC18F2550 hat geschrieben:
drohne235 hat geschrieben:Wenn der PASM-Loader funktioniert, warum nicht gleich einen PASM-Backbone für den Hive?
Nicht gleich übertreiben es hatt ja noch keiner mal meinen Loader aus 001 getestet.

Loader funktioniert bei Plexus nur bis zum Startbildschirm, das eigentliche Programm wird nicht geladen. :SCHREIEN
Computer lösen die Probleme, die man ohne sie gar nicht hätte!
Antworten