Question

Nous avons une architecture simple:

  1. Puce principale (basée sur arm9)
  2. contrôleur PIC

Le PIC communique avec ARM via un protocole de communication I2C basé sur une interruption pour le transfert de données. À l'intérieur de l'interruption, nous signalons une tâche qui lit les données de la couche I2C (bus).

Si les données sont limitées, nous n’aurons généralement pas beaucoup de problème pour les lire et les envoyer à la couche supérieure. Si ces données sont très volumineuses, l'interruption sera liée pendant une longue période.

La première question est:

  1. Ai-je raison?

  2. Dans le cas où j'ai raison, comment éviter la même chose? ... ou pouvons-nous une solution différente?

Était-ce utile?

La solution

Avoir une sorte de "thread de travail", parfois appelé thread de noyau, dont le travail consiste à extraire des données de l'interface I2C, les mettre en tampon, les transférer à d'autres parties de votre système, etc. Utilisez la routine d'interruption seulement pour débloquer le thread du noyau. Ainsi, si le système doit s’acquitter d’autres tâches, le gestionnaire d’interruptions ne l’empêche pas, et vous recevez toujours vos données à partir de votre appareil en temps voulu.

Autres conseils

Vous ne devez pas lire un paquet complet lors d'une exécution de la routine d'interruption. Selon le support matériel, vous devez gérer un échantillon / bit / octet, stocker les données dans un tampon et ne signaler la tâche que lorsque le paquet est terminé.

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