Bonjour,
Je suis actuellement en train d'écrire un driver sous Linux (donc dans l'espace noyau) pour un carte d'acquisition entrees/sorties.
Je suis actuellement en train d'essayer de modifier certains registres de ma carte. Donc pour les modifier, et pour rendre mon code bien plus lisible que de simples valeurs hexadécimales, je souhaite utiliser les champs de bits. Les fonctions que j'utilise sont donc "inb()" et "outb()".
Pour écrire certains bits a '1' et d'autres à '0', j'utilise la méthode suivante:
- lecture de mon registre actuel en faisant un "inb()"
- copie de celui-ci dans mon champ de bits
- définition des bits
- ecriture dans le registre avec "oub()"
Mon programme ressemble donc à ca:
typedef struct{
unsigned char bit0 :1;
[...]
}CHAMP1;
{
[...]
CHAMP champ;
[...]
champ=inb(reg);
champ.bit0=1;
out(champ,reg);
[...]
}
Lorsque je compile j'ai les erreurs suivantes:
- "incompatible type in assignment" pour la ligne "champ=inb(reg);"
- "incompatible type for argument 1 of 'outb'" pour la ligne "out(champ,reg);"
Auriez-vous une idée pour résoudre ces erreurs ?
J'ai essayé de typecasté avec (unsigned char), (char) mais ça ne fonctionne toujours pas...
Je vous remercie d'avance pour votre aide.
Partager