Forum: Mikrocontroller und Digitale Elektronik IAR Array im Flash


von Sam (Gast)


Lesenswert?

Hi,

wie definiere ich mit der IAR ARM Workbench einen initialisierten Array 
im Flash an einer bestimmten Position?

Also so was in der Art:
1
const p[4] @ 0x4000 = {0x00,0x01,0x02,0x04};

Gruß Sam

von Jörg S. (joerg-s)


Lesenswert?

Vielleicht gennau so nur zusätzlich mit Datentyp?

von Sam (Gast)


Lesenswert?

Hallo Jörg,

gut beobachtet, aber am Datentyp liegts nicht.

Also nochmal.

Wie definiere ich mit der IAR ARM Workbench einen initialisierten Array
im Flash an einer bestimmten Position?

Also so was in der Art:
1
const char p[4] @ 0x4000 = {0x00,0x01,0x02,0x04};

Gruß Sam

von Karl H. (kbuchegg)


Lesenswert?

Sam schrieb:

> Wie definiere ich mit der IAR ARM Workbench einen initialisierten Array
> im Flash an einer bestimmten Position?

Dein Compilerhandbuch bzw. die Online-Hilfe weiß da nichts drüber?

>
1
> const char p[4] @ 0x4000 = {0x00,0x01,0x02,0x04};
2
>

Gibts eine Fehlermeldung wenn du das versuchst?
Die Syntax sieht ja auf den ersten Blick nicht so schlecht aus.
Wie würde das denn ausschauen, wenn es kein Array wäre? Wo kommt denn 
dann die Adressangabe hin?
1
  char c @ 0x4000 = 'D';
2
  char c = 'D' @ 0x4000;

oder geht das überhaupt nicht?

von Peter (Gast)


Lesenswert?

Da gibts zwei Möglichkeiten:
1. Segment definieren im Linke file
dann
#pragma constseg=MYSEGMENT
const unsigned char Test;
#pragma constseg=default

2.
const unsigned char Test @ 0xa190  = 0x23;


Gruss
Peter

von Peter (Gast)


Lesenswert?

Habs grad mit array probiert

const unsigned char Esel[2] @ 0xa190  = {0x23, 0x56};

geht so.....

Peter

von Johnny B. (johnnyb)


Lesenswert?

Ziemlich sauber wäre es, wenn Du den gewünschten Speicherbereich 
(section) für das Array im Linker-Script definierst und dann irgendwie 
mit einem Pragma oder so im C-Code festlegst, dass das Array in dieser 
Sektion abgelegt werden soll.
In der Doku zu Deinem Compiler/Linker sollte stehen, wie sowas geht. Ich 
kann es leider auch nicht aus dem Ärmel schütteln, sonst hätte ich das 
gerne getan.

von Sam (Gast)


Lesenswert?

Hallo Karl Heinz,

der Compiler gibt mir folgende Fehlermeldung:

Error[Be022]: location address not allowed for initialized variables 
(writeable variables without the __no_init attribute)

Zur Meldung habe ich folgenden Link:

http://supp.iar.com/Support/?note=15461&from=search+result

Wenn ich nun exakt nach 'solution, part 3' vorgehe (also mit __root 
usw.), dann bekomme ich genau den gleichen Fehler, nämlich Error[Be022].

Gruß Sam

von Sam (Gast)


Lesenswert?

@Peter: Kann ich ein Segment über Project->Options definieren? Falls ja, 
wie geht das?

@Johnny: Ich les mir jetzt mal die Doku durch und hoffe was zu finden.

Danke für die Hilfe.

Gruß Sam

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.