Byte an digitaler Schnittstelle ausgeben



  • Die LIB und die DLL sind nicht gleichwertig.
    Die LIB macht den Umgang mit der DLL leichter.

    Z.B das laden/freigeben der DLL.



  • Leute, welche gleichnamige Libs und Dlls in einem Projekt verwenden, sind entweder Stümper (die wissen nicht was sie tun) oder masochistisch veranlagt (hinsichtlich Fehlersuche/Debugging/Wartbarkeit/...)





  • erst eimal danke für die antworten, ihr habt mir sehr geholfen!

    das Programm funktioniert soweit, aber es dürfte ein Problem bzgl. Compiler geben. Ich habe es mit dem GCC COmpiler kompiliert, da bekomme ich als Error "Windriver Board Initialization Failure".
    Hat da jemand diesbezgl. Erfahrung?
    Wenn ich es nun in Microsoft Visual C++ probiere (da müsste es funktionieren), kann ich den C-Code direkt übernhemen, oder?



  • huhu002 schrieb:

    Wenn ich es nun in Microsoft Visual C++ probiere (da müsste es funktionieren), kann ich den C-Code direkt übernhemen, oder?

    Eigentlich schon. Für welches Windows willst du das denn compilieren?



  • für Windows XP.

    Ich hab es jetzt in Visual C++ probiert, ergibt aber leider den gleichen Error.
    Kann es sein, dass Windows einfach den Zugriff auf die Hardware blockiert?



  • huhu002 schrieb:

    Ich hab es jetzt in Visual C++ probiert, ergibt aber leider den gleichen Error.
    Kann es sein, dass Windows einfach den Zugriff auf die Hardware blockiert?

    Ja klar.

    Wenn die Programme Direkt-IO machen gibt es ein Problem. Das ist ja auch der Grund warum outp nicht mehr funktioniert.
    Für den Zugriff als Nutzer sind ja die Gerätetreiber da.

    Lass das Programm mal mit Administratorenrechte laufen.
    (Rechte Maustaste und Ausführen als ...)



  • so, nun funktioniert es! Das Problem war eine interne Fehlerabfrage der Config-Funktion mit einer if-Schleife, die er wohl unbedingt haben wollte...

    aber gleich noch eine Frage an den Profi 😉 : wie kann ich in C einen delay setzen, so wie "time.sleep(sec) in python? Also z.B. eine for-Schleife mit zwei Befehlen, zwischen denen z.B. 2 Sekunden vergehen sollen.



  • Unter Windows gibt es Sleep(ms); // Millisekunden warten
    Bei den *ix*en gibt es sleep(s); // Sekunden warten
    und aus der #include <unistd.h> auch usleep(us); // Mikrosekunden warten

    Wobei alle Funktionen einen Integer oder Long-Wert erwarten. (Nix mit sleep(0.2))

    Es gibt noch select aus den socket/winsock das man mißbrauchen kann.

    struct timeval    timeout;
    
         timeout.tv_sec  =  2;
         timeout.tv_usec =  0;
         select (0, NULL, NULL, NULL, &timeout);
    

    Oder wenn es gar nichts anderes gibt:

    void delay_ms(unsigned ms)
    { clock_t  zeit, timeout;
    
      zeit = clock();
      timeout = (ms) * (CLOCKS_PER_SEC / 1000);
    
       while (clock() - zeit < timeout); 
     }
    

    Das fährt aber die Prozessorlast hoch.



  • danke erstmals!

    aber wenn ich mit #include <unistd.h> die unistd.h einbinde und dann usleep() verwende, bekomme ich die Fehlermeldung, dass er in der unistd.h "getopt.h" nicht findet...was kann das sein?



  • huhu002 schrieb:

    aber wenn ich mit #include <unistd.h> die unistd.h einbinde und dann usleep() verwende, bekomme ich die Fehlermeldung, dass er in der unistd.h "getopt.h" nicht findet...was kann das sein?

    Das mit usleep ist die Fortsetztung von "Bei den *ix*en ...".

    Du hast Windows.



  • aber auch wenn ich windows.h inkludiere und Sleep() verwende, bekomme ich Fehlermeldungen aus der WinDef.h...



  • Das kann nicht sein. Sleep gehört zur WinAPI, du machst etwas falsch.


Anmelden zum Antworten