Les Allergies
Alimentaires
Posez votre question Signaler

Besoin d'Explication sur fonctions en C.Merci

Driveloc - Dernière réponse le 2 nov. 2010 à 17:00
Bonjour,
Je suis vraiment bloqué, es que quelqu'un pourrai me donner un coup de main s'il vous plait. Il y a pas mal de chose que je ne connais pas car je n'es pa un bon niveau en C. Es que quelqu'un pourrai m'expliquer s'il vous plaît le type des fonctions qu'il y a, et ce qu'elle font.(le nom des variables n'est pas important, dans un premier temps j'essaye simplement de comprendre le fonctionnement des fonctions)
Merci, j'essaye de comprendre ces fonctions car je dois les modifier. En les comprenant je pourrai le faire.
Merci pour votre aide.
#define USE_DMA 1
#define SSP_SFRM 24
#define SSP_IRQ 22
#define GSPI_DIRECT_MAJOR 240
#define SFRM_DOWN 0
#define SFRM_UP 1
static void
dma_irqr(int dma, void *devid, struct pt_regs *regs)
{
gspihost_info_t *gspiinfo = (gspihost_info_t *) devid;
u32 dcsr;
u32 ddadr;
int chan = gspiinfo->chan;
ddadr = DDADR(chan);
dcsr = DCSR(chan);
DCSR(chan) = dcsr & ~DCSR_STOPIRQEN;
/* bus error */
if (dcsr & DCSR_BUSERR) {
dcsr |= DCSR_BUSERR;
goto complete;
}
/* data transfer completed */
if (dcsr & DCSR_ENDINTR) {
goto complete;
}
return;
complete:
gspiinfo->dma_txack = 1;
wake_up_interruptible(&(gspiinfo->queue_tx));
return;
}
static void
dma_irqw(int dma, void *devid, struct pt_regs *regs)
{
gspihost_info_t *gspiinfo = (gspihost_info_t *) devid;
u32 dcsr;
u32 ddadr;
int chanrw = gspiinfo->chanrw;
ddadr = DDADR(chanrw);
dcsr = DCSR(chanrw);
DCSR(chanrw) = dcsr & ~DCSR_STOPIRQEN;
/* bus error */
if (dcsr & DCSR_BUSERR) {
dcsr |= DCSR_BUSERR;
goto complete;
}
/* data transfer completed */
if (dcsr & DCSR_ENDINTR) {
goto complete;
}
return;
complete:
gspiinfo->dma_txack = 1;
wake_up_interruptible(&(gspiinfo->queue_tx));
return;
}
static inline int
gspi_acquire_io(gspihost_info_t * gspiinfop)
{
int ret;
if (!gspiinfop) {
ret = -EINVAL;
goto error;
}
down(&gspiinfop->host_sem);
_PRINTK("Acquired Semaphore@ %lu\n", jiffies);
ret = 0;
error:
return ret;
}
static inline void
gspi_release_io(gspihost_info_t * gspiinfop)
{
if (!gspiinfop) {
goto error;
}
up(&gspiinfop->host_sem);
_PRINTK("Released Semaphore@ %lu\n", jiffies);
error:
return;
}
Lire la suite 

Besoin d'Explication sur fonctions en C.Merci »

Suggestions
9 réponses
Réponse
+0
moins plus
Ajouter un commentaire
Réponse
-1
moins plus
Salut,

Il y a deux types de fonctions en gros, celles qui renvoient quelque chose (avec un return) du genre int fonction(param), et celles qui ne renvoient rien du genre void fonction(param). Il y a plusieurs appellations possibles pour les différencier ne te focalise pas dessus. Pour les void fonctions() qui ne renvoient rien, on peut quand même mémoriser les changements en utilisant par exemple des pointeurs, c'est à dire qu'on travaille directement sur la zone mémoire et non sur des variables.

Voilou
Stupeflip- 27 avril 2007 à 12:08
gspihost_info_t *gspiinfo = (gspihost_info_t *) devid; 
C'est juste une affectation (opérateur '=') entre une structure déclarée gspiinfo de type gspihost_info en tant que pointeur, initialisée à devid casté en tant que gspihost_info_t *.
Une exemple plus simple de ce que ça fait :
int a=2;
float b=(float)a;

dcsr |= DCSR_BUSERR; 
On travaille en hexa/binaire avec des masques, |= veut dire "ou égal" (si je dis pas de bêtises).

wake_up_interruptible(&(gspiinfo->queue_tx)); 
Si tu ne comprends pas le paramètre, ça veut dire une structure pointée, c'est-à-dire que tu dois utiliser '->' au lieu de '.' pour utiliser les valeurs de la structures, et le & indique que tu parles de la valeur et non de l'adresse.

Voilou j'espère n'avoir pas dit de bêtises ;)
Driveloc - 27 avril 2007 à 12:34
Merci pour ton aide c cool!
Driveloc - 27 avril 2007 à 14:58
Je n'ai pas compris ça aussi

GPCR0 = (1 << SSP_SFRM);
Ajouter un commentaire
Ce document intitulé « Besoin d'Explication sur fonctions en C.Merci » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?