FreeRTOS 是一個(gè)可裁剪、可剝奪型的多任務(wù)內(nèi)核,而且沒(méi)有任務(wù)數(shù)限制,在此之前分析過(guò)很多。
FreeRTOS 提供了實(shí)時(shí)操作系統(tǒng)所需的所有功能,包括資源管理、同步、任務(wù)通信等,本篇主要說(shuō)一下任務(wù)通信,我們選用接口是CMSIS_V2,之前也講到過(guò)stm32CubeIDE中CMSIS_V1和CMSIS_V2選項(xiàng)的區(qū)別。
首先創(chuàng)建兩個(gè)任務(wù)
創(chuàng)建2個(gè)事件
拉下來(lái)也可以配置以下信息,在此我們默認(rèn)配置
Semaphore Name:信號(hào)量名稱(chēng)
Count:計(jì)數(shù)信號(hào)量的最大值
Allocation:分配方式:Dynamic 動(dòng)態(tài)內(nèi)存創(chuàng)建
Conrol Block Name:控制塊名稱(chēng)
生成代碼之后任務(wù)和事件如下
/*DefinitionsformyTask01*/ osThreadId_tmyTask01Handle; constosThreadAttr_tmyTask01_attributes={ .name="myTask01", .stack_size=128*4, .priority=(osPriority_t)osPriorityLow, }; /*DefinitionsformyTask02*/ osThreadId_tmyTask02Handle; constosThreadAttr_tmyTask02_attributes={ .name="myTask02", .stack_size=128*4, .priority=(osPriority_t)osPriorityLow, }; /*DefinitionsformyEvent01*/ osEventFlagsId_tmyEvent01Handle; constosEventFlagsAttr_tmyEvent01_attributes={ .name="myEvent01" }; /*DefinitionsformyEvent02*/ osEventFlagsId_tmyEvent02Handle; constosEventFlagsAttr_tmyEvent02_attributes={ .name="myEvent02" };
這個(gè)是創(chuàng)建任務(wù)的句柄
/*creationofmyTask01*/ myTask01Handle=osThreadNew(StartTask01,NULL,&myTask01_attributes); /*creationofmyTask02*/ myTask02Handle=osThreadNew(StartTask02,NULL,&myTask02_attributes);
我們改寫(xiě)代碼,實(shí)現(xiàn)task2往task發(fā)送信號(hào),實(shí)現(xiàn)簡(jiǎn)單的任務(wù)通信。
/*USERCODEENDHeader_StartTask01*/ voidStartTask01(void*argument) { /*USERCODEBEGINStartTask01*/ /*Infiniteloop*/ osStatus_tos_Status; while(1) { os_Status=osEventFlagsWait(myTask02Handle,/*事件標(biāo)志組ID*/ COMM2_EVENT,/*等待事件標(biāo)志位0與事件標(biāo)志位1*/ osFlagsWaitAny,/*邏輯或*/ osWaitForever/*一直等待*/ ); if(os_Status==COMM1_EVENT) { printf("startTask02isrunning. "); } } /*USERCODEENDStartTask01*/ } /*USERCODEBEGINHeader_StartTask02*/
osEventFlagsWait函數(shù)的具體實(shí)現(xiàn)以及定義如下
osEventFlagsSet就是往某個(gè)任務(wù)的句柄發(fā)送一個(gè)信號(hào),實(shí)現(xiàn)如下
/*USERCODEENDHeader_StartTask02*/ voidStartTask02(void*argument) { /*USERCODEBEGINStartTask02*/ /*Infiniteloop*/ for(;;) { osEventFlagsSet(myEvent01Handle,COMM1_EVENT); osDelay(1); } /*USERCODEENDStartTask02*/ }
審核編輯:劉清
-
CMSIS
+關(guān)注
關(guān)注
0文章
40瀏覽量
12023 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62815
原文標(biāo)題:freeRTOS 任務(wù)通信簡(jiǎn)介
文章出處:【微信號(hào):技術(shù)讓夢(mèng)想更偉大,微信公眾號(hào):技術(shù)讓夢(mèng)想更偉大】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
FreeRTOS嵌入式實(shí)時(shí)操作系統(tǒng)

實(shí)時(shí)操作系統(tǒng)FreeRTOS移植教程

【案例分享】FreeRTOS的嵌入式實(shí)時(shí)操作系統(tǒng)的實(shí)現(xiàn)
請(qǐng)問(wèn)freertos是硬實(shí)時(shí)操作系統(tǒng)嗎?
FreeRTOS實(shí)時(shí)操作系統(tǒng)
為什么要在單片機(jī)中使用實(shí)時(shí)多任務(wù)操作系統(tǒng)
嵌入式實(shí)時(shí)操作系統(tǒng)FreeRTOS基本概述
關(guān)于實(shí)時(shí)操作系統(tǒng)中任務(wù)間通信的一種方法

基于FreeRTOS的嵌入式實(shí)時(shí)操作系統(tǒng)的原理和實(shí)現(xiàn)
什么是操作系統(tǒng)?FreeRTOS中文實(shí)用教程讓你快速入門(mén)FreeRTOS

嵌入式實(shí)時(shí)操作系統(tǒng)FreeRTOS在A(yíng)RM7上移植實(shí)現(xiàn)

STM32-初學(xué)FreeRTOS操作系統(tǒng)

FreeRTOS:一個(gè)迷你的實(shí)時(shí)操作系統(tǒng)內(nèi)核

FreeRTOS實(shí)時(shí)操作系統(tǒng)簡(jiǎn)述

實(shí)時(shí)操作系統(tǒng)之RT-Thread及FreeRTOS

評(píng)論