pb d'arg avec ioctl pour une rs232 en mode RAW

pb d'arg avec ioctl pour une rs232 en mode RAW - C - Programmation

Marsh Posté le 18-08-2004 à 21:37:43    

salut
 
je developpe un logiciel en c sur noyau vxworks avec cible PPC604.
J'utilise une rs232 en Raw car protocole propriétaire avec un periph externe.
pour ne pas bloquer le soft, avant d'utiliser le read, je rgarde le nombre d'octet contenu dans le buffer de l'uart. Mon pb est que le troisieme arg de ioctl(FD,FIONREAD, int ...) est un int alors que les exemples montre un pointeur ??§§§§!!!!
donc soit j'ai pas la bonne lib supplementaire soit j'ai pas pigé un truc. D'ailleurs le compilo m'indique qu'il force le cast d'un pointeur vers un int.
 
merci d'avance
 
 

Reply

Marsh Posté le 18-08-2004 à 21:37:43   

Reply

Marsh Posté le 18-08-2004 à 22:54:04    

Il me semble que l'ioctl() de VxWorks traite le troisième argument comme un pointeur, bien que ce soit un int [:ddr555]

Reply

Marsh Posté le 18-08-2004 à 23:08:42    

a priori non car à la compil j'ai un warning:  
"arg3 makes pointer to integer without cast". je pense qu'il me manque la bonne lib....  mais laquelle ?
 
surtout que tous les exemples que je vois traite la focntion avec un pointeur.

Reply

Marsh Posté le 18-08-2004 à 23:11:51    

j'ai aussi un doute sur le mode RAW et LINE l'un n'est pas bufferisé l'autre si. comme j'utilise ioctl avec FIONREAD pour recuperer le nombre d'octets non lus dans le buffer, le mode RAW me laisse perplexe.
Le mode LINE n'est pas compatible avec mon protocole de messages.

Reply

Marsh Posté le 19-08-2004 à 00:17:31    

Shooting Star a écrit :

a priori non car à la compil j'ai un warning:  
"arg3 makes pointer to integer without cast". je pense qu'il me manque la bonne lib....  mais laquelle ?
 
surtout que tous les exemples que je vois traite la focntion avec un pointeur.


 
C'est que je viens de dire :p
Le prototype spécifie un int, qui est utilisé comme un "arbitrary argument" selon la doc. Tu peux lui passer un pointeur.

Reply

Marsh Posté le 19-08-2004 à 20:25:15    

j'ai trouve la solution.
en fait pour faire disparaitre le warning il faut forcer le cast avec (int) sur l'adresse de la donnée.Et effectivement il faut passer une adresse.
neanmoins la fonction ne marche pas si la taille du parametre passé par adresse n'est pas la meme que celle de int (meme avec un cast).
 
Dans mon cas le int est un long int (powerpc604) et j'avais declaré un short int en pensant que le int de base etait de ce type.
 
merci de ta contribution.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed