Sémaphores casting et adressage

Fermé
lacroba.te - 11 nov. 2010 à 14:11
Bonjour,

Je suis tombé sur une doc qui explique comment reserver un bit (pour une sémaphore) dans une section (bdata) de la mémoire.

voici le bout de code:

// programme en c definissant les sémaphores

char bdata sema8_1; //que fait cette ligne?

#define SEMA0 ((((char)&sema8_1)-0x20)*8)
#define SEMA1 ((((char)&sema8_1)-0x20)*8+1)
#define SEMA2 ((((char)&sema8_1)-0x20)*8+2)
...
//etc.. pour les 8 semaphores définissables




bdata étant un mot cléf, je suppose que la premiere ligne sert à annoncer que quand on parle de sema8_1 on parle de bdata.
(mais je compend mal le char.. )

Je sais que les lignes suivantes servent chacune à selectionner un bit:
-le -0x20 positionne dans la mémoire,
-le *8 a quelquechose à voire avec le type char

Mais je ne comprend pas pourquoi on cast l'adresse pour faire ces opérations. .

(en tapant dans google "#define SEMA0 ((((char)&sema8_1)-0x20)*8)" tel quel, on tombe sur la doc)