2009-08-31 3 views
1

Je suis en train d'écrire un pilote RS485 pour un projet C intégré.Méthode préférée de notification des couches supérieures sur le message reçu

Le pilote est à l'écoute des messages entrants et doit informer l'application de couche supérieure lorsqu'un message complet est reçu et prêt à être lu.

Quelle est la manière préférée de faire cela?

En utilisant des interruptions? Déclencher une interruption SW et lire le message à partir de l'ISR?

Laisser l'application interroger le pilote périodiquement?

Répondre

1

Je fais généralement le moins de travail possible dans l'ISR pour sécuriser les données reçues ou nettoyer les données transmises. Cela signifie généralement la lecture des données hors des tampons matériels et dans un tampon circulaire. A la réception, pour un OS multithread, une interruption de réception vide le matériel, efface l'interruption et signale à un thread de traiter les données reçues.

Pour un environnement d'interrogation, une interruption de réception vide le harwdware, efface l'interruption et définit un indicateur pour informer la boucle d'interrogation qu'elle a quelque chose à traiter.

Comme les interruptions peuvent se produire chaque fois que les structures de données partagées entre l'ISR et la boucle d'interrogation ou le thread de traitement doivent être protégées à l'aide d'un mécanisme d'exclusion mutuelle. Cela signifie souvent que vous devez désactiver les interruptions brièvement pendant que vous ajustez un pointeur ou un nombre.

Si les données reçues sont mises en paquets, vous pouvez rechercher les limites de paquets dans l'ISR et notifier le gestionnaire uniquement lorsqu'un paquet complet est arrivé.

Questions connexes