0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅析FreeRTOS实时操作系统的任务通信

技术让梦想更伟大 来源:技术让梦想更伟大 作者:李肖遥 2022-10-11 09:42 次阅读

FreeRTOS 是一个可裁剪、可剥夺型的多任务内核,而且没有任务数限制,在此之前分析过很多。

FreeRTOS 提供了实时操作系统所需的所有功能,包括资源管理、同步、任务通信等,本篇主要说一下任务通信,我们选用接口是CMSIS_V2,之前也讲到过stm32CubeIDE中CMSIS_V1和CMSIS_V2选项的区别。

c6be9b74-48a6-11ed-a3b6-dac502259ad0.png

首先创建两个任务

c6e775e4-48a6-11ed-a3b6-dac502259ad0.png

创建2个事件

c729019e-48a6-11ed-a3b6-dac502259ad0.png

拉下来也可以配置以下信息,在此我们默认配置

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函数的具体实现以及定义如下

c75a11c6-48a6-11ed-a3b6-dac502259ad0.png

osEventFlagsSet就是往某个任务的句柄发送一个信号,实现如下

/*USERCODEENDHeader_StartTask02*/
voidStartTask02(void*argument)
{
/*USERCODEBEGINStartTask02*/
/*Infiniteloop*/
for(;;)
{
osEventFlagsSet(myEvent01Handle,COMM1_EVENT);
osDelay(1);
}
/*USERCODEENDStartTask02*/
}




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CMSIS
    +关注

    关注

    0

    文章

    37

    浏览量

    11767
  • FreeRTOS
    +关注

    关注

    12

    文章

    473

    浏览量

    61349

原文标题:freeRTOS 任务通信简介

文章出处:【微信号:技术让梦想更伟大,微信公众号:技术让梦想更伟大】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FreeRTOS嵌入式实时操作系统

      1 FreeRTOS操作系统功能   作为一个轻量级的操作系统FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、
    发表于 07-06 11:07 6422次阅读
    <b class='flag-5'>FreeRTOS</b>嵌入式<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>

    实时操作系统FreeRTOS移植教程

    Free 即免费的,RTOS 全称是 Real Time Operating System,中文就是实时操作系统。注意,RTOS 不是指某一个确定的系统,而是指一类系统。比如 uC/O
    的头像 发表于 06-08 09:23 7194次阅读
    <b class='flag-5'>实时</b><b class='flag-5'>操作系统</b><b class='flag-5'>FreeRTOS</b>移植教程

    嵌入式操作系统FreeRTOS 的原理与实现

    FreeRTOS是一个源码公开的免费的嵌入式实时操作系统,通过研究其内核可以更好地理解嵌入式操作系统的实现原理.本文主要阐述FreeRTOS
    发表于 06-23 08:00

    【案例分享】FreeRTOS的嵌入式实时操作系统的实现

    FreeRTOS是一个源码公开的免费的嵌入式实时操作系统,通过研究其内核可以更好地理解嵌入式操作系统的实现原理.本文主要阐述FreeRTOS
    发表于 07-23 04:30

    请问freertos是硬实时操作系统吗?

    freertos是硬实时操作系统吗?都有哪些硬实时操作系统啊?
    发表于 06-13 09:00

    FreeRTOS实时操作系统

    FreeRTOS实时操作系统,Nabto正在努力建立一个强大的FreeRTOS + Nabto组合的解决方案。我们最新推出AppMyProduct应用平台可帮助您快速开发远程控制设备
    发表于 08-04 07:58

    实时任务操作系统(RTOS)

    任务、进程和线程。实时任务操作系统(RTOS)是嵌入式应用软件的基础和开发平台,它是根据操作系统的工作特性
    发表于 08-24 06:34

    为什么要在单片机中使用实时任务操作系统

    为什么要在单片机中使用实时任务操作系统该视频在113分10秒之后,讲了实时操作系统的使用价值。老师讲得非常好,我就不过多赘述了。(这个视频
    发表于 08-24 06:02

    浅析FreeRTOS任务系统

    急的事,处理完最紧急的事再去处理其他事,单核CPU永远只处理一件事。FreeRTOS任务系统在不使用操作系统编程的时候,一般都是在主函数中放一个while大循环,依次调用相应函数循环处
    发表于 01-06 08:08

    嵌入式实时操作系统FreeRTOS基本概述

    嵌入式实时操作系统FreeRTOS基本概述在嵌入式领域当中,实时操作系统的应用越来越广泛了,目前嵌入式
    发表于 02-16 07:12

    关于实时操作系统任务通信的一种方法

    关于实时操作系统任务通信的一种方法
    发表于 09-03 11:45 3次下载
    关于<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>中<b class='flag-5'>任务</b>间<b class='flag-5'>通信</b>的一种方法

    基于FreeRTOS的嵌入式实时操作系统的原理和实现

    FreeRTOS是一个源码公开的免费的嵌入式实时操作系统,通过研究其内核可以更好地理解嵌入式操作系统的实现原理.本文主要阐述FreeRTOS
    发表于 11-18 03:34 6383次阅读

    什么是操作系统?FreeRTOS中文实用教程让你快速入门FreeRTOS

    本文档的主要内容详细介绍的是什么是操作系统?FreeRTOS中文实用教程让你快速入门FreeRTOS带你了解了1.认识操作系统 2.轻松上手RTOS 3.
    发表于 09-12 16:51 258次下载
    什么是<b class='flag-5'>操作系统</b>?<b class='flag-5'>FreeRTOS</b>中文实用教程让你快速入门<b class='flag-5'>FreeRTOS</b>

    FreeRTOS:一个迷你的实时操作系统内核

    ** 1、FreeRTOS** FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:
    的头像 发表于 06-29 17:15 522次阅读
    <b class='flag-5'>FreeRTOS</b>:一个迷你的<b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>内核

    FreeRTOS实时操作系统简述

    FreeRTOS是一个为嵌入式系统设计的开源实时操作系统。它提供了一个多任务内核和一系列组件功能,适合在资源受限的设备上管理
    发表于 09-19 12:37 690次阅读
    <b class='flag-5'>FreeRTOS</b><b class='flag-5'>实时</b><b class='flag-5'>操作系统</b>简述