Probleme mit nanosleep() in Eclipse

OP #2328253
Lesenswert?

Hallo,

ich bin momentan dabei auf einem Linuxsystem einen seriellen Treiber zur 
Kommunikation mit einen LON Shortstack Microserver zu implementieren und 
diesen dann später auf einem embedded Linux laufen zu lassen.

Als Entwicklungsumgebung nutze ich Eclipse und als Compiler den GCC.

Zu Testzwecken habe ich versucht mit nanosleep() eine Funktion zur 
Verzögerung zu bauen. Hiermit will ich vermeiden das zu viele Daten auf 
den UART geschrieben werden.
1
#include <unistd.h>
2
#include <time.h>
3

4
void wait(int sec, long int nsec)
5
{
6
  struct timespec t;
7
  t.tv_nsec = nsec;
8
  t.tv_sec = sec;
9
  nanosleep(&t, NULL);
10
}

Das Compilieren via Makefile funktioniert problemlos. Allerdings meldet 
Eclipse zwei Fehler die vom Compiler nicht gemeldet werden.

Field 'tv_nsec' could not be resolved
Field 'tv_sec' could not be resolved

Ich könnt mir vorstellen das es an irgendwlechen Projekteinstellungen 
liegt das Eclipse evtl. die time.h nicht finden kann.

Hat vielleicht jemand eine Idee an was es liegen könnte?

Gruß

Erik
#2328348
Lesenswert?

Erik Wolf schrieb:

> Ich könnt mir vorstellen das es an irgendwlechen Projekteinstellungen
> liegt das Eclipse evtl. die time.h nicht finden kann.

Wenn der Compiler time.h nicht hätte finden können, hättest du eine 
entsprechende Fehlermeldung bekommen.

Schau doch mal in time.h hinein, such dir die struct timespec und sieh 
nach, wie die Member wirklich heißen.
Moderator Persönliche Seite #2328388
Lesenswert?

Karl Heinz Buchegger schrieb:
> Wenn der Compiler time.h nicht hätte finden können, hättest du eine
> entsprechende Fehlermeldung bekommen.

Klar, aber der hat seine eincompilierten Pfade, auf denen er das
sucht.  Die müssen nicht mit dem übereinstimmen, was Eclipse kennt.
Eclipse möchte das aber gern kennen, (offenbar) damit es im Debugger
weiß, welcher Datentyp sich dahinter verbirgt.

Man kann dem Compiler eine zusätzliche Option -v beim Compilieren
mitgeben, dann zeigt er an, welche Pfade er für include-Dateien
sucht.  Außerdem kann man sich mit dem Schalter -E das Zwischen-
ergebnis nach dem preprocessing ausgeben lassen, dort stehen die
tatsächlichen Pfadnamen dann drin, sodass man erfahren sollte, durch
welche Datei er das <time.h> aufgelöst hat.
OP #2328562
Lesenswert?

Karl Heinz Buchegger schrieb:
> Wenn der Compiler time.h nicht hätte finden können, hättest du eine
> entsprechende Fehlermeldung bekommen.

Genau, vom Compiler habe ich keiner Fehlermeldung bekommen. Der macht es 
offensichtlich richtig, zumal die Funktion ja auch wie gewollt 
funktioniert. Nur Eclipse leider nicht.

> Schau doch mal in time.h hinein, such dir die struct timespec und sieh
> nach, wie die Member wirklich heißen.

Habe ich gemacht.
1
struct timespec
2
  {
3
    __time_t tv_sec;    /* Seconds.  */
4
    long int tv_nsec;    /* Nanoseconds.  */
5
  };

Jörg Wunsch schrieb:
> Man kann dem Compiler eine zusätzliche Option -v beim Compilieren
> mitgeben, dann zeigt er an, welche Pfade er für include-Dateien
> sucht.  Außerdem kann man sich mit dem Schalter -E das Zwischen-
> ergebnis nach dem preprocessing ausgeben lassen, dort stehen die
> tatsächlichen Pfadnamen dann drin, sodass man erfahren sollte, durch
> welche Datei er das <time.h> aufgelöst hat.

#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5.2/include
 /usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5.2/include-fixed
 /usr/include/i386-linux-gnu
 /usr/include

Mein Eclipse sucht in genau den gleichen Verzeichnissen.
#2328610
Lesenswert?

Erik Wolf schrieb:
> Karl Heinz Buchegger schrieb:
>> Wenn der Compiler time.h nicht hätte finden können, hättest du eine
>> entsprechende Fehlermeldung bekommen.
>
> Genau, vom Compiler habe ich keiner Fehlermeldung bekommen. Der macht es
> offensichtlich richtig, zumal die Funktion ja auch wie gewollt
> funktioniert. Nur Eclipse leider nicht.

Ah mein Fehler.
Das hab ich überlesen.
Entschuldigung.

Vergiss die Sache mit time.h  Jörg hat das IMHO bereits korrekt 
diagnostiziert: Diskrepanz zwischen den Include-Verzeichnissen des 
Compilers und der IDE

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren