mikrocontroller.net

Forum: Compiler & IDEs Daten in Programmspeicher speichern


Autor: Thomas N. (thomas8443)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich programmiere zurzeit ein Programm für den Atmega32.
Ich benötige für das Programm eine Tabelle, besser gesagt ein Feld des 
folgenden structs:
struct daten{
  unsigned char speed;
  unsigned int time;
};

Das Feld soll nun 600 Feldelemente beinhalten, d.h. ich benötige dafür 
1800Byte. Da ich aber mehrere solche Felder benötige ist natürlich der 
Flash-Speicher gleich voll. Deswegen habe ich vor meine Felder mit dem 
Befehl "PROGMEM" im Programmspeicher zu speichern.
Das funktioniert bereits einwandfrei, nur muss ich das Feld vorher 
initialisiern und es ist mir nicht möglich die Werte im Programm 
nochmals zu lesen.
Gibt is irgendeine Möglichkeit das Problem so zu lösen, dass ich in 
meinem Programm die Werte des Feldes ändern kann?
Möchte das ganze aber ohne zusätzliche Hardware machen!

Danke für eure Antworten!

lg tommy

Autor: Thomas N. (thomas8443)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, meine natürlich es ist mir nicht möglich die Werte während des 
Programms nochmals zu ändern!!! =)

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Da ich aber mehrere solche Felder benötige ist natürlich der
> Flash-Speicher gleich voll. Deswegen habe ich vor meine Felder
> mit dem Befehl "PROGMEM" im Programmspeicher zu speichern.

Und worin besteht jetzt der Unterschied zwischen "Programmspeicher" und 
"Flash-Speicher"?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du mußt Dir eine Hilfsfunktion im Bootbereich schreiben, die eine Page 
löschen und programmieren kann.

Du kannst aber auch meinen Bootloader benutzen, der enthält eine solche 
Funktion, angepaßt an den AVR-GCC.
Das apicall.c fügst Du Deinem Programm hinzu.
Dann brauchst Du nur eine Page im SRAM mit den neuen Daten zu füllen und 
dann die Funktion copy_flash() aufzurufen.


Peter

Autor: Mike James (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich arbeite an einem Projekt das 512 Leds ansteuert. Die anzuzeigenden 
"Bilder" werden per USB an eine Steuerplatine übergeben die sie dann 
anzeigt.

http://www.mike-gareiss.de/New/Projekte/shinyPlaye...
http://klautesblog.blogspot.com/search/label/LED%20Matrix

Meine Aufgabe bestand die Daten vom Rechner bis zum USB-Port zu bringen. 
Die Platine zum ansteuern der LEDs sowie die Firmware wurde von Klaute 
entworfen und zusammengelöten. Leider ist Klaute zur Zeit mit seinem 
Studium voll ausgelastet so dass ich mich um die Weiterentwicklung 
kümmere. Als blutiger Anfänger mit Programmierkenntnissen in C/C++ 
beisse ich mich da durch.

Vor ein paar Tagen habe ich mir den Bootloader von Peter Dannegger 
(fastboot_build24) runtergeladen und konnte die datei apicall.c nicht 
finden. Wo hat die sich denn versteckt?

CU Mike

PS: Ich arbeite auf einem Linuxsystem.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.