Bonjour,
Quelle sont les variables que l'on peux mettre sous builder sous 16 bits ?
J'ai entendu parler de short int, est-ce une 16 bits ?
Version imprimable
Bonjour,
Quelle sont les variables que l'on peux mettre sous builder sous 16 bits ?
J'ai entendu parler de short int, est-ce une 16 bits ?
En général oui mais tu peux faire le test
Code:
1
2
3
4
5 if(sizeof(short int) == 2) { ... }
J'ai fait le test avec ça et malheureusement ça ne marche pas mais je sais pourquoi.. mon port série est configuré en 8 bits, ne peut-on pas le mettre en 16 ?Code:
1
2
3 short int tableau[1] = {0x0000} ComPort1->Write(tableau, 1);
En général, un port série est utilisé pour envoyer des octets (donc 8 bits). Je ne connais pas de ports série sur lequel tu peux envoyer des words (2 octets)
Je n'ai jamais utilisé de port série mais
ça revient pas au même?Code:
1
2 short int tableau[1] = {0x0000} ComPort1->Write((char*)tableau, sizeof(short int)*1);
Sinon, quand on veut un type codé sur un certain nombre de bits ce n'est pas une bonne idée de faire des suppositions sur le types normaux, ils sont susceptibles de changer quand on bascule vers une autre archi/un autre os/voire même un autre compilo. Il existe des typedefs pour ça dans un grand nombre de biblios y compris dans la biblio standard (si elle est suffisamment à jour). Dans ce dernier cas, le header à inclure est <stdint.h>.
en effet, ça reviens au même mais bon but était d'envoyer un signal de 16 bits. Bref ce n'est pas possible.
Autre question, peut-on mettre le port TX au niveau logique 1 ou 0 ? (sans avoir de trames, bit de start ou bit de stop...)
Peut être en jouant avec les signaux RTS/CTS et DTR/DSR. Il existe une notion de BREAK, il faut voir comment le signal TX est positionné lors d'un break.
j'ai cherché un peu ce qu'il y avait sur le break mais rien de très intéressant, disons qu'il n'influe pas sur le TX.
Bon malheureusement je vais devoir me résoudre à acheter un adaptateur usb - dmx... Je pensais pouvoir le faire avec une simple trame rs-232 mais ce 88us me fou tout en l'air !
merci pour tout ;)
Salut,
Si tu veux jouer avec des bits, peut être devrais tu te tourner vers... la classe bitset... tout simplement ;)
Tu verra, elle est particulièrement utile pour la gestion des bits :D
bitset ?? c'est la première fois que j'en entend parler !
Aurait-tu un tuto, une page sur laquelle on en parle ?
J'ai regardé sur le net.. pas grand chose
oula je ne comprend pas tout ! A quoi peut service ce bitset ? Pour ma part j'aimerais juste enlever un bit de stop au début de ma trame qui fou sa me***.
N'est-ce pas plutôt un bit de start que tu veux retirer, s'il est au début?
Attention, l'UART fait la différence : Y'en a un des deux qui est plus ou moins réglable, l'autre non...
Pas tout à fait:
Permet d'être plus sûr, étant donné que sizeof() renvoie un nombre de byte, et que le nombre de bits d'un byte n'est pas défini (et vous n'avez certainement pas eu le plaisir de bosser avec des bytes de 32 bits...)Code:
1
2
3 if (std::numeric_limits<short>::digit == 16) { }
Quoi qu'il en soit, la taille d'un short n'est pas définie par le standard C++: elle peut donc varier d'une configuration à l'autre. Seule la relation
est définie.Code:(sizeof(char) == 1) <= sizeof(short) <= sizeof(int) <= sizeof(long)
Si ton compilateur est compatible avec le standard C99 (ce n'est pas le cas de Visual C++ .Net 2005), tu peux utiliser les types intN_t (int8_t, int16_t, ...) et uintN_t (uint8_t, uint16_t) définis dans <stdint.h>. La prochaine norme C++ définira aussi ces types (ce qui n'est pas le cas dans la version 2003 du standard).
Sinon, tu peux aussi décider de te limiter à un compilateur que tu connais, et vogue la galère. Une fois le programme compilé, la taille des types ne change pas, donc si elle est connue au moment de la compilation, tout est ok.
tibo7: En clair, tu cherches à communiquer par port série avec un truc qui n'est pas compatible RS232 ?
C'est exactement la raison pour laquelle on déconseille de faire la moindre supposition sur la taille des types de base...
C'est aussi la raison pour laquelle je proposais d'utiliser un bitset.
Ainsi, si tu crée un bitset d'une taille de... 16 bits en l'occurrence, tu place les différents bits à la valeur qui t'intéresse, puis il ne te reste "plus qu'à" les envoyer dans l'ordre dans lequel ils sont attendus ;)