Frage zu Makro und Array

Gast #4710863
Lesenswert?

Hallo zusammen,

ich habe eine Frage zu Makros und Arrays.

Da folgende Beispiel ist etwas vereinfacht, aber zeigt, hoffentlich was 
ich meine.

Ich habe ein Array:
1
 typedef struct 
2
 {
3
     uint8_t  value1;        
4
     int8_t   value2;         
5
 } sArray;
6

7
const sArray ArrayLookup[] =
8
{
9
    { 14, 30 },
10
    { 15, 40 }, 
11
    { 16, 50 }, 
12
    { 17, 60 }, 
13
    { 18, 7 }
14
};

Dieses Array soll in einem Makro verwendet werden:
1
NEUES_MAKRO(x)     x
2

3
NEUES_MAKRO(const sArray ArrayLookup[] =
4
{
5
    { 14, 30 },
6
    { 15, 40 }, 
7
    { 16, 50 }, 
8
    { 17, 60 }, 
9
    { 18, 7 }
10
});

Das mag etwas sinnbefreit sein im Moment , aber es soll nur als Beispiel 
dienen.

Ich bekomme nun die Fehlermeldung:
1
Error[Pe055]: too many arguments in invocation of macro "NEUES_MAKRO"

Kann mir jemand sagen, warum das so nicht funktioniert? Liegt es an den 
Strukturen?

Folgendes funktioniert einwandfrei:
1
NEUES_MAKRO(const char String[]= "\nTest";);


Gibt es eine Möglichkeit das trotzdem so in der Art umzusetzen?

Vielen Dank.

Gruß

Jörg
Gast #4710928
Lesenswert?

Hallo zusammen,

das Makro soll eigentlich nur dazu dienen, entsprechende Daten im Flash 
speichern zu können, ohne er überall zu ändern.

Man verwendet dann das Makro und wenn man die Daten im Flash ablegen 
möchte, verwendet man eben folgendes:
1
#define NEUES_MAKRO(x)    x __attribute__((__progmem__))
oder eben nur x.


Vielen Dank.

Gruß

Jörg
Gast #4711119
Lesenswert?

Jörg schrieb:
> das Makro soll eigentlich nur dazu dienen, entsprechende Daten im Flash
> speichern zu können, ohne er überall zu ändern.
Warum so kompliziert? warum nicht einfach so:
1
// Daten im Flash ablegen
2
#define NEUES_MAKRO __attribute__((__progmem__))
3

4
// ... oder ...
5

6
// Nicht im Flash ablegen
7
#define NEUES_MAKRO
8

9
const sArray ArrayLookup[] NEUES_MAKRO =
10
{
11
    { 14, 30 },
12
    { 15, 40 }, 
13
    { 16, 50 }, 
14
    { 17, 60 }, 
15
    { 18, 7 }
16
};
Im Endeffekt genauso wie PROGMEM funktioniert, iirc

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