Pages: [1]   Go Down
Author Topic: Serial Klasse und der RAM Speicher  (Read 757 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 37
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Moin !

Ich bin recht frisch in der Arduino Welt, aber dennoch schon soweit das ich mit dem Code einigermassen klar komme (habe vorher Bascom genutzt) und ich habe auch schon mein eigenes Board an Arduino angepasst (Pollin NetIO).
Ich bin gerade dabei mir eine kleine Wetterstation zu bauen. Und bin gerade dabei ein kleines Setup über die serielle Schnittstelle zu erstellen. Mit Schrecken muss ich feststellen das alleine die Zeile Serial.begin(57600); schlappe 350 Byte RAM Nutzung mehr bedeutet. Nun habe ich einen 644P mit 4KB, aber dennoch finde ich das recht happig.

Für was braucht Serial so viel RAM? Und kann man das evtl. irgendwie reduzieren? Hält Serial einen 300 Byte großen Buffer vor?

Grüße Dominik
Logged

Grüße Dominik
www.logview.info

Hamburg, Germany
Offline Offline
Sr. Member
****
Karma: 5
Posts: 291
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Du kannst ja den Serial manuell in C bzw. die Atmel-Register programmieren. Dann reduziert sich das erheblich.
Logged


Offline Offline
Newbie
*
Karma: 1
Posts: 37
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Moin !

Quote
Du kannst ja den Serial manuell in C bzw. die Atmel-Register programmieren
Nö, kann ich nicht  smiley-wink

Wollte ja nur verstehen warum da so viel RAM verbraten wird.

Grüße Dominik
Logged

Grüße Dominik
www.logview.info

Germany S-H
Offline Offline
Edison Member
*
Karma: 117
Posts: 2450
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Für was braucht Serial so viel RAM? Und kann man das evtl. irgendwie reduzieren? Hält Serial einen 300 Byte großen Buffer vor?

Nö. Soweit mir bekannt ist, hält Serial einen 64 Byte großen Empfangspuffer und einen 64 Byte großen Sendepuffer vor. Macht 128 Byte.

Der restliche Speicherverbrauch dürfte dann dadurch zustande kommen, dass mit dem Serial-Objekt ja auch diverse Library-Funktionen mit eingebunden werden, und der RAM-Verbrauch der eingebundenen Library-Funktionen ist dann gleich mit im Programm drin.

Das ist nichts anderes, wenn Du eine float Zahl im Programm verwendest und eine Fliesskomma Operation im Programm ausführt, das schlägt auch gleich heftig zu Buche. Oder wenn Du eine Formatierung mit sprintf in Deinem Programm verwendest.

Falls Du keine 64 Byte großen Sende- und Empfangspuffer in Deinem Programm benötigst, kannst Du die Arduino-Software entsprechend verbiegen, dass sie kleinere Puffer verwendet. Ich glaube bis herunter zu Puffergröße 1 wäre es machbar, ohne dass es gleich knallt. So könntest Du dann bis zu 126 Bytes wieder zurückgewinnen. Wobei mit einer Puffergröße von 1 dann natürlich Datenverluste durch Pufferüberläufe schon praktisch vorprogrammiert sind.
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 37
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke für die Erklärung jurs!

Werde mal schauen wie weit der Speicher noch ansteigt - vor allem wenn ich das Netzwerk mit dazu nehme.
ggf. muss ich dann wirklich den Buffer etwas runter setzen.

Grüße Dominik
Logged

Grüße Dominik
www.logview.info

Germany S-H
Offline Offline
Edison Member
*
Karma: 117
Posts: 2450
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Werde mal schauen wie weit der Speicher noch ansteigt - vor allem wenn ich das Netzwerk mit dazu nehme.
ggf. muss ich dann wirklich den Buffer etwas runter setzen.

Um wieviel der Speicher bei Ethernetnutzung ansteigt, das hängt auch vom verwendeten Ethernet Chip und den dazugehörenden Libraries ab.

Wenn Du RAM-Speicher bei Deinem Arduino (und Dir graue Haare) sparen möchtest, nimmst Du das von Arduino offiziell unterstützte Ehternet Shield mit W5100 Chip und bloß ja nicht eines der nicht offiziell unterstützten Ethernet Boards mit ENC60J28 Chip!
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 96
Posts: 4729
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Nö. Soweit mir bekannt ist, hält Serial einen 64 Byte großen Empfangspuffer und einen 64 Byte großen Sendepuffer vor. Macht 128 Byte.

Und Dein Proz hat 2 USARTs, macht also 2 mal Puffer, somit mit den Ringbuffer-Positionszeigern 272 Byte, plus ca. 60 Byte für die Objekte (zusammen also fast die von Dir gemessenen 350 Byte). Zugegeben, das könnte besser gelöst sein (die Puffer für die zweite serielle Schnittstelle müssten erst bei Verwendung derselben eingerichtet werden), aber das dürfte ein vernünftiger Kompromis sein und beim normalen UNO macht es knapp 170 Byte aus.
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 37
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Moin !

@pylon: Aha daher weht der Wind. Ok dann habe ich es verstanden. Danke für die Erklärung !

@jurs:
Quote
und bloß ja nicht eines der nicht offiziell unterstützten Ethernet Boards mit ENC60J28 Chip
Oha das klingt aber nicht gut. Dabei hat der ENC28j60 bis jetzt alles gemacht was ich mir von ihm erhofft habe.
Zudem ist das Pollin Board auch noch sehr günstig - mit Netzwerk komplett nur 20€.
Ich werde es erstmal damit versuchen. Sollte es gar nicht klappen kann ich auf den Mega2560 mit offiziellem Shield umsteigen. Hängt aber noch irgendwo in der Post der Gute  smiley-razz

Bis dato habe ich ja noch keine Speicher Probleme. Und ich finde man kann ne Menge lernen wenn man nicht alles in fertig nutzt  smiley-cool

Danke jedenfalls allen für die Erklärungen zu der Serial / RAM Frage !

Grüße Dominik

PS (etwas OT): Ich hatte schon überlegt meine erfahrungen mit den Pollin NET IO Board hier zu posten. Macht das Sinn?
Logged

Grüße Dominik
www.logview.info

Alfeld (Leine) / Germany
Offline Offline
Full Member
***
Karma: 5
Posts: 202
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
PS (etwas OT): Ich hatte schon überlegt meine erfahrungen mit den Pollin NET IO Board hier zu posten. Macht das Sinn?

Jep. Erzähl da bitte drüber. Ich hatte neulich schonmal mit dem Teil rumgespielt.. Würde aber gerne noch hören, wie das mit dem Ethernet via Arduino-IDE aussieht, weil das bei mir Partout nicht wollte...
Gruß,
Tobias
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 28
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
PS (etwas OT): Ich hatte schon überlegt meine erfahrungen mit den Pollin NET IO Board hier zu posten. Macht das Sinn?

Jep. Erzähl da bitte drüber. Ich hatte neulich schonmal mit dem Teil rumgespielt.. Würde aber gerne noch hören, wie das mit dem Ethernet via Arduino-IDE aussieht, weil das bei mir Partout nicht wollte...
Gruß,
Tobias

Das Ding ist nicht schlecht nach bissel Gefummel ist auch ein Adruino Bootloader Flashbar...
ABER es ist ein ENC28j60 Netzwerk-Chip verbaut und daher unter Arduino nicht empfehlenswert smiley-sad
« Last Edit: December 19, 2012, 01:57:04 pm by Shojo » Logged

Pages: [1]   Go Up
Jump to: