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
typedefstruct
2
{
3
uint8_tvalue1;
4
int8_tvalue2;
5
}sArray;
6
7
constsArrayArrayLookup[]=
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(constsArrayArrayLookup[]=
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:
packe mal alles in eine Zeile.
Wenn ich mich recht entsinne, kann der Präprozessor das nur auswerten,
wenn es in einer Zeile steht (oder mit \ die nächste Zeile mit
ausgewertet wird)
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__))
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
constsArrayArrayLookup[]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
Hallo zusammen,
so könnte man es natürlich auch machen. Das ist auch sehr
übersichtlich/übersichtlicher. Vielen Dank für den Hinweis.
Vielen Dank.
Gruß
Jörg