-
CréateurSujet
-
août 23, 2023 à 3:56 pm #29840
Bot
ParticipantBonjour, j’ai un problème: grossièrement j’ai deux codes C, un qui tourne sur un linux, et un autre en bare metal sur un Arm Cortex M.
Les deux codes sont différents, mais ils communiquent et ont en commun des headers, dans ces headers y a des structures un peu complèxes avec du padding, je voulais savoir si il y avait un moyen « automatique » de pack et unpack au runtime ces mêmes structures sans modifier ces headers
——————–
warez.flow – Envoyé depuis le Discord : Culte du code -
CréateurSujet
-
AuteurRéponses
-
-
août 23, 2023 à 5:03 pm #29844
Bonjour ! Il semble que vous ayez deux codes C différents, l’un s’exécutant sur Linux et l’autre sur un Arm Cortex M en mode bare metal. Ces codes communiquent entre eux et partagent des structures définies dans des headers, mais ces structures peuvent être complexes avec du padding. Vous souhaitez savoir s’il existe un moyen automatique de « packer » et « dépacker » ces structures au moment de l’exécution sans modifier les headers existants.
Il est possible d’accomplir cela en utilisant une technique appelée sérialisation/désérialisation. La sérialisation consiste à convertir des données structurées en une séquence d’octets, tandis que la désérialisation effectue l’opération inverse, c’est-à-dire reconstituer les données structurées à partir de la séquence d’octets. Cela peut être utilisé pour communiquer entre des environnements différents, comme dans votre cas.
Voici comment vous pourriez le faire :
– Définition des structures : Conservez les définitions de structures existantes dans les headers. Vous n’avez pas besoin de les modifier.
– Écriture de fonctions de sérialisation/désérialisation : Créez des fonctions spécifiques qui prennent une instance d’une structure et la convertissent en une séquence d’octets (sérialisation) ou prennent une séquence d’octets et la reconstituent en une instance de structure (désérialisation). Ces fonctions doivent tenir compte des problèmes de padding et d’alignement entre les différentes architectures.
– Communication : Lorsque vous communiquez entre les deux codes (Linux et Cortex M), appelez les fonctions de sérialisation pour convertir les données en octets avant de les envoyer, puis utilisez les fonctions de désérialisation pour reconstituer les données du côté récepteur.Il est important de noter que cette approche nécessite une certaine cohérence entre les deux côtés en termes de représentation des données, même si les codes et les architectures sont différents. Cela pourrait nécessiter une gestion précise des types de données, de l’endianness (ordre des octets) et des problèmes d’alignement.
N’oubliez pas que cette méthode ajoute un certain surcoût en termes de temps de traitement et de consommation de ressources. Dans les systèmes embarqués, où les ressources peuvent être limitées, il convient d’en tenir compte.
Si la communication entre les deux environnements est critique ou nécessite une haute performance, vous pourriez également envisager des bibliothèques spécialisées telles que Protocol Buffers (protobuf) de Google, MessagePack, ou même des protocoles plus bas niveau comme le binaire pur.
——————–
djezuskryst – Envoyé depuis le Discord : Culte du code -
août 23, 2023 à 5:03 pm #29845
——————–
djezuskryst – Envoyé depuis le Discord : Culte du code -
août 23, 2023 à 5:06 pm #29846
ChatCPT
——————–
dovahkiindrenaak – Envoyé depuis le Discord : Culte du code -
août 23, 2023 à 5:07 pm #29847
https://tenor.com/view/no-gif-26066475
——————–
djezuskryst – Envoyé depuis le Discord : Culte du code -
août 23, 2023 à 6:46 pm #29850
Bruh
——————–
warez.flow – Envoyé depuis le Discord : Culte du code -
août 23, 2023 à 6:46 pm #29851
Les gars, je sais gpt hein
——————–
warez.flow – Envoyé depuis le Discord : Culte du code -
août 23, 2023 à 6:46 pm #29852
Et au final non, j’ai pas trouvé de moyen automatique pour pack et unpack une structure
——————–
warez.flow – Envoyé depuis le Discord : Culte du code -
août 23, 2023 à 6:47 pm #29853
Donc la solution la plus pratique…. C’est de build mon projet en i386 (32bit)
——————–
warez.flow – Envoyé depuis le Discord : Culte du code -
août 23, 2023 à 6:47 pm #29854
Car ils ont les mêmes propriétés de taille de variable et de padding qu’avec l’architecte du cortex M arm
——————–
warez.flow – Envoyé depuis le Discord : Culte du code
-
-
AuteurRéponses
- Vous devez être connecté pour répondre à ce sujet.
Sujets récents
-
Forum de partage et d’entraide avec diverse contenue
par
Quentin Destombes
il y a 4 heures et 47 minutes -
Moteur de jeu 2D (C++ et SDL2)(Spécialisé RPG)
par
Bot
il y a 3 jours et 11 heures -
problème ventilo
par
Bot
il y a 4 jours et 10 heures -
code en python cryptages
par
Bot
il y a 4 jours et 19 heures -
BWOAH c’est pas du code ou de la cyber mais bon
par
Bot
il y a 1 semaine et 2 jours
Réponses récentes
Statistiques des Forums
- Comptes enregistrés
- 2 555
- Forums
- 51
- Sujets
- 840
- Réponses
- 15 623
- Mot-clés du sujet
- 0