PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Compiler-Zeit



chientech
28.10.2006, 18:37
Hi,

Bei Visual C++ kann man sich Datum und Compilier-Uhrzeit Ausgeben lassen, so ne art Zeitstempel.
Geht das auch in AVR_Studio? Wie?

Ich möchte wann immer ich meinen Mega32 starte die Programmversion sowie Uhrzeit und Datum des Programms auf einem Display ausgeben. Ich habe schon zu oft einen Fehler im falschen Code gesucht.

izaseba
28.10.2006, 19:27
Hallo,

Mit "Normal" C gibt es gibt es diese Präprozessor Konstanten



__LINE__
__FILE__
__DATE__
__TIME__


Du mußt nur prüfen, ob sie auch bei avr-gcc dabei sind, das weiß ich nähmlich nicht

Gruß Sebastian

SprinterSB
28.10.2006, 23:48
Die Compile-Zeit erhält du wie in
https://www.roboternetz.de/wissen/index.php/Avr-gcc#GCC

Wenn du die Build-Zeit willst, mach das am besten im Makefile. Date und Time in eine Datei pipen, compileren und dazulinken. Oder du erzwingst die Compilierung des entsprechenden C/C++-Moduls über ein .PHONY.

chientech
29.10.2006, 21:28
Hi, Danke für die Hilfe

Aber was genau gibt dieser Ausdruck zurück?

__DATE__
Löst auf zum Datum (precompile-date)

Einen String oder einen Codierten Integer Wert oder lieg ich vollig falsch?
Wie kann ich das einsetzen?

izaseba
30.10.2006, 00:31
Also in "normal" (am PC) C würde ich das so machen :


#include<stdio.h>

int main(void) {
printf("Wir befinden und is der %i Zeile\n",__LINE__);
printf("Kompiliert am %s\n",__DATE__);
printf("Um %s\n",__TIME__);
return 0;
}


nur avr-gcc ...

Moment mal

__TIME__ wird vom Präprozessor zu Kompilerzeit ersetzt, habe gerade einen Test gemacht :



const char kompilierzeit[] PROGMEM = __TIME__;


Hat keinen Fehler ergeben, das ist schon ein gutes Zeichen.
Am AVR darfst Du das selber ausprobieren :-)

__TIME__ und __DATE__ sind normale Strings mit diesem Format:


Oct 30 2006
00:23:51


Gruß und viel Erfolg

Sebastian

chientech
30.10.2006, 10:30
Danke ich werd es demnächst mal riskieren.

Cluni
30.10.2006, 16:57
Hi!

Das geht auf jeden Fall - kannst einfach irgendwo z.B.
uart_puts_p(PSTR("Build: v1.01 - " __DATE__"\r")); einbauen. Einziger Haken: Man muss irgendwie sicherstellen, dass diese Datei immer neu kompiliert wird. Da kommt dann für heute "Build: v1.01 - Oct 30 2006" raus.

Gruß, Bernd

izaseba
30.10.2006, 22:21
Hallo,
da ich auch sehr schlampig bin, was Verwaltung von Versionen angeht und nach 1 Monat nicht mehr weiß, welche Version jetzt auf dem µC drauf ist und in welchem Code ich den Fehler zu suchen habe, benutze ich schon länger RCS.
Es ist ein Versionsverwalttungstool, wo man mehrere Versionen einer Datei
sehr schön bearbeiten kann.
Hier (http://www.bsdforen.de/showthread.php?t=338) findet man z.B. eine kurze Beschreibung.
Das schöne daran ist, daß ich in meinem Code verschiedene Variablen benutzen kann, die Variable $Revision$ wird z.B. im Programm zu der aktuellen Version aufgelöst.
Bei jedem Checkin wird das natürlich aktualisiert.
Ich habe es ausprobiert, und es klappt sehr gut, ein


static char vcid[] PROGMEM = "$Revision:$";


ergibt dann in meinem Display folgende Anzeige :


$Revision: 1.4 $"


So sehe ich dann direkt, daß ich die Version 1.4 auf dem Prozessor drauf habe, und das ist um einiges besser als __DATE__ was mir das Datum nach jedem Kompilieren verändert.

Vielleicht ist das was für Dich, ich bin jederfalls froh, durch Deine Anfrage hier darauf gekommenzusein :-)

Gruß Sebastian

chientech
01.11.2006, 00:06
Danke, das mit mit RCS ist mir für meine bescheidenen Anwendungen zu umfangreich da ich den Umgang in den ersten paar Minuten nicht verstanden hab (ist vielleicht was für Profis und welche die in großen Projekten den Überblick behalten wollen.)

Für mich genügt Datum und Urzeit und ich weiß zumindest das, das was ich übertragen hab auch das ist was ich grad geändert hab. Das funzt jetzt nochmals Danke.

chientech
02.11.2006, 16:17
Hi,

ist es möglich im AVR Studio einzustellen, dass ein bestimmter Qelltext immer mit Compiliert wird auch wenn sich dieser nicht verändert hat?

SprinterSB
02.11.2006, 16:58
Das entscheidet nicht AVR-Studio, sondern dein Makefile.

Dort kannst du ein .PHONY Target machen und dieses zu all dazunehmen:



.PHONY machs-mir

all: machs-mir ...

machs-mir:
# Das hier wird immer ausgeführt, wenn auch all gemacht wird


Achte auf die TABs!

chientech
02.11.2006, 19:20
@SprinterSB

Danke, aber ich fürchte du musst mir das etwas genauer erklären.

Wo muss ich das wie einfügen.
Ich weiß garnicht genau was ein Makefile ist.

Ich benutz AVR Studio zum Programmieren und lade das hexFile mit Ponyprog auf den Controller, wo stolpere ich dabei über das makefile?

SprinterSB
02.11.2006, 21:49
In AStudio geht das nicht gut. Das generiert das Makefile automatisch. Das kannst du zwar abstellen in den Config-Options und das Makefile von Studio von Hand weitereditieren, aber wenn du was an deinem Projekt änderst reflektiert das Makefile diese Änderungen nicht mehr. Du hast dann die komplette Verantwortung für das Makefile.

Was anderes fällt mit nicht ein. Mehr kann ich dazu nicht sagen, ich benutze AStudio nicht. Ist mir zu klotzig und zu steif, wie man sieht...

Oder du machst den Cron-Job, der alle Sekunde die Datei toucht. Ok,Spaß beiseite ;-)