J'ai un code sur un Cortex-M4 microcontrôleur et souhaitez communiquer avec un PC à l'aide d'un protocole binaire. Actuellement, je suis en utilisant des paniers les structures à l'aide de la GCC spécifique packed
d'attribut.
Voici une ébauche:
struct Sensor1Telemetry {
int16_t temperature;
uint32_t timestamp;
uint16_t voltageMv;
// etc...
} __attribute__((__packed__));
struct TelemetryPacket {
Sensor1Telemetry tele1;
Sensor2Telemetry tele2;
// etc...
} __attribute__((__packed__));
Ma question est:
- En supposant que j'utilise exactement la même définition pour l'
TelemetryPacket
struct sur le MCU et le client d'application, le code ci-dessus, être portable à travers de multiples plates-formes? (Je suis intéressé par les architectures x86 et x86_64, et le besoin qu'il fonctionne sur Windows, Linux et OS X.) - Faire d'autres compilateurs de soutien paniers structs avec la même disposition de la mémoire? Avec quelle syntaxe?
EDIT:
- Oui, je sais emballé les structures sont non-standard, mais ils semblent utiles suffisante pour envisager de les utiliser.
- Je m'intéresse à la fois le C et le C++, bien que je ne pense pas que GCC serait de les traiter différemment.
- Ces structures ne sont pas héréditaires et ne pas hériter de quoi que ce soit.
- Ces structures contiennent uniquement de taille fixe les champs de type entier, et d'autres semblables paniers des structures. (J'ai été brûlé par des flotteurs avant...)