Forum: Mikrocontroller und Digitale Elektronik time.h Datei fehlt


von Der M. (naeschd)


Lesenswert?

Hey...

Ich benötige die time.h (GCC)... Die Datei ist bei mir aber nicht als 
Standardlib vorhanden. Ich dreh noch durch weil ich sie auch nicht in 
google finde...

Könnte mir die bitte jemand kurz posten oder hochladen?
Vielen Dank
Matze

von Unbekannt U. (Gast)


Lesenswert?

> Könnte mir die bitte jemand kurz posten oder hochladen?

Kein Problem. Hier ist sie (der Bereich zwischen BEGIN und END):

--- BEGIN  ---


--- END --

Hoffe geholfen zu haben!

von Uwe .. (uwegw)


Lesenswert?

Wie hast du den GCC (welche Version?) installiert? Windows oder Linux?

von Der M. (naeschd)


Lesenswert?

Ich habe das neueste WinAVR installiert (20090313). Dann habe ich AVR 
Studio 4.18 installiert.
Alles unter Windows 7...

von Karl H. (kbuchegg)


Lesenswert?

Und wofür benötigst du time.h?

Das Fehlen diese Headers mag wohl daran liegen, dass eine Standard-Uhr 
auf einem AVR nicht vorausgesetzt werden kann und sich jeder 
Programmierer sowieso seine eigenen Uhrenroutinen selber schreibt um zb 
32 Bit Arithmetik zu umgehen.
Und die Konvertier- und Formatierfunktionen: na ja. Die schreibt sich 
soweiso jeder selber bzw sie sind unnötig, weil man eben einen Zeitwert 
auf einem AVR geschickter Weise nicht als 32-Bit long speichert.

Schau dir einfach nur mal die struct tm an:
1
struct tm {
2
  int tm_sec;  // Sekunden nach der vollen Minute (0, 61)* 
3
  int tm_min;  // Minuten nach der vollen Stunde (0, 59) 
4
  int tm_hour; // Stunden seit Mitternacht (0, 23) 
5
  int tm_mday; // Tage im Monat (1, 31) 
6
  int tm_mon;  // Monate seit Januar (0, 11) 
7
  int tm_year; // Jahre seit 1900 
8
  int tm_wday; // Tage seit Sonntag (0, 6) 
9
  int tm_yday; // Tage seit dem 1. Januar (0, 365) 
10
  int tm_isdst; // Kennzeichen für Sommerzeit 
11
};

alles int. Wer sowas auf einem AVR macht, sollte sofort eine mit einem 
nassen Fetzen verpasst bekommen.

von Der M. (naeschd)


Lesenswert?

Karl heinz Buchegger schrieb:
> Und wofür benötigst du time.h?

Um Zufallszahlen zu erzeugen

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

time.h muss laut C-Standard bei "freestanding" Umgebungen (Umgebungen 
ohne Betriebssystem) nicht vorhanden sein. Der AVR ist so eine Umgebung 
und es gibt keine time.h.

Wer weiß was in time.h drin sein muss sieht auch sofort warum. Der Rest 
stimmt an dieser Stelle immer das große Gejammer "könnte man nicht ...?" 
an.

von Karl H. (kbuchegg)


Lesenswert?

Der Matze schrieb:
> Karl heinz Buchegger schrieb:
>> Und wofür benötigst du time.h?
>
> Um Zufallszahlen zu erzeugen

Aha.
Und wie soll sich eine Library aus einer nicht existenten Realtime-Clock 
die Uhrzeit aus den Fingern saugen?

von Der M. (naeschd)


Lesenswert?

Wie kann ich denn dann am einfachsten Zufallszahlen mit GCC erzeugen?

Ist bestimmt einfach aber ich brauch einfach nen kurzen Anstoß.
Danke!

von Karl H. (kbuchegg)


Lesenswert?

Der Matze schrieb:
> Wie kann ich denn dann am einfachsten Zufallszahlen mit GCC erzeugen?

rand()
ist schon ok.

Die Frage ist: womit seedest du den Generator ganz am Anfang. Wenn du 
nichts anderes hast, dann nimm eine Konstante.
Du kannst auch am Anfang eine Variable ständig hochzählen, bis der 
Benutzer eine Taste drückt und diese Zahl dann als Seed benutzen.

von Klaus W. (mfgkw)


Lesenswert?

Lt. ANSI-C gibt es eine Funktion rand() und eine srand() in stdlib.h.

von Klaus W. (mfgkw)


Lesenswert?

ok, khb war mal wieder schneller.

Man könnte auch im EEPROM einen Wert bei jedem Neustart
auslesen und weitersetzen, und den für srand() nehmen.

von Karl H. (kbuchegg)


Lesenswert?

Klaus Wachtler schrieb:
> Lt. ANSI-C gibt es eine Funktion rand() und eine srand() in stdlib.h.

:-)
Ich versteh schon was sein Problem ist.

Er hat des Öfteren gesehen (und das ist durchaus üblich so)
1
int main()
2
{
3
4
  srand( time( NULL ) );
5
6
...

Tja. Nur so wird das auf seinem AVR nichts. Es gibt nun mal keine 
aktuelle Uhrzeit :-)

von Karl H. (kbuchegg)


Lesenswert?

Klaus Wachtler schrieb:

> Man könnte auch im EEPROM einen Wert bei jedem Neustart
> auslesen und weitersetzen, und den für srand() nehmen.

Gute Idee. Daran hab ich wieder nicht gedacht.

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.