Question

J'ai un appareil externe qui crache des paquets UDP de données binaires et de logiciels en cours d'exécution sur un système embarqué qui a besoin de lire ce flux de données, analyser et faire somethign utile. Les données binaires se connecté à un fichier aussi bien. Je voudrais écrire un analyseur qui peut facilement prendre l'entrée directement à partir soit le flux UDP, ou un fichier, analyser les données dans un format spécifique, puis diriger la sortie vers un fichier (par exemple matlab dat) ou à un autre processus qui va faire un peu de traitement en temps réel. Y at-il des ressources qui me aider et quelle est la meilleure façon d'aller à ce sujet? Je pense qu'il pourrait être judicieux d'utiliser les flux de C mais je ne suis pas au courant de la création de flux de sortie personnalisés. Cela vous semble une bonne approche à adopter ou est-il une meilleure façon de s'y prendre?

Merci.

Était-ce utile?

La solution

La beauté des données binaires est que son est généralement format très fixe. Une méthode typique de l'analyse, il est de déclarer une structure qui mappe sur les paquets reçus, puis d'utiliser simplement de type-casts pour lire les champs comme éléments de structure.

La beauté est que cela ne nécessite pas d'analyse syntaxique.

vous devez être prudent sur les règles d'emballage de la structure et endian-ness pour rendre la carte de la structure exactement de la même façon. L'utilisation du C « offsetof » et macros « sizeof » est utile d'émettre quelques informations de débogage pour vérifier que votre structure est en effet la cartographie à ce que vous pensez qu'il est mapping.

Les règles d'emballage peuvent généralement être modifiés soit par des directives (comme celle de #pragma) ou d'options ligne de commande. Endian-ness vous êtes coincé avec. Si son différent de ce que votre système embarqué utilise, déclarer tous les champs octets, ou utiliser quelque chose comme la macro « ntoh » pour faire le swapping d'octets.

Autres conseils

Le New Jersey Code Machine Toolkit est un système de décodage des motifs binaires arbitraires. Il a été initialement conçu pour les jeux d'instructions de décodage, mais il devrait être très bien pour décoder les formats de messages. Vous fournissez une description du format binaire, il synthétise le code pour accéder aux champs de ce format (en cours de validité). Ainsi, vous pouvez vous référer à des champs de message en utilisant la fonction générée appels plutôt que penser à où le champ est ou comment il est codé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top