Atmel AVRs: SRAM so unwichtig?

Gast #2871291
Lesenswert?

Wollte mir gerade einen AVR mit viel SRAM aussuchen. Da hab ich doch 
ordentlich gestaunt: Bei der Tabelle nach Parametern auf der 
Atmel-Webseite ist die Grösse des SRAM nicht etwa an prominenter Stelle 
gelistet, sondern weit, weit hinten nach einer ganzen Menge an 
Peripherie usw. Die grösse des Flash hingegen steht gleich in der ersten 
Spalte.

Da frage ich mich: Ist die SRAM-Grösse eine solch unbedeutende 
Eigenschaft eines Mikrocontrollers? SRAM hatte ich bei vielen Projekten 
schon äusserst ausgereizt, Flash noch nie. Und die Peripherie reicht für 
sehr viele Anwendungen sowieso aus, und sonst holt man sich einen 
speziellen AVR.
#2871311
Lesenswert?

Ich könnte mir vorstellen, dass die Info weiter hinten steht, weil die 
Werte "schlecht" sind.

Man möchte vielleicht lieber die Dinge zeigen, die gut sind. Irgendwo 
mittendrin streut man dann die schlechten Eigenschaften ein. Das ist 
halt so beim Marketing. Die Leute werden sich schon was dabei gedacht 
haben. Vielleicht haben sie sogar Untersuchungen durchgeführt, bei 
welcher Reihenfolge der Infos eine Testperson das Teils am ehesten 
kaufen würde.
Gast #2871321
Lesenswert?

Stefan K. schrieb:
> Man möchte vielleicht lieber die Dinge zeigen, die gut sind. Irgendwo
> mittendrin streut man dann die schlechten Eigenschaften ein. Das ist
> halt so beim Marketing.

Wird wohl irgendwie so sein. Mich wundert halt trotzdem, dass das SRAM 
überhaupt so weit abrutschen kann. Für allgemeine Aufgaben ist es IMHO 
sogar die wichtigste Eigenschaft, noch vor der Flash-Grösse. Darum habe 
ich mal nachgefragt, ob evtl. der Grossteil der Community da völlig 
andere Anforderungen hat...?!?
Gast #2871377
Lesenswert?

-.- schrieb:
> Für allgemeine Aufgaben ist es IMHO
> sogar die wichtigste Eigenschaft, noch vor der Flash-Grösse.

Vor der Flashgröße ja - für allgemeine Aufgaben finde ich es jedoch 
nicht so wichtig. Für viele kleinere Projekte reichen 128Byte und 
weniger.
Gast #2871386
Lesenswert?

Komisch im Datenblatt vom Tiny13 steht auf der ersten Seite:
"- 64K Bytes Internal SRAM"
In Microcontrollern geht es auch ganz ohne wie z.B. Tiny11.
Den SRAM braucht's auch nur wenn man einen Stack benötigt, z.B. bei 
C-Programmierung, in Assembler braucht's nur die Register ...
Gast #2871492
Lesenswert?

>Den SRAM braucht's auch nur wenn man einen Stack benötigt, z.B. bei
>C-Programmierung, in Assembler braucht's nur die Register ...
Stack hat mit C nichts zu tun.
Ich kann genauso in Assembler einen Stack verwenden.

Und wenn ich in C die Funktion ohne Parameter aufrufe, wie man es in 
Assembler macht. Und auch nur globale Variablen oder Register benutze, 
wie man es in Assembler macht, dann brauch ich auch keinen Stack.
Gast #2871505
Lesenswert?

acryl schrieb:
>>Den SRAM braucht's auch nur wenn man einen Stack benötigt, z.B. bei
>>C-Programmierung, in Assembler braucht's nur die Register ...
> Stack hat mit C nichts zu tun.
> Ich kann genauso in Assembler einen Stack verwenden.
>
> Und wenn ich in C die Funktion ohne Parameter aufrufe, wie man es in
> Assembler macht. Und auch nur globale Variablen oder Register benutze,
> wie man es in Assembler macht, dann brauch ich auch keinen Stack.

Aha und warum meckert dann der GCC wenn ich sowas für einen Tiny11 
machen will ?
"main.c:1: error: MCU 'attiny11' supported for assembler only"
Gast #2871519
Lesenswert?

Hi

>Aha und warum meckert dann der GCC wenn ich sowas für einen Tiny11
>machen will ?
>"main.c:1: error: MCU 'attiny11' supported for assembler only"

Weil dein GCC nicht mit dem Hardwarestack des ATTiny11 nicht umgehen 
kann. Ohne Stack kann man auch in Assembler kein Unterprogramm oder 
Interrupt nutzen.

MfG Spess
#2871599
Lesenswert?

Joachim Drechsel schrieb:
> Ich war auch überrascht, mit dem ATTiny2313 zuerst an die Grenze
> des Flash zu kommen. Die RAM-Größe ist mit 128 Byte eigentlich
> unritisch.

Also bei mir ist das ähnlich. Der Flash war zuerst das Problem, weil 
viele Systemfunktionen einfach viel mehr Speicher gefressen haben als 
nötig. Insbesondere bei Arduino ist schon ein "leeres" Projekt bald 1/2 
bis 1 KB groß... ohne dass was passiert.

Mit dem RAM ist das so eine Sache. Ich habe mich damit abgefunden, dass 
einfach so wenig da ist und deswegen fallen einfach die Anwendungen 
Flach, die mehr RAM brauchen.
Zum Beispiel wenn ein Roboter eine Karte des Raumes aufbauen soll, in 
dem er sich bewegt... das passt da einfach nicht hinein.

Im Prinzip könnte man aber den SRAM des AVR als L1 Cache der CPU 
betrachten. Wenn man jetzt eine SD-Karte nimmt (z.B. 2 GB) und die als 
"RAM" oder "SWAP"-Speicher betrachtet, wird's interessant. Ja man muss 
wegen Begrenzung der Schreibzyklen sich noch einen Algorithmus 
überlegen, der dann Speicherzellen "umlagert" und immer wieder woanders 
hin schreibt... aber das is mal Nebensache.

Natürlich hat ein einfacher AVR keinerlei Unterstützung für SWAP oder 
externen RAM (der größer als 64KB ist), aber mit einem Trick könnte man 
einen Compiler bauen, der aus einem direktem Speicherzugriff einen 
entsprechenden Zugriff auf den virtuellen Speicher vornimmt.
Am besten würde man ein paar der Allzweckregister für diesen Zweck für 
den normalen Compiler sperren und dann alle ld/std-Befehle im Assembler 
durch entsprechenden Code ersetzen.

Damit kommt man natürlich noch schneller an die Grenzen der Flash-Größe. 
Aber... Wenn man jetzt noch den Programmcode auf die SD-Karte auslagert 
und interpretiert (z.B. sowas wie ne JavaVM bastelt), funktioniert auch 
das. Wenn man dann noch einige wichtige, größere Aktionen direkt nativ 
programmiert und im Flash-Speicher ablegt, könnte man bei ca. 1/3 bis 
1/4 der Taktrate von der Geschwindigkeit her landen. Oder aber auch 
nicht. Das würde extrem vom Programm (und vor allem dessen 
Speicherlokalität) abhängig sein. So wie's auf den normalen Desktop-PCs 
auch ist...

Nunja, es war auch nur ne Idee...
#2871659
Lesenswert?

-.- schrieb:
> Da frage ich mich: Ist die SRAM-Grösse eine solch unbedeutende
> Eigenschaft eines Mikrocontrollers? SRAM hatte ich bei vielen Projekten
> schon äusserst ausgereizt, Flash noch nie. Und die Peripherie reicht für
> sehr viele Anwendungen sowieso aus, und sonst holt man sich einen
> speziellen AVR.

Wenn Du viel RAM brauchst, nimm einfach eine andere Architektur. dsPICs 
gibts bis 96k, PIC32 bis 128k eingebaut, oder irgend ein Ärmchen mit 
externem Bus-Interface - da kannst Du dann gigabyteweise RAM anklemmen. 
Alles kein Problem.

fchk
Gast #2871703
Lesenswert?

Stefan K. schrieb:
> Zum Beispiel wenn ein Roboter eine Karte des Raumes aufbauen soll, in
> dem er sich bewegt... das passt da einfach nicht hinein.

Das wär für mich eher gerade die Herausforderung. So eine Karte sollte 
locker reinpassen.

Ganz naiv:
Ein Raum von 6m x 6m mit einer Auflösung von 10cm hat 3600 Datenpunkte. 
Die kriegt man in 450 Bytes untergebracht.

Aber es gibt bestimmt noch sehr viele Varianten, wie man die Datenmenge 
verkleinern könnte:

Man könnte die Karte sektorweise komprimieren.

Man könnte versuchen die Hindernisse zu größeren Objekten 
zusammenzufassen und dann deren Koordinaten speichern. Sozusagen statt 
einem Bitmap eine Vektorgrafik benutzen.

Man könnte einen Baum aufbauen, ähnlich wie es bei Raytracing gemacht 
wird:
Wenn ein Sektor Hindernisse enthält wird er in 4 weitere Untersektoren 
aufgeteilt so lange bis man eine ausreichende Auflösung erreicht hat. 
Wenn der Raum größtenteils leer ist spart man dadurch sehr viel 
Speicher.
#2871740
Lesenswert?

Peter Dannegger schrieb:
> Joachim Drechsel schrieb:
>> Ich war auch überrascht, mit dem ATTiny2313 zuerst an die Grenze
>> des Flash zu kommen. Die RAM-Größe ist mit 128 Byte eigentlich
>> unritisch.
>
> Ist auch meine Erfahrung.
> Der Flash geht deutlich eher aus, als der SRAM.
> Bzw. bei engem RAM hat man deutlich mehr Möglichkeiten zu optimieren,
> als bei zu wenig Flash.

Entspricht auch meinen Erfahrungen.

Zu Beginn der "Karriere" war schneller das RAM knapp. Irgendwann legt 
man dann auf die RAM-Belegung schon beim Planen/Entwickeln viel mehr 
Wert, so dass das i. d. R. kein Problem mehr ergibt. Teilweise stellt 
man auch Funktionen, welche wie sprintf einen Puffer benötigen auf 
"streaming" um. Diese brauchen dann keine Puffer, belegen aber u. U. 
mehr Platz im Flash.

Vermutlich wächst einfach mit der Zeit auch die Anzahl und die Größe der 
(allgemeinen) Funktionen, die man gerne mit ins Projekt aufnimmt.

Insofern: Für mich spielt die Größe des RAMs tatsächlich eine 
untergeordnete Rolle, Flash und die sonstige Peripherie sind wichtiger.
Persönliche Seite #2871887
Lesenswert?

loller schrieb:

> Aha und warum meckert dann der GCC wenn ich sowas für einen Tiny11
> machen will ?
> "main.c:1: error: MCU 'attiny11' supported for assembler only"

Weil avr-gcc diesen µC nicht unterstützt. Das sagen dir diese Meldung 
und auch die Dokumentation des Compilers.

Die Meldung bekommst du unabhängig vom Quelltext und z.B. auch für eine 
leere Quelldatei.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren