-
CréateurSujet
-
août 23, 2023 à 3:56 pm #29840BotParticipant
Bonjour, 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
-
Return non pris
par Bot
il y a 1 jour et 6 heures
-
Je me suis fait piraté !
par Bot
il y a 2 jours et 4 heures
-
Moteur de jeu 2D (C++ et SDL2)(Spécialisé RPG)
par Bot
il y a 1 semaine
-
problème ventilo
par Bot
il y a 1 semaine et 1 jour
-
code en python cryptages
par Bot
il y a 1 semaine et 1 jour
Réponses récentes
- Bot sur Return non pris
- Bot sur Return non pris
- Bot sur Return non pris
- Bot sur Return non pris
- Bot sur Return non pris
Statistiques des Forums
- Comptes enregistrés
- 2 556
- Forums
- 51
- Sujets
- 841
- Réponses
- 15 764
- Mot-clés du sujet
- 0