Forum: Mikrocontroller und Digitale Elektronik Compiler meckert wegen #define


von Hans (Gast)


Lesenswert?

Hallo,

ich versuche dieses Projekt auf meinem Launchpad umzusetzen:
http://embedded-funk.blogspot.de/2013_11_01_archive.html

Im .h-File steht die Zeile:
1
#define RAM_CODE_LEN   (RAM_CODE_END_ADDR - RAM_CODE_START_ADDR + 1)
Sie errechnet die Länge eines RAM-Speicherabschnitts.

Eingesetzt wird der Wert dann im .cmd-File. Zweck der Übung ist es im 
RAM-Speicher einen Block für Code freizuhalten:
1
MEMORY
2
{
3
...
4
RAM_CODE   : origin = RAM_CODE_START_ADDR, length = RAM_CODE_LEN
5
...
6
}

Mein CodeKomposter (CCSv4CoreEdit) sagt mir bei kompilieren:
*** expecting "")"" instead of "-" ***
Er will also nix rechnen sondern lieber dass ich einen Wert eingebe und 
danach die Klammer zu mache ...

Darauf kann ich mir irgendwie keinen Reim machen.
1
//Theorethisch müsste doch
2
#define var1 (0x0001)
3
//gleichwertig sein mit
4
#define var1 (0x0002-0x0001)
5
6
//bzw ... wie in meinem Beispiel ...
7
#define a (0x0002)
8
#define b (0x0001)
9
#define var1 (a-b)

Kompiliert wird der Code aber nur mit dieser Variante:
1
#define RAM_CODE_LEN   (0x0080)


Was mach ich falsch?

Gruß
Hans

von Jim M. (turboj)


Lesenswert?

Du mischst Linker- und Präprozessorsymbole wild durcheinander. Das wird 
so nicht funktionieren.

Was ist eigentlich das Ziel der Übung? Funktionen statt Flash in den Ram 
zu setzen geht einfacher.

von Hans (Gast)


Lesenswert?

Hallo Jim,
danke erstmal fürs Lesen und Antworten :)

> Du mischst Linker- und Präprozessorsymbole wild durcheinander. Das wird
> so nicht funktionieren.
Kannst Du mir erklären was genau ich falsch mache?

> Was ist eigentlich das Ziel der Übung? Funktionen statt Flash in den Ram
> zu setzen geht einfacher.
Ja, das ist das Ziel.
Kannst Du mir einen Hinweis geben wie ich es einfacher lösen kann?

Gruß
Hans

von Karl H. (kbuchegg)


Lesenswert?

> Darauf kann ich mir irgendwie keinen Reim machen.

Das alles ist hochgradig vom spezifischen Compiler/Linker abhängig. In 
deinem Fall vom Linker, weil es sich hier um ein Linker-Skript handelt.

von Torsten K. (Gast)


Lesenswert?

Hans schrieb:
> #define a (0x0002)
> #define b (0x0001)
> #define var1 (a-b)

Versuchs mal mit
#define var1 ((a)-(b))

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.