FreeRTOS 是一個可裁剪、可剝奪型的多任務內核,十分好用,而且沒有任務數限制,在此之前分析過很多了,簡單來說,F(xiàn)reeRTOS實時系統(tǒng)能夠創(chuàng)建多個獨立的任務,并且任務之間互不干擾,為了這一點的實現(xiàn),每個任務都應該有自己的堆??臻g。當任務進行切換,執(zhí)行環(huán)境則保存到該任務的堆棧中,所以,當一段時間后切換回該任務,它能夠精確地回復上次工作時的狀態(tài)。
之前也匯總了一些教程,參考精選匯總 | freertos從基礎到高級篇系列
FreeRTOS 提供了實時操作系統(tǒng)所需的所有功能,包括資源管理、同步、任務通信等,本篇主要說一下任務通信,任務創(chuàng)建之后并不是一起運行的,而是通過優(yōu)先級順序進行任務的調用來實現(xiàn)的。
輪子也造好了,很多我們可以直接拿來用,ARM Cortex 微控制器軟件接口標準是cmsis,且是與供應商無關的硬件抽象層,CMSIS-RTOS是實時操作系統(tǒng)的通用API,簡單來說就是將Freertos、Rtthread等操作系統(tǒng)再進行一次封裝,形成通用的API函數,目的是使移植更方便。這里我們選用接口是CMSIS_V2,之前也講到過stm32CubeIDE中CMSIS_V1和CMSIS_V2選項的區(qū)別。

首先創(chuàng)建兩個任務myTask01和myTask02,如下圖所示:

創(chuàng)建2個事件myEvent01,myEvent02,如下圖所示:

拉下來也可以配置以下信息,在此我們默認配置計數信號量、分配方式、控制塊名稱等配置信息。
生成代碼之后任務和事件如下代碼:
/*DefinitionsformyTask01*/ osThreadId_tmyTask01Handle; constosThreadAttr_tmyTask01_attributes={ .name="myTask01", .stack_size=128*4, .priority=(osPriority_t)osPriorityLow, }; ... /*DefinitionsformyEvent02*/ osEventFlagsId_tmyEvent02Handle; constosEventFlagsAttr_tmyEvent02_attributes={ .name="myEvent02" };
這個是創(chuàng)建任務的句柄,代碼如下:
/*creationofmyTask01*/ myTask01Handle=osThreadNew(StartTask01,NULL,&myTask01_attributes); /*creationofmyTask02*/ myTask02Handle=osThreadNew(StartTask02,NULL,&myTask02_attributes);
我們改寫代碼,實現(xiàn)task2往task發(fā)送信號,實現(xiàn)簡單的任務通信,代碼如下。
/*USERCODEENDHeader_StartTask01*/
voidStartTask01(void*argument)
{
/*USERCODEBEGINStartTask01*/
/*Infiniteloop*/
osStatus_tos_Status;
while(1)
{
os_Status=osEventFlagsWait(myTask02Handle,/*事件標志組ID*/
COMM2_EVENT,/*等待事件標志位0與事件標志位1*/
osFlagsWaitAny,/*邏輯或*/
osWaitForever/*一直等待*/
);
if(os_Status==COMM1_EVENT)
{
printf("startTask02isrunning.
");
}
}
/*USERCODEENDStartTask01*/
}
/*USERCODEBEGINHeader_StartTask02*/
osEventFlagsWait函數的具體實現(xiàn)以及定義如下圖所示:

osEventFlagsSet就是往某個任務的句柄發(fā)送一個信號,實現(xiàn)如下
/*USERCODEENDHeader_StartTask02*/
voidStartTask02(void*argument)
{
/*USERCODEBEGINStartTask02*/
/*Infiniteloop*/
for(;;)
{
osEventFlagsSet(myEvent01Handle,COMM1_EVENT);
osDelay(1);
}
/*USERCODEENDStartTask02*/
}
最后就可以實現(xiàn)多個任務間的通信了。
-
微控制器
+關注
關注
48文章
8189瀏覽量
160261 -
ARM
+關注
關注
135文章
9462瀏覽量
386419 -
通信
+關注
關注
18文章
6263瀏覽量
139178 -
FreeRTOS
+關注
關注
14文章
496瀏覽量
65878 -
實時操作系統(tǒng)
+關注
關注
1文章
205瀏覽量
31695
原文標題:FreeRTOS 任務間通信,怎么實現(xiàn)?
文章出處:【微信號:技術讓夢想更偉大,微信公眾號:技術讓夢想更偉大】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
FreeRTOS中的任務管理
轉:第27章 FreeRTOS任務消息郵箱
如何去實現(xiàn)基于stm32的FreeRTOS多任務程序
任務間通信的目的是什么
FreeRTOS隊列創(chuàng)建任務間通信的基本應用程序
FreeRTOS隊列創(chuàng)建任務間通信的基本應用程序
(一)FreeRTOS學習之FreeRTOS任務基礎知識
FreeRTOS系列第11篇---FreeRTOS任務控制

FreeRTOS任務間通信,怎么實現(xiàn)?
評論