Programmieren der seriellen Schnittstelle...

Diskutiere mit über: Programmieren der seriellen Schnittstelle... im Mac OS X Entwickler, Programmierer Forum

  1. dancedog

    dancedog Thread Starter MacUser Mitglied

    Beiträge:
    7
    Zustimmungen:
    0
    Registriert seit:
    13.03.2005
    Hi, ich muss für ein Schulprojekt etwas mit dem Intelligent Interface von Fischertechnik programmieren. Diese Hardware ist schon etwas älter und benötigt einen seriellen Port. Ich hab mir einen Usb-Seriell Adapter besorgt und installiert (taucht unter /dev/tty.usbserial-blabla) auf.

    Nun habe ich folgendes Problem:
    So funktioniert das raussenden über die Schnittstelle:
    Code:
    #include<stdio.h>
    #include<unistd.h>
    #include<fcntl.h>
    
    int main()
    {
            FILE *fd;
    
            fd= fopen("/dev/tty.usbserial-FTCTD5IY","w");
    
            int i;
            for(i=0;i<=10000;i++);
            {
            fputc(193,fd);
            fputc(1,fd);
            }
    
            fclose(fd);
    }
    
    Dass das nicht schön ist, weiss ich. Deshalb habe ich mit termios auch etwas feineres versucht - klappt aber nicht. Jetzt bin ich mal ganz banal daran gegangen und hab es über Low-Level versucht:

    Code:
    #include<stdio.h>
    #include<string.h>
    #include<unistd.h>
    #include<fcntl.h>
    #include<errno.h>
    #include<termios.h>
    
    int main()
    {
            int fd;
            fd = open("/dev/tty.usbserial-FTCTD5IY", O_RDWR | O_NOCTTY | O_NDELAY);
            if(fd == -1)
            {
                    perror("Fehler beim Oeffnen:");
            }
    
            unsigned char befehl1=193;
            unsigned char befehl2=1;
    
            int i=0;
            for(i=0;i<20;i++)
            {
                    int rt=10;
                    rt = write(fd,&befehl1,1);
                    int rt2=10;
                    rt2 = write(fd,&befehl2,1);
    
                    if(rt == -1 || rt2 == -1)
                    {
                            perror("Fehler beim Schreiben");
                    }
            }
    
            close(fd);
    }
    
    Hierbei bleibt das Programm beim ersten write-Befehl hängen und macht nichts mehr!

    Innerhalb meine termios-Programms findet folgendes statt:
    -->schnipp
    Code:
    unsigned char firstbyte = 0xc1; //das gleich wie dez. 193
    rt1=write(fd, &firstbyte, 1);
    if(rt1 == -1)
         printf("Schreiben auf Schnittstelle: %s\n",strerror(errno));
    
    <---schnapp

    Wenn ich das Programm nun ausführe, kommt folgendes:
    --> Schreiben auf Schnittstelle: Resource temporarily unavailable


    Gibts da bei Apple einen Kniff, von dem ich nichts weiß?

    Hoffe, Ihr könnt mir helfen....bin langsam etwas ratlos.
    Achja, an den Permissions dürfte es nicht liegen, die sind:
    crw-rw-rw- 1 root wheel 8, 6 9 Aug 18:22 /dev/tty.usbserial-FTCTD5IY

    Gruß,
    Leon
     
  2. below

    below MacUser Mitglied

    Beiträge:
    13.882
    Zustimmungen:
    1.086
    Registriert seit:
    15.03.2004
    Komisch, dass das erste funktioniert, und das zweite nicht...

    Ich seh da im Moment auch nichts.

    Alex
     
  3. vava

    vava Gast

  4. dpr

    dpr MacUser Mitglied

    Beiträge:
    519
    Zustimmungen:
    0
    Registriert seit:
    04.04.2006
    Schuß ins Blaue, aber da es aus Deinem Beispiel nicht hervorgeht: Du hast die Schnittstelle aber schon mittels tcsetattr und den korrekten Werten für z.B. Parität, Stopbit etc. pp. initialisiert?

    http://www.erlenstar.demon.co.uk/unix/faq_4.html#SEC53

    EDITh meint: Und wieder zu langsam, aber offensichtlich auf dem richtigen Weg ;-)
     
  5. dancedog

    dancedog Thread Starter MacUser Mitglied

    Beiträge:
    7
    Zustimmungen:
    0
    Registriert seit:
    13.03.2005
    Danke für eure Tipps. Besonders der Link zum Quelltextbeispiel ist richtig gut - irgendwie habe ich das Beispiel beim Streifzug durch die Dokumentation nicht gesehen - das werde ich mir näher anschauen.

    Ich melde mich nochmal und erzähle, woran es lag.

    Gruß,
    Leon
     
  6. moses_78

    moses_78 MacUser Mitglied

    Beiträge:
    1.322
    Zustimmungen:
    22
    Registriert seit:
    08.04.2005
    darf man fragen, was ,,tty.usbserial-FTCTD5IY´´ für eine
    schnittstelle ist, und vor allem, wo die sich befindet?

    mich interessiert das thema z.zt. nämlich auch.

    edit. hat sich erledigt, hätte das eröffnungsposting
    besser lesen sollen.
     
  7. danlo

    danlo MacUser Mitglied

    Beiträge:
    372
    Zustimmungen:
    0
    Registriert seit:
    03.09.2005
  8. dancedog

    dancedog Thread Starter MacUser Mitglied

    Beiträge:
    7
    Zustimmungen:
    0
    Registriert seit:
    13.03.2005
    Funktioniert soweit, aber Schnittstelle schmiert ab

    So, das Programm funktioniert jetzt nach vielen Stunden grübeln und frickeln endlich. Leider habe ich jetzt ein neues Problem, bei dem ich nicht so genau weiterweiß:
    Ich lasse das Programm einmal durchlaufen - alles läuft prima. Ich lass das Programm ein zweites mal laufen (das läuft bei mir noch über eine for schleife ab, die 50 mal durchläuft, später soll dies durch eine while ersetzt werden mit einem signal oder ähnlichem (interrupt?) und dann sich ordnungsgemäß beenden) und bei der mitte bleibt es stehen und das wars. Programm reagiert nicht mehr, man darf mit kill -9 oder terminate in xcode abschießen. Danach ist die serielle Schnittstelle noch immer geöffnet und somit darf man in win-manier neu starten.....

    Gibt es eine Möglichkeit, einen Filedeskriptor nachträglich gewaltsam zu schließen? Und gibt es vielleicht funktionierene Tools im Netz die mir sagen "Hallo du doofer programmierer, du hast hier ein speicherloch aufgerissen, weswegen du keine freude haben wirst" ?


    Schonmal Danke im voraus,
    Leon
     
Die Seite wird geladen...
Ähnliche Themen - Programmieren seriellen Schnittstelle Forum Datum
Stagecast Programmieren für Kids Probleme mit Java Mac OS X Entwickler, Programmierer 10.05.2015
Ein Bild "programmieren" -> Mit welcher Umgebung und möglichst geringem Aufwand Mac OS X Entwickler, Programmierer 09.01.2015
Xcode Programm in einer interaktiven Konsole starten Mac OS X Entwickler, Programmierer 22.09.2014
Android programmieren auf Mavericks? Mac OS X Entwickler, Programmierer 09.02.2014
C mit Eclipse programmieren (Xcode bereits installiert) funktioniert nicht! Mac OS X Entwickler, Programmierer 12.11.2012

Diese Seite empfehlen

Benutzerdefinierte Suche