2008-09-15 4 views
2

Je suis en train de réécrire du code pour gérer certaines communications embarquées et maintenant le traitement du protocole est implémenté dans une boucle While avec une grosse instruction case/switch. Cette méthode semble un peu lourde. Quelles sont les méthodes de contrôle de flux les plus couramment utilisées pour implémenter des protocoles de communication?Quels sont les contrôles de flux les plus fréquemment utilisés pour gérer la communication de protocole?

Répondre

0

Pour les cas où vous saisissez un champ dans un en-tête de protocole pour vous diriger vers l'étape de traitement suivante pour ce protocole, des tableaux de pointeurs de fonction peuvent être utilisés. Vous utilisez la valeur de l'en-tête de protocole pour indexer dans le tableau et appelez la fonction pour ce protocole.

Vous devez gérer toutes les valeurs possibles dans ce tableau, même celles qui ne sont pas valides. Finalement, vous obtiendrez un paquet contenant la valeur invalide, soit parce que quelqu'un essaie une attaque ou parce qu'un futur rev du protocole ajoute de nouvelles valeurs.

0

Si tout un protocole est géré, alors une déclaration switch/case peut être votre meilleur pari. Cependant, vous devez séparer tous les gestionnaires de messages individuels dans leurs propres fonctions.

Si votre instruction switch contient du code pour gérer réellement les messages, il vaut mieux les supprimer. Si elle gère plusieurs protocoles similaires, vous pouvez créer une classe pour gérer chacun d'entre eux en fonction de la même classe abstraite. Lorsque la connexion est établie, vous pouvez déterminer le protocole et créer une instance de la classe de gestionnaire appropriée à décoder. et gérer les communications.

0

Je pense que cela dépend en grande partie de la langue que vous utilisez, et du type d'objets de données que vous avez à votre disposition.

En python, par exemple, vous pouvez créer un objet Dictionary de toutes les différentes instructions de gestion, et parcourir juste cela pour trouver la bonne méthode/fonction à appeler. Les instructions Case/Switch ne sont pas mauvaises, mais si elles sont énormes (comme elles le peuvent avec d'énormes quantités de gestionnaires de protocole), elles peuvent devenir difficiles à manipuler.

1

Il semble que le "while + switch/case" est une implémentation d'un statemachine. Je crois qu'une machine à écrire bien pensée est souvent la façon la plus simple et la plus facile de mettre en œuvre un protocole.

Quand il s'agit de statemachines, la rupture de certaines règles de programmation traditionnelles vient avec le territoire. Des règles telles que "chaque fonction doit comporter moins de 25 lignes" ne fonctionnent tout simplement pas. On pourrait même prétendre que les machines à sous sont des GOTO déguisés.

Questions connexes