Forum: Mikrocontroller und Digitale Elektronik Speicher zu klein?


von Max (Gast)


Lesenswert?

Hi ich hab da den Verdacht das mir der RAM zu klein wird, da ab jetzt 
mein Programm nicht mehr ganz korrekt läuft wenn ich mir neue Variablen 
oder aufwendige Funktionen hinzufüge.

Ich benutze ein 64K * 16 SRAM, aber aufgrund der Decodierung verwenden 
ich nur 2K vom RAM. Jetzt die Frage wie viel sind 2K im Verhältnis? Ist 
das in den meisten Fällen mehr als genug oder kanns da schon mal schnell 
passieren dass der Speicher voll wird und das Programm verückt spielt??

mfg Max

von Falk B. (falk)


Lesenswert?

Lies mal was über Netiquette, dann sollte dir klar werden, daß da 
ein "paar" Informationen fehlen.

von Marcel P. (Gast)


Lesenswert?

Ich hab den Verdacht, das der meiste Teil der Informationen nicht mehr 
in den Speicher gepasst hat XD

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Max schrieb:
> Ist das in den meisten Fällen mehr als genug oder kanns da schon mal
> schnell passieren dass der Speicher voll wird und das Programm verückt
> spielt??
Ja. Sowohl als auch!
Genaueres kann man mit den gegebenen Informationen nicht sagen.

von Pandur S. (jetztnicht)


Lesenswert?

Es genuegt, wenn eine Variable nicht passt. Der Compiler schaut 
allerding ob die statischen Variablem passen.
Lass mich raten :

- Stack war nie ein Thema, es werden mehrere Verschachtelungen 
aufgerufen
- Es werden Funktionen mit grosszuegigen Variablenuebergaben aufgerufen
- Du hast dynamische Variablen auf dem Heap.


Ich persoenlich vermeide das Letztere, sowas gibt es bei mir nicht.

von Max (Gast)


Lesenswert?

Sry dachte auf dei Frage ob 2K * 16 viel Speicher sind braucht man nicht 
mehr Infos.

Ich verwenden einen Intel 80C196 Typ-KC mit 20 MHz mit einem Tasking 
Compiler V6. Ich programmiere in der Tasking EDE.
Mit dabei ist auch ein VPC3+C (Profibus ASIC) mit einem Programm der von 
Profichip (enthält einiges an dynamischer Speicherverwaltung müsst aber 
alles über den eigenen RAM des VPCs gehen).

Wenn noch was an Infos abgeht bitte nachfragen.

mfg Max

von Max (Gast)


Lesenswert?

Meine Funktionen sind eigentlich nicht wirklich Verschachtelt und 
Übergabeparameter habe ich eigentlich auch kaum welche.

Wie es mit der Verschachtelung in der VPC-Software aussieht kann ich 
nicht wirklich was darüber sagen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Max schrieb:
> Ich verwenden einen Intel 80C196 Typ-KC mit 20 MHz mit einem Tasking
> Compiler V6. Ich programmiere in der Tasking EDE.
Da sind 2K Speicher nicht viel. Egal jetzt, ob es 2K Worte oder 2K Bytes 
sind.

Was sagt dir der Mapper Report des Linkers?
Was ist mit dem restlichen RAM? Warum kommst du da nicht ran?

von Pete K. (pete77)


Lesenswert?

Max schrieb:
> wenn ich mir neue Variablen
> oder aufwendige Funktionen hinzufüge.

Du hast Dir Deine Frage doch schon selbst beantwortet.

von Thomas E. (picalic)


Lesenswert?

Wie sieht denn die Schaltung aus? Hast Du die unbenutzten Adressbits des 
SRAMs vielleicht einfach nicht angeschlossen?

von Max (Gast)


Lesenswert?

Lothar M. schrieb:
> Was sagt dir der Mapper Report des Linkers?

Wo finde ich den?

> Was ist mit dem restlichen RAM? Warum kommst du da nicht ran?

Ist eine etwas ältere Platine die immer mehr gewachsen ist und da nie 
mehr RAM gebraucht wurde hat man es dabei gelassen.


Thomas E. schrieb:
> Wie sieht denn die Schaltung aus? Hast Du die unbenutzten
> Adressbits des
> SRAMs vielleicht einfach nicht angeschlossen?

Es sind 5 Addressleitungen des RAMs fix auf GND geschlossen.

-------------------------------------------------------------
Also müsste es wieder besser Funktionieren wenn ich die Decodierung 
Ändere und dem RAM ein oder zwei Adressleitungen mehr gönne?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Max schrieb:
> Also müsste es wieder besser Funktionieren wenn ich die Decodierung
> Ändere und dem RAM ein oder zwei Adressleitungen mehr gönne?
Im Prinzip ja, aber nur, wenn der Linker damit was anfangen kann...

von Max (Gast)


Lesenswert?

Lothar M. schrieb:
> Max schrieb:
>> Also müsste es wieder besser Funktionieren wenn ich die Decodierung
>> Ändere und dem RAM ein oder zwei Adressleitungen mehr gönne?
> Im Prinzip ja, aber nur, wenn der Linker damit was anfangen kann...

Ich kann ja meine RAM und ROM Bereiche im Linker einstellen.

von Max (Gast)


Lesenswert?

Ich setz mich dann mal zur Decodierung und hoffe dass es dann 
Funktioniert.

Danke für eure Hilfe

mfg Max

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Max schrieb:
> Ich kann ja meine RAM und ROM Bereiche im Linker einstellen.
Und dann lies gleich noch in der Doku zum Linker wie du ihm den 
Map-Report herauskitzeln kanst...

von Peter D. (peda)


Lesenswert?

Max schrieb:
> Jetzt die Frage wie viel sind 2K im Verhältnis?

Im Verhältnis zu was?

Der eine Programmierer bastelt mit den 256Byte des 80C52 super komplexe 
Anwendungen, der andere meckert, wenn er "nur" 64kByte bekommt.

Meistens muß man nicht alles in double oder long long rechnen und kann 
benötigte Arraygrößen recht genau bestimmen. Auch globale Variablen 
braucht man nur selten.

von Pandur S. (jetztnicht)


Lesenswert?

> Auch globale Variablen braucht man nur selten.

Ich verwend ausschliesslich globale Variablen, allerdings nur mit 
definiert lokalisiertem Zugriff.

von Max (Gast)


Lesenswert?

Ich verwende im Programm leider schon sehr viele Globale Variablen, aber 
ich wüsste auch nicht wie ich es sonst machen sollte. :)

von Falk B. (falk)


Lesenswert?

@ Max (Gast)

>Ich verwende im Programm leider schon sehr viele Globale Variablen, aber
>ich wüsste auch nicht wie ich es sonst machen sollte. :)

So wie der Rest der Welt? So wenig wie möglich globale Variablen, so 
viel wie möglich lokale Variablen und Funktionsparameter.

von Pandur S. (jetztnicht)


Lesenswert?

> So wie der Rest der Welt? So wenig wie möglich globale Variablen, so
viel wie möglich lokale Variablen und Funktionsparameter.


Nee, das waer dann ja alles auf dem Stack. Die besagte Regel gilt fuer 
PC Programme.

von Falk B. (falk)


Lesenswert?

@  Oh Doch (jetztnicht)

>> So wie der Rest der Welt? So wenig wie möglich globale Variablen, so
>viel wie möglich lokale Variablen und Funktionsparameter.

>Nee, das waer dann ja alles auf dem Stack.

Nö. Nur in dem Moment, wenn Funktionen arbeiten.

>Die besagte Regel gilt fuer PC Programme.

Nö, das gilt, wenn gleich in etwas angepasster Form, auch für uCs.

von M. K. (sylaina)


Lesenswert?

Oh D. schrieb:
> Ich verwend ausschliesslich globale Variablen, allerdings nur mit
> definiert lokalisiertem Zugriff.

Das glaube ich, ehrlich gesagt, nicht.

Wie Falk schon schrieb sollte man allgemein auch auf µCs so wenig wie 
möglich globale Variablen benutzen und das ist eigentlich auch immer 
möglich. Ausnahmen bestätigen die Regel ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.