Frage:
Stellen Sie das EEPROM vor dem Programm vom PC aus ein
riverrun
2016-08-11 01:44:17 UTC
view on stackexchange narkive permalink

Ich habe an einem Arduino-Programm gearbeitet, das ziemlich groß geworden ist. Ich bin kurz davor, das 32k-Limit für Flash für meinen ATmega328p zu erreichen. Ich möchte meine Programmgröße verringern, indem ich einige meiner vielen Zeichenfolgenliterale im EEPROM speichere.

Alle Beispielprogramme auf der EEPROM-Seite empfehlen, sie zur Laufzeit zu laden. In diesem Fall würden sie Flash-Speicher belegen Sowieso! Ich frage mich, ob es eine Möglichkeit gibt, von meinem PC aus in das EEPROM zu schreiben. Laden Sie dann das Arduino-Programm, das auf diese Werte zugreift. Benötige ich dazu externe Hardware?

Vielen Dank für Ihre Hilfe!

-sam

Nein, vom EEPROM geladene Zeichenfolgen benötigen SRAM, nicht Flash.
Drei antworten:
Kwasmich
2016-08-11 12:42:03 UTC
view on stackexchange narkive permalink

Ich denke, hier ist eine Verwirrung über die drei Arten von Speicher. EEPROM, FLASH und SRAM sind vollständig getrennt. EEPROM ist wie Ihr Dateispeicher. FLASH enthält Ihre Programm- und statischen Werte. SRAM ist der Speicher, mit dem das Programm arbeitet.

Statische Werte werden beim Start von FLASH in SRAM geladen, es sei denn, Sie erklären, dass Ihr statischer Inhalt nicht automatisch geladen wird, indem Sie das entsprechende Makro PROGMEM verwenden. In diesem Fall wird Ihr SRAM erst dann aufgefressen, wenn Sie es manuell von FLASH in SRAM lesen. Hierfür wird #include <avr / pgmspace.h> verwendet ( pgmspace.h).

EEPROM wird nicht automatisch geladen und muss daher explizit gelesen werden. #include <avr / eeprom.h> enthält alle Funktionen ( eeprom.h).

Ich bin mir über die Arduino-IDE nicht sicher, aber mit avrdude Sie können das EEPROM separat programmieren, ohne dass die Werte in Ihrem Programm vordefiniert wurden. Das dritte Beispiel im AVRdude-Handbuch zeigt, wie Programm, EEPROM und Sicherungen gleichzeitig geflasht werden.

danke ich schaue mir das avrdude beispiel an! das ist vielleicht das, wonach ich suche
Gerben
2016-08-11 16:29:24 UTC
view on stackexchange narkive permalink

Der einfachste Weg wäre, zwei Skizzen zu haben.

Eine, die alle Zeichenfolgen im EEPROM speichert.

Danach können Sie die zweite tatsächliche Skizze hochladen, die die im EEPROM gespeicherten Werte verwendet.

Sie müssen die erste Skizze nur hochladen, wenn sich eine der Zeichenfolgen ändert.

Es gibt eine Möglichkeit, ein Hex mit avrdude direkt in das EEPROM hochzuladen, aber Sie müssten Verwenden Sie die Befehlszeile und haben Sie auch eine Möglichkeit, diese Hex-Datei mit all diesen Zeichenfolgen zu generieren.

Aleksander Z.
2016-08-11 22:49:12 UTC
view on stackexchange narkive permalink

Sie benötigen keine zwei Skizzen:

  #include <avr / eeprom.h>char e2str [] EEMEM = "Hallo Welt! \ n"; void setup () {Serial.begin (9600); uint8_t * ptr = reinterpret_cast<uint8_t * > (e2str); while (true) {char c = eeprom_read_byte (ptr ++); if (c == '\ 0') break; Serial.write (c); }} void loop () {}  

Kompilieren Sie (Sketch> Verify / Compile) die obige Quelle und Sie sollten die Datei <sketch-name>.ino.eep finden im Build-Verzeichnis des Projekts.

Für Arduino Nano können Sie avrdude einfach mit -U eeprom: w: <path-to-eep-file>: i code ausführen > Option vor Skizze> Hochladen.

Für Arduino Uno müssen Sie jedoch zuerst das EEPROM mit dem Programmierer programmieren, da Optiboot das Schreiben in das EEPROM nicht unterstützt. Oder Sie können es einmal mit dem Arduino Nano-Bootloader brennen (Tools> Board> Arduino Nano, Tools> Prozessor> ATmega328, Tools> Burn Bootloader) und dann das Verfahren für Arduino Nano anwenden. s> (Arduino Uno und Nano) Bootloader verwenden unterschiedliche Baudraten.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Lesen Sie weiter auf narkive:
Loading...