www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik IAR Array im Flash


Autor: Sam (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:

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


Gruß Sam

Autor: Jörg S. (joerg-s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht gennau so nur zusätzlich mit Datentyp?

Autor: Sam (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
const char p[4] @ 0x4000 = {0x00,0x01,0x02,0x04};

Gruß Sam

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

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

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?
  char c @ 0x4000 = 'D';
  char c = 'D' @ 0x4000;

oder geht das überhaupt nicht?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habs grad mit array probiert

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

geht so.....

Peter

Autor: Johnny B. (johnnyb)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sam (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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=searc...

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

Autor: Sam (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.