Fritz schrieb:
> 1. Was bedeutet das $(OBJDIR) vor %.o? Ist da ein eigener Ordner für .o
> files vorgesehen oder wie?
Ja. Wenn es bei dir anders ist, muss du das entsprechend ändern.
> 2. Wenn ich diese Regel in mein makefile einfüge kommt das doch in
> Konflikt mit der Regel die es dort für .o files schon gibt, nähmlich zu
> kompilieren, oder?
Nein, denn es ist eine ".bin nach .o"-Regel. Ich nehme mal nicht an,
dass deine zu kompilierenden Files auch die Endung .bin haben, oder?
> 3. Die 4 Zeilen am Schluss definieren offenbar ein headerfile. Was ist
> das für ein headerfile und was muss ich damit machen?
"Müssen" musst du gar nichts damit. Es ist nur ein Beispiel, wie du dann
die Symbole verwenden kannst.
> In dem wird
> offenbar ein array deklariert, dass meine Daten enthält, sowie dessen
> Ende und Länge. Aber warum steht auch hinter Ende und Länge ein [], das
> sind doch keine arrays?
Objcopy definiert nur Symbole, also quasi nur Adressen. Welchen Typ die
Daten an dieser Adresse haben obliegt der Interpretation des Anwenders.
1 | extern const char BEISPIEL_size_sym[];
|
Bedeutet hier einfach nur: Unbestimmte Anzahl Bytes an der Adresse
BEISPIEL_size_sym. Das darauffolgende #define interpretiert dann diese
"Bytes unbestimmter Anzahl" als int. Man könnte auch gleich schreiben:
1 | extern const int BEISPIEL_size_sym;
|
Da deine Daten 16 Bit unsigned Zahlen sind, kannst du für die Daten auch
schreiben:
1 | extern const uint16_t BEISPIEL[] PROGMEM;
|
Aber Vorsicht: das size-Symbol bleibt natürlich die Größe in Bytes.
BTW: Haben diese Zahlen denn auch die richtige Endianness?
> 4. Was ist $(*) und $* und was ist der Unterschied?
Das ist die Namensbasis, für die die Regel gerade angewendet wird. Wenn
gerade BEISPIEL.bin in BEISPIEL.o überführt wird, ist es "BEISPIEL". Die
Klammern dienen dazu, den $-Part von nachfolgenden Buchstaben eindeutig
zu trennen.