Bonjour,
Je programme actuellement sur une carte de développement implémentant une partie du protocole 802.15.4 (couches basses du ZigBee) pour un projet avec mon école. Or je me suis rendu compte que la carte fournie n'implémentait pas de couche MAC, c'est pourquoi j'ai commencé à en développer une toute simple. Le détail de la MAC n'est pas important en fait, c'était juste pour situer le contexte.
Voilà le topo :
- Je lance un thread en récéption qui effectue la boucle suivante :
- Je lance un thread en émission qui lui boucle sur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 while(1) { Recevoir données (fonction bloquante) Traiter données }
Le premier problème qui s'est posé est l'accès concurrent au medium de communication (c'est du sans fil, pas de duplex), il a donc fallu rajouter un mutex pour réserver le droit d'émettre ou de recevoir. Le code ressemble donc à ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 while(1) { Attendre données à envoyer (bloquante) Envoyer les données }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 while(1) { Verrouiller mutex Recevoir données (fonction bloquante) Deverrouiller mutex Traiter données }Le problème que j'ai maintenant, c'est le fait que la fonction de réception est bloquante, et qu'il me faudrait un moyen pour que l'émetteur prenne le pas sur le récepteur (signal, interruption) et le force à libérer le medium (sauf si il est en train de recevoir des données) dans le cas où il veut émettre. J'ai déjà préparé un peu le terrain en donnant au thread émetteur une référence vers le thread récepteur (pointeur vers le thread).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 while(1) { Attendre données à envoyer (bloquante) Verrouiller mutex Envoyer les données Deverrouiller mutex }
Je ne m'y connais pas spécialement en C et j'aimerais avoir un avis pour m'éclairer... A moins que quelqu'un ait une idée complètement différente sur le sujet !
Note : Je travaille sur une carte de développement, qui utilise Mantis OS, je ne dispose PAS de toutes les fonctions standardes du C... mais proposez tout de même !
Partager