Hallo Leute,
ich habe in System Workbench ein Projekt. Den Projektnamen würde ich
gern im LCD anzeigen lassen. Natürlich könnte man das händisch
erledigen, aber ich hätte das gern automatisiert. Wie komme ich in C
dahin, dass der Projektname in einem String landet?
Ingo Less schrieb:> Wie komme ich in C> dahin, dass der Projektname in einem String landet?
in dem du dem File den Projektnamen gibst?
Dort steckt er ja in argv[0] oder _NAME
ja ja, steht alles im C-Buch...
Da muss man schon mit Macros tricksen und der gcc ist da etwas zickig.
1
#define STRINGIFY(x) #x
2
#define TOSTRING(x) STRINGIFY(x)
3
4
5
printf("Hello from "TOSTRING(PROJECT_NAME)"\n");
damit bekommt man ein define in einen String. Jetzt muss noch
PROJECT_NAME (habe ich hier nur als Beispiel genommen) von der Workbench
in den Compiler setttings für die übergebenen defines vorhanden sein.
Eventuell gibt es sowas, oder man muss gucken ob es eine
Envrionmentvariable gibt die man in ein entsprechendes define packen
kann. Und da es hier wohl um Cortex-M geht gibt es auch kein PROGMEM.
Also nicht unbeding das erste Kapitel im C-Buch.
Lass einfach vom Makefile einen Header erzeugen der all diese Sachen als
Define enthält (Name, Version, Branch, Commit-ID, Compiledatum, was auch
immer...)
Yalu X. schrieb:> Es ist Google, der hellsieht, wenn man "System Workbench" eingibt
ach so, ja dann google hat sich ja noch nieeeee geirrt :)
dachte ich bei workbench immer an Amiga.
Nick M. schrieb:>> const char main_name[] PROGMEM = {__FILE__};_FILE_ hilft nicht weiter, es gibt den Dateinamen der Sourcdatei
zurück (z.B. main.c). So wie es scheint, kommt man an die Info nicht
ohne Krücken über Makefile dran. Sehr schade...
Der C Compiler weiß nicht was ein "Projekt" ist und auch nicht was der
Name des Projekts ist. Du kannst in Eclipse (=System Workbench) in den
Projekteinstellungen Makros (dort fälschlich "Symbol" genannt)
definieren und als Wert "${project_name}" setzen, das wird dann von
Eclipse mit dem Projektnamen ersetzt. Das Makro kannst du dann im Code
nutzen.
Nick M. schrieb:> Genau das hab ich doch geschrieben!?
Nö, du hast ne Frage dazu gestellt.
Programmierer schrieb:> Du kannst in Eclipse (=System Workbench) in den> Projekteinstellungen Makros (dort fälschlich "Symbol" genannt)> definieren und als Wert "${project_name}" setzen,
Ich habs an verschiedenen Stellen versucht. Wo genau soll ich das Symbol
erstellen?
Ich habe nun in Settings -> Tools -> Global compiler settins -> #defines
_SW_VERSION_ "${TARGET_OUTPUT_BASENAME}" erzeugt.
Ich bekomme als Fehlermeldung:
1V9 No such file or directory
1V9, so heisst das Projekt
Danke für die Hilfe, aber ich glaube man hat hier das EmBitz zu weit von
Eclipse verfremdet. Die Menüeinträge gibts garnicht. Habe es aber
woanders gefunden:
Unter den BuildOptions kann ich dieses #define erzeugen:
SW_VERSION="${TARGET_OUTPUT_BASENAME}"
Im Programm mache ich dann folgendes:
1
constcharTimeStampBuildTime[]=SW_VERSION;
Das wirft aber die Fehlermeldung "invalid suffix "V9" on integer
constant".
Das heisst, er erzeugt ein #define, welches einen String statt einer
Zahl erhält. Damit kommt er nicht klar. Irgendwo habe ich noch n Fehler
in der Syntax offensichtlich. Aber einen String als #define is sowieso
schwierig oder? Kannst du mir da noch n Tip geben wo der Hase begraben
liegt?
Ingo Less schrieb:> Danke für die Hilfe, aber ich glaube man hat hier das EmBitz zu weit von> Eclipse verfremdet.
EmBitz? Ich dachte es geht um System Workbench?
Ingo Less schrieb:> Das heisst, er erzeugt ein #define, welches einen String statt einer> Zahl erhält
Genau umgekehrt.
Ingo Less schrieb:> Aber einen String als #define is sowieso schwierig oder?
Nö, da müssen nur Anführungsstriche drum, wie von Bauform B. gezeigt.
Ingo Less schrieb:> Unter den BuildOptions kann ich dieses #define erzeugen:> SW_VERSION="${TARGET_OUTPUT_BASENAME}
Das klingt stark nach Code::Blocks, also doch EmBitz. Da helfen die
Hinweise zu Eclipse natürlich überhaupt nicht. Aber warum war dann zu
Anfang die Rede von System Workbench?
Programmierer schrieb:> Das klingt stark nach Code::Blocks, also doch EmBitz
Verdammte Axt, du hast natürlich völlig Recht, es ging hier um EmBitz!
Normalerweise arbeite ich mit System Workbench, habe aber noch ein altes
Projekt aus EmBitz wieder beleben müssen, da habe ich mich anfangs
gleich vertan -.-