2017-09-30 4 views
0

Je suis nouveau à la méthode RTOS de création de tâches. Auparavant, je travaillais avec un pthread sur le Raspberry Pi, ce qui me permet d'exécuter 2 tâches simultanément en même temps,CC3200 RTOS MultiThreading

1) pour envoyer des données par des prises toutes les 2 secondes

2) pour recevoir des données par le biais de prises Je voudrais faire la même chose, mais CC3200 fonctionne actuellement sur RTOS et j'ai lu que vous ne pouvez mettre en pause que des tâches et en exécuter une autre, mais je dois avoir les deux en cours d'exécution à le même temps.

J'ai essayé de le faire:

osi_TaskCreate(WlanAPMode, \ 
         (const signed char*)"wireless LAN in AP mode", \ 
         OSI_STACK_SIZE, NULL, 1, NULL); 
osi_TaskCreate(SendAnalogInputToClient, "Analog Input to Client",\ 
           OSI_STACK_SIZE, NULL, 1, NULL); 
osi_start(); 

Mais il semble que ma 2e tâche ne fonctionne pas. Quelqu'un a de l'expérience avec ça?

Répondre

0

Je pense que ce que vous ne comprenez pas, c'est le concept général de la simultanéité et de l'exécution des tâches/threads. Les deux Raspberry Pi et CC3200 ont un seul processeur principal - c'est-à-dire que leurs unités de traitement sont capables d'exécuter seulement une instruction à la fois. Contrairement aux ordinateurs modernes qui peuvent avoir plusieurs cœurs et qui peuvent parfois exécuter deux fois plus de threads en utilisant l'hyperthreading, les processeurs à cœur unique ne permettent pas d'exécuter plus d'une instruction à la fois en raison de leur conception. Ce que vous avez fait avec Raspberry Pi consistait simplement à exécuter plusieurs "threads" que le système d'exploitation (Raspbian je suppose) exécutés "simultanément". Je les ai mis entre guillemets car ils n'étaient pas de véritables threads et la concurrence n'était pas réelle. Vous avez juste eu une impression de simultanéité, car les deux programmes partageaient le temps du processeur, bien que le noyau n'exécutait qu'un seul programme à la fois. C'est le travail du système d'exploitation de basculer entre les deux «threads» et de faire une impression de concurrence. C'est ce qu'on appelle un changement de contexte lorsqu'une unité de traitement bascule vers une autre tâche et charge son contexte dans ses registres.

La même chose se produit dans le cas de CC3200 et de TI-RTOS SYS/BIOS. Une seule tâche est exécutée à un moment donné. C'est le travail du programmeur (ou de l'architecte) de concevoir le système de sorte que toutes les tâches reçoivent autant de temps de traitement que nécessaire pour exécuter correctement.

Votre code n'est pas vraiment utile ici, car vous commencez les tâches correctement. Ce sont les codes source de la tâche qui posent problème. Je suppose que votre première tâche ne dort jamais/retards/blocs et il consomme 100% du temps de traitement. C'est pourquoi votre deuxième tâche n'a jamais une chance de courir.

Voici un bon point de départ: http://processors.wiki.ti.com/index.php/SYS/BIOS_Online_Training