Je travaille avec HiTech PICC32 sur la série de microprocesseurs PIC32MX, mais je pense que cette question est assez générale pour tous ceux qui savent en C. (C'est presque équivalent à C90, avec sizeof (int) = sizeof (long) = sizeof (float) = 4.)Réassembler le flotteur à partir des octets en ligne
Disons que j'ai lu un mot de données de 4 octets qui représente float
. Je peux rapidement le convertir à sa valeur réelle float avec:
#define FLOAT_FROM_WORD(WORD_VALUE) (*((float*) &(WORD_VALUE)))
Mais cela ne fonctionne que pour les valeurs. Je ne peux pas, par exemple, l'utiliser sur une valeur de retour de la fonction comme:
FLOAT_FROM_WORD(eeprom_read_word(addr));
est-il un moyen court et doux de le faire en ligne, à savoir sans appel de fonction ou variable temp? Pour être honnête, il n'y a pas de grande raison pour moi d'éviter un appel de fonction ou un extra var, mais ça m'embête. Il doit y avoir un moyen qui me manque.
Ajouté: Je n'avais pas réalisé que WORD
était en fait un typedef commun. J'ai changé le nom de l'argument macro pour éviter toute confusion.
"Mais cela ne fonctionne que pour les valeurs" Vous voulez dire lvalues? Quoi qu'il en soit, avec des optimisations, votre compilateur devrait quand même supprimer l'appel de fonction; il suffit de le coller dans une fonction et regarder l'assemblée pour le savoir. – GManNickG
Chose corrigée [l/r]. Regardera l'assemblée plus tard. – detly
Je vous recommande de mettre ce genre de chose dans une fonction wrapper spécifique à la plate-forme pour garder ce code spécifique à la plate-forme confiné à une petite partie de votre projet. –