PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : STACK Problem mit BasCom ATMega32



Chris266
18.04.2005, 08:09
Hallo zusammen,

wer kann mit Hilfen oder Tips geben:

Mein Programm funktioniert tadellos solange kein Interrupt aufgerufen wird. Es handelt sich dabei um INT0 (ich glaube PIN PD2).

Die Interruptroutine wird angesprungen, dann aber wird vermutlich ein Stacküberlauf produziert: anschließend haben einige globale Variablen einen seltsamen Inhalt -> wird wohl überschrieben.

Habe mit $HWStack schon experimentiert. "Stcheck" blick ich nicht ganz.
Wie kann ich überprüfen wie ich $HWStack, $SWStack und $Frame richtig setzen muss?

Gibt es ein Beispiel dazu wie ich ermitteln kann wie ich die Konstanten setzen muss? Die Onlinehilfe zu BASCOM hilft mir nicht richtig weiter.

Danke!

PicNick
18.04.2005, 08:24
Ich habe ein ziemliches Programm-Monster. Die Werte sind geschätzt (wahrscheinlich zu groß), aber ich hab keine Probleme

Stacksize=128 HW
Framesize=16 Frame
Sstack=256 Soft

versuch's mal damit, bis dir einer bessere Zahlen liefert.

Werner_Just
18.04.2005, 10:00
Hallo.


Stacksize=128 HW
Framesize=16 Frame
Sstack=256 Soft

Warum werden eigentlich 2 Stacks verwendet?
Und wichtiger, wann wird welcher verwendet.

Bei Framesize herrscht bei mir völlige Dunkelheit was das Wissen um die Funktion angeht. Was sind Frames und wofür werden sie verwendet?

Kann jemand Licht ins Dunkel bringen?

Ciao,
Werner

PicNick
18.04.2005, 10:28
Die Sache mit dem Stack ist prinzipiell schon klar ?
bei jedem "CALL" oder interrupt wird der Stackpointer dekrementiert und die return-addresse reingeschrieben (PUSH). Bei return holt er sich das und inkrementiert den stackpointer wieder (POP)
Das wär mal der HW-Stack.
Den Soft-Stack braucht der Bascom, um "local" daten wo hinzuschreiben und für einen Call die Parameter abzulegen. Sonst funktioniert das Ähnlich.
FRAME braucht er temporär für div. daten-konversionen.

Also je Call und interrupt, desto HW-Stack
je call-parameter und local data, desto SW-Stack
je string<->binär conversion, desto Frame

logo ?

Werner_Just
18.04.2005, 10:37
Hallo PicNick,

> Also je Call und interrupt, desto HW-Stack
> je call-parameter und local data, desto SW-Stack
> je string<->binär conversion, desto Frame

Thanks!

Ciao,
Werner

Steht das irgendwo in der BASCOM Help und ich war nur zu blöd zum finden?

PicNick
18.04.2005, 10:45
Steht das irgendwo in der BASCOM Help und ich war nur zu blöd zum finden?
:mrgreen: Schon. Aber ich hätt das SO nicht gesagt :mrgreen:

(mach dir nix draus, es ist übungssache das zu finden, was man sucht)

Werner_Just
18.04.2005, 11:25
Hallo PicNick,

> es ist übungssache das zu finden,
leider wahr!

'Options Compiler Chip' und keinerlei Link bei $Framesize, $HWStacksize ... grummel
Search IDE, IDE Options, wie im Text erwähnt -> auch kein Result in Options Comp... :^o

'Übungssache' trifft das Auffinden von Informationen in der BASCOM Help wohl am besten ;)

Ciao,
Werner

PicNick
18.04.2005, 11:36
Ich hab bei "Help" mal alles angeschaut, was mit "ST" beginnt und irgendwie nach Stack klingt. Bin dann auf "STCHECK" gestoßen.
Allerdings lese ich gerne, oft und wiederholt Dinge nach, auch wenn sie mir klar scheinen und ich sie mir garnicht merke. Aber dadurch kriegt man "Hyperlinks" im Hinterkopf zusammen ("da war doch was")