Forum: Compiler & IDEs Daten in Programmspeicher speichern


von Thomas N. (thomas8443)


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:
1
struct daten{
2
  unsigned char speed;
3
  unsigned int time;
4
};

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

von Thomas N. (thomas8443)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


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"?

von Peter D. (peda)


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

von Mike James (Gast)


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/shinyPlayer/shinyPlayer.html
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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.