Formattage en C algorithme

Signaler
Messages postés
97
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 avril 2009
-
Messages postés
97
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 avril 2009
-
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

Messages postés
97
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 avril 2009

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
Messages postés
212
Date d'inscription
dimanche 3 avril 2005
Statut
Membre
Dernière intervention
28 mai 2011
2
((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!!!
Messages postés
97
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 avril 2009

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
Messages postés
212
Date d'inscription
dimanche 3 avril 2005
Statut
Membre
Dernière intervention
28 mai 2011
2
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!!!
Messages postés
97
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
20 avril 2009

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