2017-09-30 7 views
0

Ich bin neu in der RTOS-Methode zum Erstellen von Aufgaben. Früher war ich mit einem Pthread auf dem Raspberry Pi, die es mir ermöglichen zwei Aufgaben gleichzeitig laufen gleichzeitig,CC3200 RTOS MultiThreading

1) Daten über Sockets senden alle 2 Sekunden

2), um Daten über Sockets zu empfangen Wann immer Daten vom Client gesendet werden

Ich möchte das gleiche tun, aber CC3200 läuft derzeit auf RTOS und ich lese, dass Sie nur Aufgaben pausieren und eine andere ausführen können, aber ich muss beide laufen die selbe Zeit.

Ich habe versucht, dies zu tun:

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(); 

Aber es scheint, dass meine zweite Aufgabe nicht läuft. Hat jemand Erfahrung damit?

Antwort

0

Ich denke, was Sie missverstehen, ist das allgemeine Konzept der Parallelität und Ausführung von Aufgaben/Threads.

Sowohl der Raspberry Pi als auch der CC3200 haben einen Single-Core-Prozessor, dh ihre Verarbeitungseinheiten können jeweils nur einen Befehl ausführen. Anders als moderne Computer, die mehrere Kerne haben und manchmal doppelt so viele Threads ausführen können, indem sie Hyper-Threading verwenden, erlauben die Single-Core-Prozessoren aufgrund ihres Entwurfs nicht mehr als einen Befehl zu einem bestimmten Zeitpunkt auszuführen.

Was Sie mit Raspberry Pi getan haben, war einfach laufen mehrere "Threads", die das Betriebssystem (Raspbian ich nehme an) ausgeführt "gleichzeitig". Ich habe diese in Anführungszeichen gesetzt, da sie keine echten Threads waren und die Nebenläufigkeit nicht echt war. Sie hatten nur einen Eindruck von Nebenläufigkeit, da beide Programme Prozessorzeit teilten, obwohl der Kern jeweils nur ein Programm ausführte. Es ist der OS-Job, zwischen den beiden "Threads" zu wechseln und einen Eindruck von Nebenläufigkeit zu erzeugen. Es ist ein sogenannter Kontextwechsel, wenn eine Verarbeitungseinheit zu einer anderen Task wechselt und ihren Kontext in ihre Register lädt.

Das gleiche passiert bei CC3200 und SYS/BIOS TI-RTOS. Zu einem bestimmten Zeitpunkt wird nur eine Aufgabe ausgeführt. Es ist die Aufgabe des Programmierers (oder Architekten), das System so zu gestalten, dass allen Aufgaben so viel Verarbeitungszeit gegeben wird, wie sie für die ordnungsgemäße Ausführung benötigen.

Ihr Code ist hier nicht wirklich hilfreich, da Sie die Aufgaben korrekt starten. Es sind die Quellcodes der Aufgabe, die das Problem sind. Ich gehe davon aus, dass Ihre erste Aufgabe niemals schläft/verzögert/blockiert und 100% der Verarbeitungszeit beansprucht. Deshalb hat deine zweite Aufgabe nie eine Chance zu laufen.

Dies ist ein guter Anfang: http://processors.wiki.ti.com/index.php/SYS/BIOS_Online_Training