Daten in Programmspeicher speichern

OP #1561562
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
#1561622
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
Gast #2173986
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.