ARM7: Daten im Flash ablegen

OP #1275438
Na, noch nicht ganz:

Ich möchte beim Arm7 Daten im Flash ablegen:

const uint32_t  data_vw[] _attribute_ ((section(".rodata")))   = {
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,...

(Die Attribute Sache braucht man eigentlich  nicht, const reicht aus)


Soweit so gut, die Daten stehen bei .rodata drin. Es sind 8 Bit Daten, 
aber ich weiss nicht ob ich die mit uint32_t ablegen soll oder mit 
uint8_t, da der Arm7 nunmal 32 Bit Zellen hat.

Debugge ich dann mal los, um zu schauen, ob er die Daten auch holen kann 
schmiert der Debugger ins Nirwana beim Zugriff ab. Auch wenn ich die auf 
eine Variable zuweisen will, jeder Zugriff führt zum Debugger-Crash.


Aufruf mit
GDisplay_Show_Bitmap((uint32_t*)data_vw,sizeof(data_vw));


void GDisplay_Show_Bitmap(uint32_t *ptr,uint32_t size)
{
  volatile uint32_t i,j,k;

  for (i=0;i<size;i++)
  {
       k = (uint32_t)(*ptr)++;  // Hier ist Debugger weg!

  }

Der ptr Zeiger steht absolut richtig auf der Speicherzelle im Flash wo 
das erste Byte liegt. Lege ich die Daten ins interne Ram, lasse also 
"const" weg klappt es.

Hat vielleicht mal jemand ein Beispiel für den ARM (nicht AVR, da weiss 
ich wie es geht) wie man Daten ablegen und holen kann?
Gast #1275596
Du versuchst in dem Beispiel ins Flash zu schreiben. Das geht
so nicht. Das
1
uint32_t *ptr
 sollte auch ein
1
const uint32_t *ptr
 sein.

Wenn du ein Array aus Bytes brauchst dann kannst du das auch so
anlegen.
Folgendes ist also kein Problem:
1
const uint8_t* data[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
2
void printData(const uint8_t* p, int size)
3
{
4
   for (int i = 0; i < size; i++) {
5
      rprintf("%u ", *p++);
6
   }
7
   rprintf("\n");
8
}
9

10
int main()
11
{
12
/* init...
13
   blah
14
   blupp
15
*/
16

17
   printData(data, sizeof(data)/sizeof(uint8_t)); // 9/1
18
}

Die Daten stehen dabei im Flash, wo sie mit 'const' auch hingehören.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.