Formattage en C algorithme

develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009 - 7 mars 2007 à 13:58
develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009 - 11 mars 2007 à 16:09
Bonjour,

Je souhaiterai savoir à quoi sert exactement ce code:
il me emblerai qu'on retourne un tableau de int ?

#define unsigned char Byte

unsigned int  fn_lect_8_dataword (void)
{
unsigned int tmp;


  ((Byte*)&tmp)[1] = ide_data;
  ((Byte*)&tmp)[0] = ide_data;
  return tmp;
}

Merci de votre aide.

5 réponses

develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009
7 mars 2007 à 14:47
Rebonjour,

En fait voila ce code vient d'une librairie et il s'agit d'une librairie qui interroge les registres d'une CompactFlash (même fonctionnement qu'un disque dur IDE/ATA).
Je dispose d'un pcb contenant un microcontrolleur qui va aller lire dans la CF.

Definition selon la librairie:

/* IDE/ATA Definition */
/*  With LATCH
    A0        A0  P0_0
    A1        A1  P0_1
    A2        A2  P0_2
    CS0#      P5_2  P5_2   /Modifier
    CS1#      P5_3  P5_3   /Modifier


    For compact flash
    A0         A0  P0_0
    A1         A1  P0_1
    A2         A2  P0_2
    CS0#      P5_2  P5_2
    CS1#      P5_3  P5_3
                              CS1#  CS0#    A2    A1    A0
    Data                          1     0         0       0      0       0x10
    Error/features             1     0         0       0      1       0x11
    Sector count               1     0         0       1     0       0x12
    Sector No                   1     0        0       1      1       0x13
    Cyl. Low                    1     0        1        0      0       0x14
    Cyl. High                    1     0        1        0      1       0x15
    Select Card/Head       1     0        1        1     0       0x16
    Status/Command         1     0       1         1     1       0x17
    Alt stat/ dev ctrl           0     1        1        1     0       0x0E
    Drive address              0     1        1        1     1       0x0F
*/

mais cette librairie ne  dispose pas d'exemple et il y a selon moi 3 fonctions
 qui peuvent faire cette action ( aller lire à une adresse donnée de la CF et afficher 1 secteur en entier cad 512 bytes).

Je me demandais si ce morceau de code ne devait pas interagir ?

Merci
0
goast_tu Messages postés 212 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 28 mai 2011 2
7 mars 2007 à 15:30
((Byte*)&tmp)[1]  permet d'acceder au deuxieme octet de l'entier tmp

1)  &tmp   c'est le pointeur sur tmp

2)  (Byte*)&tmp      converti le pointeur sur un int en un pointeur sur un Byte

3)  ((Byte*)&tmp)[1]   accede au 2eme octet du tmp


donc la fonction retourne juste un int qu'on peut voir comme un tableau de Byte

<hr size="2" width="100%" />Trafic web gratuit!!!
0
develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009
7 mars 2007 à 18:58
Merci, là c'est bien clair.
Et donc comme un entier est sur 4 octets, l'instruction peut
aller jusqu'à maximum :



 ((Byte*)&tmp)[3]

Mais la valeur de retour de la fonction est bien un int alors que on
retourne un tableau de Byte?
Peut être que nous retournons un vrai int  mais formaté en tableau de Byte ?

Merci
0
goast_tu Messages postés 212 Date d'inscription dimanche 3 avril 2005 Statut Membre Dernière intervention 28 mai 2011 2
9 mars 2007 à 12:56
oui c'est ca c'est un int . C'est juste qu'on stock dans l'es pas qui lui est reservé un tableau de bytes.

C'est asses courrant en C.

Par exemple beaucoup de librairies prennent en parametres des booleans codées dans un int avec un OR ("|")

par exemple en openGL

glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT);

<hr size="2" width="100%" />Trafic web gratuit!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
develdelphi Messages postés 97 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2009
11 mars 2007 à 16:09
Salut Kill Bill,

Merci pour ces precieux renseignements que tu me fournis.

J'ai ecrit plus haut de communication avec carte CF, j'ai enfin pu communiquer avec ma CF mais
j'ai un petit soucis de données reçues. J'ai fait un sujet à cette adresse: http://www.cppfrance.com/infomsg_COMMUNICATION-ENTRE-MICROCONTROLLEUR-CARTE-COMPACTFLASH-LECTURE-ERRONEE_901766.aspx

si tu peux m'aider?

Merci
0
Rejoignez-nous