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?
moelski:
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.
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.
moelski:
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!
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.
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
Bis dato habe ich ja noch keine Speicher Probleme. Und ich finde man kann ne Menge lernen wenn man nicht alles in fertig nutzt 8)
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?
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
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