Hi
Ich habe mir einen einfachen Zähler in VHDL geschrieben und den in mein
EDK Design eingebunden (Xilinx). Nun möchte ich einfach mittels C
Programm und den Funktionen aus dem Header "time.h", die laut
Dokumentation implementiert sein sollen, den Wert des Zählers auslesen,
diesen mit einem Zeitstempel versehen und an einen anderen Rechner
schicken. Das klappte soweit auch alles ganz schön, nur leider stimmt
die Zeit nicht. Ich bekomme also immer schön den 1.1.1970 00:00:xx
angezeigt. Wobei die Sekunden dem ersten Anschein nach auch nur bis 40
hochgezählt werden und danach kommt es irgendwie zu einem Reset.
Möglich, dass der "Reset" beim aufruf der time() Funktion an den Reset
meines Zählers geknüpft ist...warum, weiß ich aber nicht. Hier mal ein
bisschen Code:
1 | while(1)
|
2 | {
|
3 | CounterValue = MY_COUNTER_mReadSlaveReg2(MY_COUNTER,0);
|
4 | //printf("%u\r\n",CounterValue);
|
5 | if(CounterValue >= CompareValueMin && CounterValue <= CompareValueMax)
|
6 | {
|
7 | //Uhrzeit und Zählerstand an den Host Schicken
|
8 | now = time(0);
|
9 | strftime(TimeAndCounter, 22, "%d.%m.%Y - %H:%M:%S : ", localtime(&now));
|
10 | sprintf(TimerValueStr, " %u\n", CounterValue);
|
11 | strcat(TimeAndCounter, TimerValueStr);
|
12 | if(Output_Socket_Thread(TimeAndCounter) < 0)
|
13 | {
|
14 | printf("Error: Output_Socket_Thread()\r\n");
|
15 | }
|
16 | printf("%s\r\n",TimeAndCounter);
|
17 | }
|
18 | if(CounterValue >= 3345)
|
19 | {
|
20 | ResetCounter();
|
21 | StartCounter();
|
22 | }
|
23 | }
|
Von diesem Reset mal abgesehen, ist halt die Frage, wie ich wirklich zur
realen Uhrzeit komme. Nun hat der FPGA offensichtlich keine eigene
Zeitbasis und ich vermute, der PPC Kern dadurch auch nicht. Gibt es aber
eine Möglichkeit trotzdem die aktuelle Zeit zu bekommen? Im weiteren
Projektverlauf wäre sowas schon recht wichtig und deswegen wäre es gut,
wenn es eine Lösung gibt.
Vielen Dank schonmal für eure Antworten und bitte ruhig fragen Stellen,
wenn noch was fehlt oder offen ist.