2009-09-15 6 views
0

basée Nous avons une architecture simple:En ce qui concerne interrompre la communication

  1. puce principale (à base ARM9)
  2. contrôleur PIC

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

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

La première question est:

  1. Ai-je raison?

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

Répondre

5

Avoir une sorte de 'thread de travail', parfois appelé thread de noyau, dont le travail consiste à extraire des données de l'interface I2C et à les mettre en mémoire tampon, à les transférer à d'autres parties de votre système, etc. routine uniquement pour débloquer le thread du noyau. De cette façon, s'il y a d'autres tâches que le système doit effectuer, le gestionnaire d'interruptions ne l'empêche pas de le faire, et vous recevez toujours vos données de votre appareil en temps opportun.

3

Vous ne devez pas lire un paquet complet dans 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é.

Questions connexes