PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : zu viel für Mega 32?



Baby2b
28.10.2006, 08:47
Hallo,
ich bin noch nicht lange dabei beim Roboten. aber langsam werden meine Programme immer länger und jetzt krieg ich Probleme. Ich arbeite derzeit an einem Programm in dem ich 23 Variabeln habe. 15 singles, 3 Strings, 2Subs 2 Arrays u. 1 Funktion. dann kommen auch noch einige Gotos dazu. Das Programm ist langsam gewachsen und funktionierte anfänglich ganz gut. Mehr Variabeln und Gotos reingepackt und es wurde instabil.
Kann es sein das das für mein RN-Control mit Mega 32 zu viel ist? Beim Flashen sagt Bascom mir das ich nur 24% brauche. Aber ich denke ich verstehe die Grundlagen nicht richtig. HWStack, SW Stack, Framesize kapier ich nicht. Hab alles gelesen was es drüber gibt, aber nicht verstanden. Kanns mir jemand erklären ? Kann ich diese Werte beliebig einstellen? Und wie stellt man Sie richtig ein?
Kann ich mein Problem lösen wenn ich mir ein Mega 128 hole??

Bin hier an einem Punkt wo ich nicht mehr weiter weis und wäre Euch für Hilfe echt dankbar.


Gruß

Andreas

linux_80
28.10.2006, 09:32
Hallo,
scheint Du bist zumindest an die Grenzen des SRAMs gestossen,
der M32 hat 2KB also 2048 Byte zur Verfügung, in dieses müssen die ganzen Stacks und deine Variablen reinpassen, evtl. kannst Du das nachrechnen wie viel Platz deine Variablen alle zusammen brauchen, und ob dann noch etwas für den Stack überbleibt.
Der Stack wird bei Funktions- und Interruptaufrufen genutzt.

Der M128 hat zwar 4KB SRAM, die müssen aber auch effektiv genutzt werden damit es nicht eng wird.

Baby2b
28.10.2006, 12:37
......das ist ja schon mal ein Hinweis. O.K. Für die Variabel kann ich die Bytes wohl nachrechnen, da hatte ich was gelesen...das finde ich wieder. Aber wie berechne ich die Stacks. Geth's hier nur um HW- und SW-Stack oder gibts da noch mehr? ........und was hat es mit diesem" Framesize" auf sich?

PicNick
28.10.2006, 12:47
Den für Variablen verbratenen SRAM findest du in der "*.RPT" File.

Und mit den Stacks ist das etwa so:
https://www.roboternetz.de/wissen/index.php/Bascom_Inside#Stacks_.26_Frame

Baby2b
28.10.2006, 16:20
O.K den Lesestoff über über die Stacks muß ich erst mal verdauen.......Der Tip mit dem .RPT File auch gut. Hilft mir aber nicht auf Anhieb. Hab ihn mir angesehen. Lauter infos. Meine Variabeln habe ich auch wiedergefunden und auch was über Stacksize, Framesize und vieles mehr. Ist aber alles in Hex oder Dec angegeben. Welches davon ist die Info die ich suche und wie muß ich sie interpretieren??

Da steht auch was von Warnings, aber überall steht "Not used" Wie kann ich die den "Usen"? Kann man das irgendwo anschalten?

Gruß

Andreas

PS: .....hilft es wenn Ihr Euch mein Programm mal anseht???? ...ist aber ziemlich lang!

PicNick
28.10.2006, 16:57
In der .RPT file stehen deine Variable mit ihrer adresse dezimal und hexadezimal.
Verwendet wird als adresse letze Variable + die Länge der variablen .
Davon darfst du dez'96' abziehen
Das ist der verbratene SRAM-Bereich.
Beim Mega32 hast du 2048 Byte SRAM
Also kanst du ausrechen, was übrig ist für die Stacks.
HWstack sollte bei Interrupts nicht weniger als ~48 sein
SWstack kommts eben wirklich ganz auf's programm an, wie viele Argumente du bei den Subs und Functions hast.

Baby2b
28.10.2006, 20:25
O.K. Bei der letzten Variablen steht bei mir 368 (Dec) davon 96 abziehen sind 272. Also noch jede Menge SRAM übrig oder? Das kann also nicht mein Problem sein (schade eigentlich). Sollte ich mit HW-und SW-Stack experimentieren? Darf ich die so groß machen wie ich will, also bis alles zusammen 2048 Byte SRAM hat ????

Gruß

Andreas

PicNick
29.10.2006, 08:08
Zu groß können sie nicht sein.

Gento
29.10.2006, 10:39
ich benutze mehr Variablen und 75 % Flash , läuft ohne Probleme.

Die Stack's kannst Du Testweise ruhig auf 256 erhöhen.

Was RICHTIG Zeit kostet sind ständige LCD ausgaben.

Gento

E-Fan
29.10.2006, 12:35
@Baby2b:
Lass Dich nicht vom verbrauchten Flash irritieren.
Flash und Arbeitsspeicher sind zwei paar Schuhe und ein größerer µC wird auch nichts helfen wenn Du der Fehlerursache nicht auf den Grund gehst. ;)
Ich denk auch das die Instabilität von einem Stacküberlauf herrührt.
Mit meinem Wissenstand hab ich auch so meine Probleme was die Größe des Stacks anbelangt weshalb ich (zumindest bei den kleinen Controllern) immer dazu neige die verbliebenden freien SRAM dem Stack zuzuordnen. Im Simulator von Bascom wird ein Stacküberlauf auch angezeigt. Dazu muss man aber genau hinschauen weil die Anzeige nur kurz erscheint.

Baby2b
29.10.2006, 16:10
Hey Leute,

vielen Dank Euch allen. Das Problem ist gelöst. Es war der HW-Stack. Jetzt läuft das Programm absolut stabil. Ich hab viel dazugelernt und ohne Eure tips und Hilfe wär das bestimmt anders ausgegangen.

Danke und Gruß

Andreas

m_herr
03.11.2006, 22:15
was hast du nun für werte für die stacks gewählt?

Baby2b
05.11.2006, 16:13
HW-Stack von 32 auf 200 erhöht. Damit gehts problemlos!

Gruß Andreas