PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : BASCOM AVR



runner02
30.11.2010, 21:06
Hallo an alle,

habe mir das BASCOM AVR runtergeladen...

Zuerrst habe ich ein hallowelt Programm geschrieben und die Simulation gestartet. Die Simulation lief an. Es tat sich aber nichts.

Naja, dann habe ich den Code verbessert. Und jetzt lässt sich die Simulation gar nicht mehr starten, er schreibt immer:
"Out of SRAM space"

Anfangs habe ich $hwstack = 100
$swstack = 100
benutzt, dann sogar 300 und 3000, er schrieb immer die selbe Meldung...


Hoffe da kann mir jemand wieder mal weiterhelfen...

Mfg

for_ro
30.11.2010, 22:25
Die Meldung besagt, dass deine Variablen nicht mehr in das SRAM des µC passen.
hwstack und swstack liegen auch im SRAM. Wenn du die Werte also größer machst, wird es nur noch schlimmer.
Welchen Controller hast du denn und wie sieht dein programm aus?

runner02
01.12.2010, 10:24
Ich benutze einen Attiny 13.

Und für so ein kurzes Programm müsste das doch reichen... Ich habe ihn ja auch in C schon programmiert.


Das Programm ist sehr kurz, ein Hallo-Welt Programm eben.
Ich habe das auf dem anderen Computer, poste das hier später.

Jaecko
01.12.2010, 10:42
Der Tiny13 hat nur 64 Byte RAM...
Also HWStack + SoftStack + Variablen sollten da darunter liegen.

Dass es in C funktioniert liegt daran, dass C nicht dieses seltsame Konstrukt mit HWStack, Softstack, Framesize hat; diese Bascom-Erfindung ist etwas unglücklich aufgebaut. In C gibts nur den normalen Stack und der ist so gross, wie er auch wirklich sein kann.
Die Werte in Bascom werden auch ohne Bedarf einfach reserviert.

runner02
01.12.2010, 11:14
$regfile = "Attiny13.dat"
$crystal = 100000
$hwstack = 100
$swstack = 100

Ddrb = &B00001111

Do

Portb.0 = 1

Waitms 500

Portb.0 = 0

Waitms 500

Loop

End

So, hier ist der Code...


In C gibts nur den normalen Stack und der ist so gross, wie er auch wirklich sein kann.
Und in BASCOM muss man immer nachrechnen, wie viel man braucht??

Jaecko
01.12.2010, 11:36
In C gibts nur den normalen Stack und der ist so gross, wie er auch wirklich sein kann.
Und in BASCOM muss man immer nachrechnen, wie viel man braucht??

So quasi. Das wär das genaueste. Eine grobe Abschätzung reicht aber.
Hier:
http://halvar.at/elektronik/kleiner_bascom_avr_kurs/speicher_hwstack_swstack_frame/
ist ne Beschreibung der Angaben; da wird für nen ATTiny13 z.B. angegeben:
$hwstack = 32
$swstack = 5
$framesize = 20

Bleiben dir noch 7 Bytes für Variablen. Aber HW-Stack kann man z.B. runterdrehen.

for_ro
01.12.2010, 13:00
Hallo runner02,
BASCOM reserviert Speicherplatz für verschiedene Zwecke.
HwStack: Register Backup beim Interrupt, Rücksprungadressen
SwStack: Adressen von Funktionsparametern
Frame: Werte der Funktionsparameter, Typkonvertierungen

Im Moment bräuchtest du überhaupt keinen Stack, da du weder Interrupts noch Funktionen oder Subs noch Prints oder LCD Befehle benutzt.

runner02
02.12.2010, 11:18
Ah danke, dann werde ich es mal wie folgt versuchen:

$swstack = 5
$framesize = 20

hwstack lasse ich dann aus, weil ich keine Interrupts etc. brauche...

Ich muss sagen, dass ist in C schon unvergleichlich konfortabler...
Sind die BASCOM-Programmierer nicht auf die Idee gekommen?

Jaecko
02.12.2010, 12:08
Auslassen würd ich den Wert nicht, da er irgendwo in den Projekteinstellungen auch noch steht. Fehlt die Angabe im Quellcode, wird einfach dieser Wert verwendet. Also wenn du keinen brauchst, explizit auf 0 setzen.

Dass das in Bascom so "kompliziert" ist, ist glaub ich einer der Nachteile, den man sich über die sonstige Einfachheit von Bascom einhandelt...

for_ro
02.12.2010, 12:39
Ich muss sagen, dass ist in C schon unvergleichlich konfortabler...
Sind die BASCOM-Programmierer nicht auf die Idee gekommen?
Auf der MCS Seite wird dies in den Foren seitenlang diskutiert. Mark Alberts hat auch einige Erklärungen dazu abgegeben.

Die Sache an sich wird - wie vieles - total überbewertet. Das Problem tritt bei jedem - und ich meine wirklich bei jedem - Bascom User irgendwann einmal auf. Dann versteht man den Zusammenhang und von da ab stehen die Werte immer im Programm und sind groß genug, dass nichts passiert.
Problematisch sind dann in der Regel nur die winzigen Tinys, bei denen man recht schnell den "Out of SRAM" Fehler bekommt.

Ich gehe davon aus, dass eine ähnliche Art der Speicherung dieser Werte (Rücksprüngadressen, Adressen und Werte von Parametern usw.) in C auch benutzt wird. Nur ist der Platz dafür nicht im vorherein festgelegt. Wenn dann eine Überschreitung passiert, wird dies auch zu Problemen führen.
Daher weiß ich nicht, ob das in C "komfortabler" ist.

Richard
02.12.2010, 12:53
In C gibts nur den normalen Stack und der ist so gross, wie er auch wirklich sein kann.
Und in BASCOM muss man immer nachrechnen, wie viel man braucht??



Bascom/Tools/Stack Analyser......

Gruß Richard