2011-06-29 5 views
1

Je suis en train d'écrire une tâche vxworks impliquant l'envoi de données via le port série. L'ouverture du port série est réussie. Mais lorsque j'essaie de définir le débit en bauds du port en utilisant l'appel système ioctl(), il échoue. Je donne le code ci-dessous. Quelqu'un peut-il s'il vous plaît apporter un peu de lumière à ce sujet? La deuxième fonction échoue toujours ...La définition du débit en bauds du port série échoue sur vxworks

int f, status; 

if (f = open("/tyCo/1", O_RDWR, 0) == ERROR) 
{ 
    printf("error opening serial port; exiting..."); 
    return 1; 
} 

if (status = ioctl(f, FIOBAUDRATE, 2400) == ERROR) 
{ 
    printf("ioctl error; exiting..."); 
    return 1; 
} 
+2

Juste pour être clair. Voulez-vous dire que vous ouvrez le port, puis définissez le débit en bauds? Si cela est correct, essayez de régler le débit en bauds, puis ouvrez le port. – dbasnett

+0

@dbasbett - ioctl() a besoin du descripteur de fichier renvoyé par l'appel open() - comment proposez-vous d'initialiser le débit en bauds? –

+0

m - Consultez la documentation de l'appareil que vous utilisez pour connaître les vitesses de transmission valides. Vérifiez également les paramètres de configuration sur l'appareil avec soin. –

Répondre

5

Peut-être est un peu trop tard, mais le code ci-dessus semble erroné. Opérateur d'affectation est moins prioritaire que la comparaison opérateur, donc vous devez écrire le code comme:

if((f = open("/tyCo/1", O_RDWR, 0)) == ERROR) 
{ 
    printf("error opening serial port; exiting..."); 
    return 1; 
} 

if((status = ioctl(f, FIOBAUDRATE, 2400)) == ERROR) 
{ 
    printf("ioctl error; exiting..."); 
    return 1; 
} 

De cette façon, il fonctionne parfaitement dans VxWorks. La façon dont vous avez écrit le code était d'affecter f soit 0 ou 1 (0 dans ce cas, car vous pouviez ouvrir le port série), puis essayé de définir le débit en bauds pour le descripteur 0 (je suppose que c'est l'ID stdout). Le même que vous avez attribué le statut soit 0 ou 1 (1 dans ce cas, parce que vous ne pouviez pas définir le débit en bauds, donc ioctl retourné -1)

+0

Excellente analyse! – QuasarDonkey