PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Stacks und Frame ?



PICture
07.12.2011, 18:03
Hallo!

Ich denke, dass der BASCOM-Compiler, wie üblich, die Grössen von "HW- und SW-Stack" und "Frame" selber ermittelt. Deshalb möchte ich Euch um praktische Hinweise bitten, weil ich alles ohne unnötiger "Forschung" gleich vom Anfang an richtig mit Spass programmieren möchte. Der Begriff "Frame" bei einem Compiler ist für mich ganz neu und somit unverständlich.

Meine Frage ist: wie werden die Grössen berechnet, falls es doch selber gemacht werden muss, um alle mögliche Überläufe im Programm sicher zu vermeinden ?

Falls es aber unmöglich ist, werde ich gerne meine Finger vom BASCOM weg lassen.

Ich bedanke mich herzlich für kurze und für mich, als BASCOM Anfänger, verständliche Hilfe im voraus. ;)

for_ro
07.12.2011, 18:22
Hallo PICture,
kurze Antwort wird bei dem Thema schwierig.
Wenn es um die AVR Controller geht ( nach deinem letzten Link zum BASCOM LT Manual bin ich da nicht mehr sicher), dann höchstens dies:
Bascom macht es nicht selber, du musst die richtigen Werte vorgeben.
Wie die zustande kommen ist in vielen Foren und in der Hilfe von Bascom erklärt. Siehe dazu die Stichworte
$HWStack, $SWStack, $FrameSize, $HWCHECK, $SoftCheck, $FrameCheck, , $DBG, STCheck

Alles hier noch mal zu erklären, wäre etwas viel. Wenn du gezielte Fragen hast, sollte es aber kein Problem sein, die zu beantworten.

PICture
07.12.2011, 18:42
Hallo for_ro,

ich habe auf deine Antwort schon üblicherweise gewartet und möchte ich mich bei dir für immer sehr schnelle, kompetente und klare Antwort bedanken. :)

Mir ist schon alles klar, weil ich BASCOM schon etwas "studiert" habe und werde keine Fragen mehr stellen. Für mich ist immer etwas einfacheres suchen, als bereits vorhanden, ganz normal. In dem Fall bleibe ich mit Spass in meiner problemloser PICerei. Ich habe eben keine Zeit (sprich: Lust) ein Taschenrechner für BASCOM zu sein. :lol:

Searcher
08.12.2011, 09:17
Hallo PICture,

wenn Deine Frage nicht schon erledigt wäre, hätte ich vorgeschlagen noch mal auf diese Seite (http://halvar.at/elektronik/kleiner_bascom_avr_kurs/) und speziell hier: http://halvar.at/elektronik/kleiner_bascom_avr_kurs/speicher_hwstack_swstack_frame/ nachzusehen.

Ansonsten gibt der Compiler Meldungen aus, wenn zu große Stackwerte eingetragen werden bzw wenn der SRAM durch zu viele/große Variablen gesprengt wird. Leider berechnet BASCOM die Werte nicht im voraus.

Die Meldungen des Compilers decken auch nicht alle Probleme ab, besonders nicht die, die zur Laufzeit auftreten können.

Für meine kleinen Anfängerprogramme auf kleinen µC haben mir die $xSTACK und FRAME Eintragungen die geringsten Probleme beschert.

Gruß
Searcher

PICture
08.12.2011, 14:36
Hallo Searcher!

Vielen Dank für deine wertfolle Hinweise. Ich gebe nicht so einfach auf, wie das aus meinem letzten Beitrag in diesem Thread aussieht. :)

Ich habe als ASMan auf BASCOM geschaut und ausser Frame scheint mir jetzt alles hoffentlich klar geworden, sonst bitte korriegieren.

HW Stack : dort werden immer 2-Byte Rücksprungsadressen für jede momentan gleichzeitig laufende SUB's und INT's ab - gelegt und geholt.

SW Stack : dort werden alle Variablen, je nach Typ, mit entsprechender Grösse von 1 bis 4 Byte plaziert.

Frame : leider dafür habe ich nichts für mich verständliches gefunden und muss ich Euch um einfache Erklärung bitten, da ich den Dialekt von Profiprogrammierer nicht verstehe. Ich vermute, dass es dort alle benutzte "labels"/Markenadressen (z.B. von Loop's) vom Programm abgelegt werden. :(

So wie die meisten Anfänger möchte ich immer möglichst genau wissen, falls möglich, was ich tue. ;)

for_ro
08.12.2011, 15:18
Hallo Searcher!

Vielen Dank für deine wertfolle Hinweise. Ich gebe nicht so einfach auf, wie das aus meinem letzten Beitrag in diesem Thread aussieht. :)
Und ich dachte, du wärst raus aus der Nummer. Hätte mich aber ehrlich gesagt auch gewundert.

Ich habe als ASMan auf BASCOM geschaut und ausser Frame scheint mir jetzt alles hoffentlich klar geworden, sonst bitte korriegieren.


HW Stack : dort werden immer 2-Byte Rücksprungsadressen für jede momentan gleichzeitig laufende SUB's und INT's ab - gelegt und geholt. Ja, und die Register, die Bascom bei einem Interrupt automatisch speichert.


SW Stack : dort werden alle Variablen, je nach Typ, mit entsprechender Grösse von 1 bis 4 Byte plaziert. Nein. Hier liegen nur die Adressen der Variablen, nicht deren Inhalte. Also alle übergebenen Parameter einer Sub und Funktion und die lokalen Variablen. Immer 2 Byte pro Adresse. Wenn du mit Double Typen arbeitest, liegen hier auch einige von Bascom genutzte Adressen.


Frame : leider dafür habe ich nichts für mich verständliches gefunden und muss ich Euch um einfache Erklärung bitten, da ich den Dialekt von Profiprogrammierer nicht verstehe. Ich vermute, dass es dort alle benutzte "labels"/Markenadressen (z.B. von Loop's) vom Programm abgelegt werden. :(Nein, hier liegen nun die Werte der Variablen, falls sie per ByVal in die Sub oder Funktion übergeben wurden und die Werte der lokalen Variablen. Strings können übrigens auch per ByVal übergeben werden. Bedarf also je nach Typ der Vairablen. Zusätzlich beansprucht Bascom von den angebenen Bytes noch 24 für Typ Konvertierungen, speziell zur Ausgabe per Print oder auf's LCD.


So wie die meisten Anfänger möchte ich immer möglichst genau wissen, falls möglich, was ich tue. ;)
Da du aber jede Menge Erfahrung in ASM hast, solltest du dir unbedingt den Simulator von Bascom ansehen. Gerade bei den Stack und Frame Sachen ist der sehr hilfreich. Dann kannst du noch die $DBG Direktive einschalten. Dadurch wird neben etwas Code auch der Stack und Frame mit den Buchstaben H, S und F vorbesetzt. So kannst du sehen, was schon alles beschrieben worden ist.

PICture
08.12.2011, 15:39
Hallo for_ro!

Du bist für mich ein Profi, zumindest wenn's um BASCOM geht. Jetzt ist mir wirklich alles volkommen klar und so schnell ... :p

Deshalb finde ich keine Wörter, die meine Dankbarkeit dir ausreichend aussprechen können. :D

Es ist klar, dass ich am Anfang mir jedes "Werkzeug" und seine Arbeitsweise genau anschauen muss, um nix zu beschädigen. Ich mag zwar keine Simulationen, aber als "Werkzeug" für "Werkzeugforschung" finde ich es optimal.

PicNick
09.12.2011, 08:53
Die Sache hier ist zwar "erledigt", möchte trotzdem nochmals auf diese Informationen hinweisen:

http://www.rn-wissen.de/index.php/Bascom_Inside

PICture
09.12.2011, 17:10
Hallo!

Es ist bei mir noch lange nix erledigt und danke für deinen Link, den nicht nur ich brauchen könnte. :)