IAR Array im Flash

Gast #1726954
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
#1726966
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?
Gast #1726996
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
#1727002
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.
Gast #1727007
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren