FreeRTOS 是一个可裁剪、可剥夺型的多任务内核,而且没有任务数限制,在此之前分析过很多。
FreeRTOS 提供了实时操作系统所需的所有功能,包括资源管理、同步、任务通信等,本篇主要说一下任务通信,我们选用接口是CMSIS_V2,之前也讲到过stm32CubeIDE中CMSIS_V1和CMSIS_V2选项的区别。

首先创建两个任务
创建2个事件
拉下来也可以配置以下信息,在此我们默认配置
Semaphore Name:信号量名称
Count:计数信号量的最大值
Allocation:分配方式:Dynamic 动态内存创建
Conrol Block Name:控制块名称
生成代码之后任务和事件如下
/*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" };
这个是创建任务的句柄
/*creationofmyTask01*/ myTask01Handle=osThreadNew(StartTask01,NULL,&myTask01_attributes); /*creationofmyTask02*/ myTask02Handle=osThreadNew(StartTask02,NULL,&myTask02_attributes);
我们改写代码,实现task2往task发送信号,实现简单的任务通信。
/*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函数的具体实现以及定义如下

osEventFlagsSet就是往某个任务的句柄发送一个信号,实现如下
/*USERCODEENDHeader_StartTask02*/
voidStartTask02(void*argument)
{
/*USERCODEBEGINStartTask02*/
/*Infiniteloop*/
for(;;)
{
osEventFlagsSet(myEvent01Handle,COMM1_EVENT);
osDelay(1);
}
/*USERCODEENDStartTask02*/
}
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
CMSIS
+关注
关注
0文章
41浏览量
13022 -
FreeRTOS
+关注
关注
14文章
499浏览量
67239
原文标题:freeRTOS 任务通信简介
文章出处:【微信号:技术让梦想更伟大,微信公众号:技术让梦想更伟大】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
FreeRTOS嵌入式实时操作系统
1 FreeRTOS操作系统功能
作为一个轻量级的操作系统,FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、
发表于 07-06 11:07
•6950次阅读
实时操作系统FreeRTOS移植教程
Free 即免费的,RTOS 全称是 Real Time Operating System,中文就是实时操作系统。注意,RTOS 不是指某一个确定的系统,而是指一类系统。比如 uC/O
【案例分享】FreeRTOS的嵌入式实时操作系统的实现
FreeRTOS是一个源码公开的免费的嵌入式实时操作系统,通过研究其内核可以更好地理解嵌入式操作系统的实现原理.本文主要阐述FreeRTOS
发表于 07-23 04:30
FreeRTOS实时操作系统
的FreeRTOS实时操作系统,Nabto正在努力建立一个强大的FreeRTOS + Nabto组合的解决方案。我们最新推出AppMyProduct应用平台可帮助您快速开发远程控制设备
发表于 08-04 07:58
为什么要在单片机中使用实时多任务操作系统
为什么要在单片机中使用实时多任务操作系统该视频在113分10秒之后,讲了实时操作系统的使用价值。老师讲得非常好,我就不过多赘述了。(这个视频
发表于 08-24 06:02
基于FreeRTOS的嵌入式实时操作系统的原理和实现
FreeRTOS是一个源码公开的免费的嵌入式实时操作系统,通过研究其内核可以更好地理解嵌入式操作系统的实现原理.本文主要阐述FreeRTOS
发表于 11-18 03:34
•7412次阅读
什么是操作系统?FreeRTOS中文实用教程让你快速入门FreeRTOS
本文档的主要内容详细介绍的是什么是操作系统?FreeRTOS中文实用教程让你快速入门FreeRTOS带你了解了1.认识操作系统 2.轻松上手RTOS 3.
发表于 09-12 16:51
•281次下载
嵌入式实时操作系统FreeRTOS在ARM7上移植实现
嵌入式实时操作系统FreeRTOS在ARM7上移植实现(嵌入式开发工程师待遇)-嵌入式实时操作系统Fre
发表于 07-30 12:05
•21次下载
STM32-初学FreeRTOS操作系统
的freeRTOS是实时操作系统之一,特点是多线程,采用“轮换”的方式实现“并行”的效果,操作系统内可以建立任务,每个
发表于 12-08 14:21
•15次下载
FreeRTOS实时操作系统简述
FreeRTOS是一个为嵌入式系统设计的开源实时操作系统。它提供了一个多任务内核和一系列组件功能,适合在资源受限的设备上管理
发表于 09-19 12:37
•2923次阅读
实时操作系统之RT-Thread及FreeRTOS
RT-Thread与其他很多RTOS如FreeRTOS的主要区别之一是,它不仅仅是一个实时内核,还具备丰富的中间层组件,如下图所示。FreeRTOS和RT-Thread是两种常见的嵌入式实时
浅析FreeRTOS实时操作系统的任务通信
评论