PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anzahl der byvals in Sub routine limitiert?



Space Teddy
08.01.2006, 11:16
Hallo Leute,

Zur zeit benutze ich folgende Statements um eine Sub routine aufzurufen.




Declare Sub Spi_write(byval Spi_instr As Byte , Byval Spi_bytes As Byte, byval CS as byte, byval spi_echo as byte)

Sub Spi_write(byval Spi_instr As Byte , Byval Spi_bytes As Byte, byval CS as byte, byval spi_echo as byte)
...
end sub

call Spi_write(&h40, 1,0,0)
...


jetzt habe ich festgestellt, das im Simutator falsche Werte als "Local variable" angezeigt werden, wenn die Anzahl der byval's > 2 wird.
Verwende ich nur 2 parameter, funzt alles ohne Probleme.

Ist das eine immer so und ich mache einen Fehler, oder ein Fehler in bascom? In der docu, ist nicht bezüglich Limitierung beschrieben.

Vielen Dank

mfg

PicNick
08.01.2006, 11:19
Schau dir mal
$HWSTACK =
$SWSTACK =
$FRAMESIZE =
an. Die Defaultwerte sind etwas mickrig. (Help dazu lesen)

Space Teddy
08.01.2006, 11:38
OK, diese stehen auf default. :-)

$HWSTACK =32
$SWSTACK =8
$FRAMESIZE =24

benutze einen Mega8

leider steht in der bascom docu nicht viel dazu. Stehen dei max werte in der atmel spec?

danke

PicNick
08.01.2006, 11:43
Das ist weniger Atmel als Bascom.
However, probier einfach
$HWSTACK = 48
$SWSTACK = 64 ' besonders das ist wichtig
$FRAMESIZE =24

Space Teddy
08.01.2006, 11:45
hallo Picknick,

danke für deine super schnelle Antwort.
Ich habe den SW stack von 8 auf 12 erhöht und es klappt nun so wie gewollt.

Aber.. was machtr der SW stack eigentlich genau?

vielen Dank

PicNick
08.01.2006, 11:49
Guckst du da, hab ich ein paar Sachen zusammengeschrieben
https://www.roboternetz.de/wissen/index.php/Bascom_Inside

Space Teddy
08.01.2006, 11:57
perfekt,

das hilft mit beim lernen auf alle Fälle weiter.
toll, das du das alles zusammengetragen hast.

cu

oe9vfj
08.01.2006, 21:17
Neben den bereits erwähnten Punkten wie FrameSize und Softstack-Größe gibt es noch das Limit, dass die Anzahl der LOCALen Variablen, Parameter und Rückgabewert in Summe maximal 32 sein darf.

Innerhalb einer SUB oder FUNCTION werden die oben erwähnten LOCAL, Parameter und Funktions-Rückgabe über den SoftStack (Y-Pointer) adressiert. Die Adressen werden über die ASM-Statements Y+0 ... Y+63 angesprochen. Für jede Adresse werden 2 Pointer (Y+0, Y+1) benötigt, daher 64/2 = 32 Adressen.