heap größe
- PIC18F2550
- Beiträge: 2836
- Registriert: Fr 30. Sep 2011, 13:08
heap größe
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.
Also schnell mal umgeschrieben jetzt ist er ( 1F3Eh long = 31988 Bytes).
Da hatten eigendlich nur 7 Bytes gefehlt.
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
Der vorgesehene heap im EEprom war zu klein ( 1F12l ong = 31816 Bytes.
Also schnell mal umgeschrieben jetzt ist er ( 1F3Eh long = 31988 Bytes).
Da hatten eigendlich nur 7 Bytes gefehlt.
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
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
- PIC18F2550
- Beiträge: 2836
- Registriert: Fr 30. Sep 2011, 13:08
Re: heap größe
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.
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.
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
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
Re: heap größe
Übergib doch den (oder die) Dateinamen im E-RamPIC18F2550 hat geschrieben:Im letzten long des hRAM's in den unteren 16Bit wird ein Zeiger auf den Namen des zu Ladenden Image übergeben.
Computer lösen die Probleme, die man ohne sie gar nicht hätte!
- PIC18F2550
- Beiträge: 2836
- Registriert: Fr 30. Sep 2011, 13:08
Re: heap größe
Da muß ich noch mehr routinen hineinpacken.zille9 hat geschrieben:Übergib doch den (oder die) Dateinamen im E-Ram
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
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
- PIC18F2550
- Beiträge: 2836
- Registriert: Fr 30. Sep 2011, 13:08
Re: heap größe
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
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
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
Re: heap größe
Guter Anfang . 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
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!
Re: heap größe
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
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.......
- drohne235
- Administrator
- Beiträge: 2284
- Registriert: So 24. Mai 2009, 10:35
- Wohnort: Lutherstadt Wittenberg
- Kontaktdaten:
Re: heap größe
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.PIC18F2550 hat geschrieben:Warum den Loder nicht mal in PASM?
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
- PIC18F2550
- Beiträge: 2836
- Registriert: Fr 30. Sep 2011, 13:08
Re: heap größe
Nicht gleich übertreiben es hatt ja noch keiner mal meinen Loader aus 001 getestet.drohne235 hat geschrieben:Wenn der PASM-Loader funktioniert, warum nicht gleich einen PASM-Backbone für den Hive?
@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
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
Re: heap größe
Nicht gleich übertreiben es hatt ja noch keiner mal meinen Loader aus 001 getestet.PIC18F2550 hat geschrieben:drohne235 hat geschrieben:Wenn der PASM-Loader funktioniert, warum nicht gleich einen PASM-Backbone für den Hive?
Loader funktioniert bei Plexus nur bis zum Startbildschirm, das eigentliche Programm wird nicht geladen.
Computer lösen die Probleme, die man ohne sie gar nicht hätte!