Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 06/03/2010, à 22:39

gilbert

[C] petite question sur les types

bonsoir à tous.

voilà je suis entrain d'écrire un code que je devrais faire tourner sur plusieurs systèmes embarqués différents et comparer les performances, consommation d'énergie en fonction des opérations à réaliser etc...

Comme les architectures sont chaque fois différentes j'aimerai utiliser les types uint8, in64, int16 etc qui me garantissent que je travaille bien sur un entier signé de 8 bits avec int8 p.ex. car il me semble que la taille du int n'est pas définie dans les standards du C mais dépend de l'architecture sur laquelle on travaille.

Seul soucis, je ne me rappelle plus dans quel header se trouvent la définition de ces types pour que je puisse les utiliser. J'ai inclus stdint.h et j'ai fais des typedef pour les avoir, mais je suis sûr qu'ils sont déjà disponible quelque part. J'ai cherché mais je ne trouve pas.. et les exemples de code que j'ai ne montrent jamais les includes..

Merci pour votre aide.


Simplement moi-même..

Hors ligne

#2 Le 06/03/2010, à 23:14

grim7reaper

Re : [C] petite question sur les types

Bah oui ils sont bel et bien déclarer et disponible dans stdint.h (pas besoin de refaire de typedef par-dessus). Je ne vois pas où est le problème.

Dernière modification par grim7reaper (Le 06/03/2010, à 23:15)

Hors ligne

#3 Le 07/03/2010, à 00:35

gilbert

Re : [C] petite question sur les types

euh non... si j'inclus stdint.h tout court il me donne des erreurs et m'indique que ces types ne sont pas déclarés.

Est-ce à cause du fait que ceux qui ont écrit les headers pour mon processeur ne les ont pas inclus ? Je pensais que c'était un minimum standard..


Simplement moi-même..

Hors ligne

#4 Le 07/03/2010, à 00:41

grim7reaper

Re : [C] petite question sur les types

hum bizarre, tu bosses sous quel architecture ? Au pire regarde le contenu du fichier stdint.h pour être fixé.

Hors ligne

#5 Le 07/03/2010, à 00:46

gilbert

Re : [C] petite question sur les types

je bosse sur une architecture IP qu'on a acquise et implémenté sur silicium (qui est encore un peu secrète) mais c'est développé par une petite boite bien connue qui fait, notamment, des processeurs wink

je pense que c'est simplement encore incomplet si ça doit bien être dans stdint.h...

merci pour avoir confirmé ce que je pensais.


Simplement moi-même..

Hors ligne

#6 Le 07/03/2010, à 00:52

grim7reaper

Re : [C] petite question sur les types

C'est sur que si c'est tout nouveau les headers standards sont peut-être pas encore complets.
Enfin si c'est plus ou moins secret, c'est la boîte qui à créé cette architecture qui va devoir implément ces headers, nan ? (là c'est une question personelle, pure curiosité smile).

Hors ligne

#7 Le 07/03/2010, à 00:55

gilbert

Re : [C] petite question sur les types

oui, mais c'est pas moi qui m'occupe de ça, je ne suis pas informaticien.

ce qui m'étonne c'est que tout est basé sur gcc.. mais c'est sûrement un "bête" oubli.


Simplement moi-même..

Hors ligne

#8 Le 07/03/2010, à 01:07

grim7reaper

Re : [C] petite question sur les types

Un oubli peut-être, ou c'est peut-être tout simplement que le portage n'est pas encore complet.
Il faudrai se renseigner auprès du service compétent en la matière pour en être sûr. Parce que ça reste génant si tu ne peux pas compiler pour tester ton programme hmm.

Hors ligne

#9 Le 07/03/2010, à 11:12

eiger

Re : [C] petite question sur les types

Bonjour,

Petite remarque sur les types entiers de taille fixe : ces types se nomment intN_t ou uintN_t (avec N = 8, 16, etc) et n'existent que depuis le standard C99. Les types "int8, int16" (donc sans _t) peuvent exister mais ne sont pas standard en C. Les types intN_t et compagnie sont effectivement définis dans stdint.h.

Attention à l'utilisation : utiliser ces types peut laisser croire qu'on écrit du code portable sur toutes les architectures alors qu'il n'en est rien.

Le standard C99 n'exige pas que les types intN_t et uintN_t existent sur toutes les implémentations, mais seulement sur celles qui supportent effectivement de travailler sur des entiers de telles tailles.

Exemple : il existe des DSP qui travaillent sur des mots de 24 bits. Sur ces architectures, il n'existe pas d'int8_t ni d'int16_t. En revanche on y trouvera peut-être int24_t, qui en retour ne se trouvera pas sur un PC ou un coeur ARM.

Prudence donc avec ces types de taille fixe.

Il existe en revanche les types int_leastN_t ou uint_leastN_t qui sont obligatoirement définis en C99, mais ils ne garantissent qu'une taille minimale, pas une taille exacte. En reprenant mon exemple précédent, le DSP 24 bits aura un int_least8_t qui fera 24 bits, ce qui est correct puisqu'il fait bien au moins 8 bits.

Si tu utilises des IP récentes avec des outils récents, on peut supposer que les types C99 seront définis, mais si tu veux compiler ton code avec des compilateurs "vieillots" (et dans l'embarqué on en trouve encore), tu n'auras même pas la garantie que les types C99 existent.

Hors ligne

#10 Le 07/03/2010, à 17:31

gilbert

Re : [C] petite question sur les types

oui en fait la largeur de bus et le jeu d'instruction du processeur sont paramétrables. les types que j'ai dans stdint.h sont effectivement intN_t, uintN_t, sauf que dans les headers fournis pour travailler sur le SoC d'essai les types s'appellent intN, uintN.

Donc désormais, je sais qui a fait faux cool

merci pour cet éclaircissement!


Simplement moi-même..

Hors ligne