Manchmal geht mir der Speicherplatz der Programmgröße für das eingebettete C-Programm aus, das ich auf ein Arduino setzen möchte. Welchen Chip brauche ich also, um den Programmspeicher des Arduino zu erweitern, damit ich mit meinem Arduino größere C-Programme verwenden kann?
Kommentare
- dass ein Kerl namens Petri H ä kkinen ein Spiel im Arcade-Stil auf einem Atmega328P, sollten Sie vielleicht versuchen, Platz in Ihrem Code zu sparen? Wenn dies nicht ‚ praktikabel ist, wie einige Antworten sagen, können Sie einen größeren Chip mit mehr Programmspeicher erhalten. Der Atmega644 wird beispielsweise unter anderem in einem DIP-Chip-Paket geliefert.
- Siehe auch forum.arduino.cc/index.php?topic= 226465.0
- Können Sie bitte Ihre Antwort etwas näher erläutern? 2) Der Arduino verfügt über SPI, sodass auf eine SD-Karte zugegriffen werden kann. Jeder Code auf der SD-Karte müsste in den ausführbaren Speicher geladen werden. Dies ist kompliziert und nichts für Anfänger … Sie meinen, Sie können den Befehlsspeicher ändern oder neu programmieren, während das Programm ausgeführt wird? Kann das laufende Programm den Bootloader aufrufen und neue Anweisungen auf eine andere Adresse laden? Wird ´ in diesem Alter nicht der Programmspeicher? Eine andere Lösung könnte darin bestehen, Rutinen in Ihrem Programm zu identifizieren und alle “ ´ s “ mit den Daten auf einem externen SPI-Speicher gespeichert … Danke!
Antwort
Ein ATmega2560 ist der Chip für mehr Speicher, wenn Sie auf einem Uno keinen Programmspeicher mehr haben. Auf der Webseite Memory unter arduino.cc sehen Sie, dass Flash = 256 KB, SRAM = 8 KB, EEPROM = 4 KB, auf dem sich der ATmega328-Chip befindet Das Uno verfügt über Flash = 32 KB, SRAM = 2 KB, EEPROM = 1 KB.
Wenn Ihnen auf einem Uno der Programmspeicher ausgeht, haben Sie drei praktische Möglichkeiten: Verkleinern Sie das Programm, entfernen Sie den Bootloader (um ein oder zwei KB freizugeben): Verwenden Sie eine andere Karte mit einem leistungsfähigeren Prozessor. Die CPU auf einer Uno-Karte kann nicht von anderen Stellen als dem 32-KB-Flash auf dem Chip auf Programmbytes zugreifen. Die CPU auf einer Mega2560-Karte beginnt mit 8-mal so viel Flash, sodass sie größere Programme als eine Uno-Karte aufnehmen kann.
Wenn Sie den Bootloader entfernen, können Sie stattdessen wie beschrieben mit einer USBASP-Karte programmieren in einem „Programmieren eines AVR-Chips mit einem USBASP mit 10-poligem Kabel“ Artikel unter learningaboutelectronics.com.
Kommentare
- aber wenn Sie den Bootloader freigeben, wie würde ich dann die Arduino-IDE zum Programmieren verwenden?
- @ qwerty10, siehe letzten Absatz der Bearbeitung. Arduino IDE unterstützt USBASP ok.
- Funktioniert es nicht mit einem Programmierer, der Code auf ATMEGA hochladen kann? Anstelle nur eines USBASP. Soweit ich weiß, werden nicht 10 Pins verwendet, sondern eine Teilmenge dieser Pins.
- @ qwerty10, USPASP ist ein ISP-Programmierer (in der Systemprogrammierung). Im Allgemeinen kann jeder ISP-Programmierer zum Programmieren eines Chips (mit oder ohne Bootloader) verwendet werden, solange MOSI-, MISO-, SCK-, RST-, VCC- und GND-Pins auf dem Zielchip verfügbar sind.
- Aktuelle Unos verwenden den sehr kompakten Optiboot-Bootloader. Durch Entfernen werden nur 512 Byte freigegeben.
Antwort
Ein anderer Weg (außer MCU mit mehr Speicher) ist Arduino Framework und seine Bibliotheken nicht verwenden. Ein solcher Abstraktionsgrad ist in beiden Richtungen teuer – Speichernutzung und Geschwindigkeit. Dies ist jedoch viel schwieriger. Wenn Sie eine Bibliothek benötigen, müssen Sie diese portieren (wenn Sie keine native gefunden haben) oder zumindest die erforderlichen Funktionen von Arduino bereitstellen.
Zum Beispiel in der Arduino IDE 1.6.11 Die leere Skizze verbraucht bis zu 444 Byte Flash. Die Verwendung von pinMode
und digitalWrite(13, ! digitalRead(13));
+ delay(500);
bedeutet 964 Bytes. Natürlich sind dies höchstwahrscheinlich Eintimer. Wenn Sie sechs weitere Pins verwenden und umschalten, wird viel weniger Programmspeicher benötigt als beim ersten (1192B). Aber es wächst immer noch sehr schnell.
In reinem C ist das leere Programm ungefähr 134 Bytes lang. Dieselbe Funktionalität (das Umschalten eines Pins alle 500 ms) dauert 158 Bytes (und es geht viel schneller).
Aber für ein Hobbyprojekt würde ich stattdessen ATMega2560 oder ATMega644 / 1284 wählen.
Und Sie können auch direkten Zugriff auf Hardware verwenden. Wenn Sie die Pin-Skizze umschalten, indem Sie Register direkt verwenden und _delay_ms aus AVR-Bibliotheken 468 Bytes anstelle von 964B verwendet. Mit Verzögerung von Arduino-Kernbibliotheken sind es 602B. h3>
- Sie meinen
_delay_ms()
. - Dies hat den zusätzlichen Vorteil, dass Sie tatsächlich etwas über die von Ihnen ‚ wird verwendet. Die AVRs auf diesen Arduinos sind viel leistungsfähiger als die “ Standardbibliothek “ glauben machen würde.++
Antwort
Was ist mit einem Himbeer-Pi? Null ? Ich habe ein Paar und benutze sie ziemlich oft als Arduinos.
Kommentare
- Andere Architekturen sollten zwar in Betracht gezogen werden, aber ein eingebettetes Linux-System mit obligatorischem Booten der SD-Karte wie das pi fügt viel Komplexität hinzu und ist auf einzigartige Weise zerbrechlich, auch wenn es nicht teurer ist. Es gibt viele Boards, die auf kleineren, stärker integrierten ARM-MCUs basieren, die in Bezug auf Anwendungen einem Arduino viel ähnlicher sind und gleichzeitig drastisch leistungsfähiger sind. Aber wenn Sie viel Verarbeitung oder Megabyte Speicher benötigen, dann lohnt sich diese Komplexität.
- Ich bevorzuge auch die Null, weil sie so flexibel ist. Sie können mehr Speicher hinzufügen oder in Projekte einbetten, während Sie gleichzeitig einen Prozessor haben, der groß genug ist, um so ziemlich alles zu tun.
Antwort
Sie können auch in andere Plattformen schauen. Zum Beispiel ist ein Teensy 3.2 Arduino-kompatibel und verfügt über ein 2-KB-EEPROM und 64 KB RAM.
Antwort
Wen fragt eine breite Frage, es ist hilfreich, einige Details aufzunehmen. Zum Beispiel, wie viel Speicher und warum Sie denken, dass Sie ihn benötigen.
Ich habe einmal einen Prozessor mit 2 KB Programmspeicher, 64 Byte RAM und 1 KIPS angegeben. Der Ingenieur fragte, MIPS, ich erklärte Tausende pro Sekunde. Er antwortete, sie kommen nicht so langsam. Am Ende des Projekts wurde eine riesige Benutzeroberfläche hinzugefügt und der Speicher wurde knapp … aber immer noch ohne Probleme.
Überlegen Sie also, nachdenklicher zu sein Informationen zu den verwendeten Ressourcen.
So beantworten Sie die Frage:
1) Der Arduino bietet keinen praktischen Bus zum Abrufen von Speicher. Es gibt also keine Möglichkeit, a anzuschließen Chip, um mehr Speicher zu erhalten.
2) Der Arduino verfügt über SPI, sodass auf eine SD-Karte zugegriffen werden kann. Jeder Code auf der SD-Karte muss in den ausführbaren Speicher geladen werden. Dies ist kompliziert und nicht für Anfänger geeignet …
3) Verschärfen Sie Ihren Code wie vorgeschlagen. Dies ist wahrscheinlich ein guter Weg, um zu lernen.
3) Wechseln Sie zu einem größeren Arduino.
Es gibt verschiedene Arduino-Prozessoren. Einige in der ACR-Reihe, andere in der ARM-Reihe. Der Wechsel zu einem anderen Gerät in derselben Familie ist eine relativ bescheidene Änderung und kann bis zu 368 Byte Programm-FLASH bereitstellen. Dies sind jedoch keine Arduino-Karten genau.
Die Arduino ARM-basierten Geräte sind sehr unterschiedlich und Verwenden Sie verschiedene Bibliotheken.
Schauen Sie sich das Arduino Mega 2560 an, es ist dem Uno sehr ähnlich, hat einen ähnlichen Platzbedarf, Code sollte relativ einfach zu portieren sein und ist kostengünstig.
Es gibt größere Geräte in der AVR-Familie.
Beachten Sie, dass der AVR32 ein anderer Prozessor ist und die Peripheriegeräte so unterschiedlich sind, dass es sich um ein anderes Gerät handelt.
Wenn Sie in sehr große Programme einsteigen möchten ( Gigabyte Speicher) überprüfen Sie das Beagleboard. Es verfügt über ein vollständiges Linux mit virtuellem Speicher (siehe Nr. 2 oben) und leistungsstärkere E / A-Mechanismen.
Kommentare
- Beheben Sie möglicherweise einige Tippfehler wie Wen, 3 und andere
- Ich meine, wenn Sie diese Tippfehler korrigieren, könnte jemand Ihre Antwort abstimmen …