Einen Header aus Variablen im Flash an bestimmte Adresse speichern.

OP #4355027
Lesenswert?

Hallo,

ich benutze AVR-Studio 6 (GCC) und habe einen ATXMega64 µC.
Ich möchte für meine FW einen Header im Flash ablegen.
Der Header soll Version, Name, CRC usw. beinhalten.

Wie lege ich so eine Constante im Flash an einer bestimmten Adresse ab.
Eigentlich möchte ich den Header am Anfag des Flashbereichs haben.

Mit folgendem Code und dem Pragma PROGMEM kann ich die Variable im Flash 
ablegen. Aber nicht beeinflussen dass diese am Anfang des Flashes liegt.

const unsigned char header[11][10] PROGMEM =
{
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09},
{0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13},
{0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D},
{0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27},
{0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31},
{0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B},
{0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45},
{0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F},
{0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59},
{0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,0x60,0x61,0x62,0x63},
{0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D}
};

Welchen Weg gibt es bei GCC und AVRStudio 6 um dies zu bewerkstelligen?

Danke.

Gruß,
Georg.
OP #4355091
Lesenswert?

Hallo,


inzwischen ist mir bekannt wie ich mein array an eine beliebige Stelle 
im Flash ablegen kann.

static const unsigned char _attribute_ ((section (".HeaderSec"))) 
header[11][10]=
{
{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09},
{0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13},
{0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D},
{0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27},
{0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31},
{0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B},
{0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45},
{0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F},
{0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59},
{0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,0x60,0x61,0x62,0x63},
{0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D}
};

Dem Linker muss dann mitgeteilt werden wohin die section .HeaderSec 
hingelegt werden muss.

Kennt sich jemand mit dem Linker besser aus als ich?

Wie teile ich dem Linker mit dass die section .HeaderSec soweit wie 
möglich nach vorne gelegt wird. Sprich nach der Vectortabelle usw.

Der Header sollte aber immer an der gleichen Stelle liegen damit ich 
diesen über die Adresse auslesen kann.

Danke.

Gruß,
Georg.
OP #4355134
Lesenswert?

Hallo,

ich habe den Flash quasi in 2 Teile aufgeteilt.
Der erste Teil wird bei Anlegen der Versorgung gestartet und soll den 2. 
Teil (dort liegt die eigentliche Applikation) prüfen und aufgrund dessen 
entscheiden ob der Bootloader oder die Applikation gestartet werden 
soll.

Dazu sollt der Header der Applikation immer an der gleichen Stelle 
liegen damit ich dort die notwendigen Daten zum Prüfen auslesen kann.

Danke.

Gruß,
Georg.

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