|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2007 Messages : 52 ![]() |
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. |
|
|
00
|
|
|
#2 | ||
|
Membre émérite
![]() ![]() Inscription : mai 2002 Messages : 727 ![]() |
Salut
Vérifie les types que tu utilise (déjà dans le bout de code que tu donne, la structure que tu déclare (CMAMP1) n'est pas celle que tu utilise (CHAMP)... Je suppose que c'est une erreur de frappe en recopiant ici Code :
foo.c:4: warning: type of bit-field `bit0' is a GCC extension
__________________
Smortex Les FAQ Assembleur - Linux In The Beginning Was The Command Line Neal Stephenson |
||
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2007 Messages : 52 ![]() |
Bonjour,
Merci pour ton aide. En effet tu as raison, j'ai comis une erreur en recopiant. C'est bien CHAMP Par contre toi tu définis les fonctions inb() et outb() alors que se sont deux fonctions déja existantes... J'ai réussi en castant de la manière suivante: *(unsigned char *)&champ=(unsigned char)inb(reg); outb(*(unsigned char *)&champ); Merci pour tin aide en tout cas !! |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Bidouille-tout Android Inscription : juillet 2006 Messages : 871 ![]() |
Super si c'est résolu, mais n'oublie pas le petit
en bas de page
__________________
C'est le signe d'un fou, qu'avoir honte d'apprendre Ubuntu 10.04 Lucid Lynx @home LE guide libre Linux & Ubuntu pour tous : Simple comme Ubuntu
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com