2017-09-30 81 views
0

我不熟悉創建任務的RTOS方法。以前,我使用)上的樹莓裨一個並行線程,這使我在同一時間同時運行2個任務,CC3200 RTOS多線程

1)通過套接字來發送數據每2秒

2以接收通過套接字數據無論何時數據正在從客戶端發送

我想要做同樣的事情,但CC3200目前正在RTOS上運行,我讀到只能暫停任務並運行另一個任務,但我需要同時運行同一時間。

我試着這樣做:

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

但似乎我的第二個任務沒有運行。任何人都有這方面的經驗?

回答

0

我認爲你誤解的是任務/線程的併發和執行的一般概念。

Raspberry Pi和CC3200都有一個單核處理器 - 也就是說,它們的處理單元一次只能執行一條指令。與可能具有多個內核並且有時可以使用超線程可以執行兩倍線程的現代計算機不同,單核處理器由於其設計而不允許在任何給定時間執行多於一條指令。

你使用Raspberry Pi所做的只是簡單地運行多個「線程」,OS(Raspbian,我假設)同時執行。我把它們放在引號中,因爲它們不是真正的線程,併發性並不真實。你只是有一個併發的印象,因爲這兩個程序共享處理器時間,儘管核心一次只執行一個程序。操作系統的工作是在兩個「線程」之間切換並給出併發的印象。當處理單元切換到另一個任務並將其上下文加載到其寄存器時,它就是所謂的上下文切換。

CC3200和SYS/BIOS TI-RTOS的情況也是如此。在任何特定時刻只執行一項任務。設計系統的程序員(或架構師)工作是爲了讓所有任務都有足夠的處理時間,因爲它們需要正確執行。

您的代碼在這裏並不真正有幫助,因爲您正在正確地開始任務。這是問題的任務源代碼。我假設你的第一個任務不會休眠/延遲/塊,並且它消耗100%的處理時間。這就是爲什麼你的第二個任務永遠沒有機會運行。

這是一個很好的開始:http://processors.wiki.ti.com/index.php/SYS/BIOS_Online_Training