ARM GCC wie Strukturen ins Flash?

Gast #563064
Lesenswert?
• ▲
▼
1
typedef struct menue{
2
  char *text;
3
  int8_t previous; //menue vorher
4
  int8_t next; //naechstes menue
5
  char * (*fp) (void);
6
  struct menue *sub; 
7
}menueObject;
So beim AVR:
1
menueObject myMenue[]PROGMEM = {
2
  {"Test1", 0 ,0 ,NULL ,NULL},                   
3
  {"Test2", 0 ,0 ,NULL ,NULL},                      
4
  {"Test3", 0 ,0 ,NULL ,NULL}                   
5
};
wie beim ARMGCC?

Besten Dank
Gast #563100
Lesenswert?
• ▲
▼
Einfach mit 'const' davor. Da der ARM ein Von-Neumann-Rechner ist, lässt 
GCC den Variablenwert einfach im Flash, wenn dieser nicht verändert wird 
bzw werden darf. Da liegt alles in einem einzigen Adressraum.

MfG Mark
Gast #563210
Lesenswert?
• ▲
▼
Jo stimmt eigentlich.
Aber wie mache ich es wenn ich sowas machen will? Siehe Anhang oben.
item1.next = &item2;
Ich wollte eigentlich nur die Strukturen inst Flash legen und dann 
darauf Zugreifen Read und Write sonst kann ich ja nicht viel machen.

Na ja ich glaube der Fehler liegt woanders, K&R habe ich natürlich vor 
mir liegen aber... na ja mal weiter suchen lesen.

Persönliche Seite #563215
Lesenswert?
• ▲
▼
mgiaco wrote:
> Jo stimmt eigentlich.
> Aber wie mache ich es wenn ich sowas machen will? Siehe Anhang oben.
> item1.next = &item2;
> Ich wollte eigentlich nur die Strukturen inst Flash legen und dann
> darauf Zugreifen Read und Write sonst kann ich ja nicht viel machen.
>
> Na ja ich glaube der Fehler liegt woanders, K&R habe ich natürlich vor
> mir liegen aber... na ja mal weiter suchen lesen.

Hm? Keine Ahnung was du damit sagen willst.

Stell mal mehr Quelltext 'rein.
Gast #563244
Lesenswert?
• ▲
▼
> Ich wollte eigentlich nur die Strukturen inst Flash legen und dann
> darauf Zugreifen Read und Write sonst kann ich ja nicht viel machen.

Das wird mit dem Flash möglicherweise gar nicht gehen. In der Regel 
braucht man einen speziellen Lösch-/Programmierzyklus, der sich dann 
auch nicht auf eine einzige Speicherstelle, sondern auf eine ganze 
Speicherseite auswirkt. Deshalb gibt's schließlich RAM.
Gast #563303
Lesenswert?
• ▲
▼
Willst du nur einen (konstanten)Pointer auf ein anderes Struct? - dann 
brauchst du einen Prototyp der anderen struct, und mußt die Adresse 
natürlich bei der Initialisierung bereits angeben.
1
const struct einname B;//Prototyp
2
const struct einname A = {
3
    ...
4
    next = &B;
5
    ...
6
}; // initialisierung

  
Gast #563308
Lesenswert?
• ▲
▼
Lass mich raten: Du möchtest die Menüstrukturen gar nicht zur Laufzeit
beschreiben, sondern sie einmal zu Beginn initialisieren, so dass jede
ihren festen Text und ihre festen Flags hat und die Strukturen
untereinander als Baum verzeigert sind.

Richtig? Wenn ja, dann solltest du die Initialisierung nicht in einer
Funktion, sondern direkt bei der Variablen- bzw. Konstantendefinition
vornehmen, z. B. so:

low.h:
1
typedef const struct menueItem MenueItem;
2

3
struct menueItem {
4
  struct menueIcon *menueIcon; //Icon zum Beispiel Batterie-Symbol
5
  char *text;
6
  char *value; 
7
  u8_t flags;
8
  MenueItem *next;
9
  MenueItem *prev;
10
  MenueItem *parent;
11
  MenueItem *child;
12
};

low.c:
1
MenueItem s1, s11, s12, s2, s3;
2

3
MenueItem
4
  s1  = { NULL, "menu1",  NULL, 0, &s2,  &s3,  NULL, &s11 },
5
  s11 = { NULL, "menu11", NULL, 0, &s11, &s11, &s1,  NULL },
6
  s12 = { NULL, "menu12", NULL, 0, &s12, &s12, &s1,  NULL },
7
  s2  = { NULL, "menu2",  NULL, 0, &s3,  &s1,  NULL, NULL },
8
  s3  = { NULL, "menu3",  NULL, 0, &s1,  &s2,  NULL, NULL };
Die Werte für menueIcon, value und flags musst du natürlich auch noch
eintragen.

Auf diesem Weg sollten die Strukturen flshbar sein.

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.