FreeRTOS 任务通知模拟事件标志组
实验
//设置事件位的任务
void eventsetbit_task(void *pvParameters)
{
u8 key;
while(1)
{
if(EventGroupTask_Handler!=NULL)
{
key=KEY_Scan(0);
switch(key)
{
case KEY0_PRES:
xTaskNotify((TaskHandle_t )EventGroupTask_Handler,//接收任务通知的任务句柄
(uint32_t )EVENTBIT_0, //要更新的bit
(eNotifyAction )eSetBits); //更新指定的bit
break;
case KEY1_PRES:
xTaskNotify((TaskHandle_t )EventGroupTask_Handler,//接收任务通知的任务句柄
(uint32_t )EVENTBIT_1, //要更新的bit
(eNotifyAction )eSetBits); //更新指定的bit
break;
case KEY2_PRES:
xTaskNotify((TaskHandle_t )EventGroupTask_Handler,//接收任务通知的任务句柄
(uint32_t )EVENTBIT_2, //要更新的bit
(eNotifyAction )eSetBits); //更新指定的bit
break;
}
}
vTaskDelay(10); //延时10ms,也就是10个时钟节拍
}
}
//事件标志组处理任务
void eventgroup_task(void *pvParameters)
{
u8 enevtvalue;
static u8 event0flag,event1flag,event2flag;
uint32_t NotifyValue;
BaseType_t err;
while(1)
{
//获取任务通知值
err=xTaskNotifyWait((uint32_t )0x00, //进入函数的时候不清除任务bit
(uint32_t )ULONG_MAX, //退出函数的时候清除所有的bit
(uint32_t* )&NotifyValue, //保存任务通知值
(TickType_t )portMAX_DELAY); //阻塞时间
if(err==pdPASS) //任务通知获取成功
{
if((NotifyValue&EVENTBIT_0)!=0) //事件0发生
{
event0flag=1;
}
else if((NotifyValue&EVENTBIT_1)!=0) //事件1发生
{
event1flag=1;
}
else if((NotifyValue&EVENTBIT_2)!=0) //事件2发生
{
event2flag=1;
}
enevtvalue=event0flag|(event1flag<<1)|(event2flag<<2); //模拟事件标志组值
printf("任务通知值为:%d\r\n",enevtvalue);
if((event0flag==1)&&(event1flag==1)&&(event2flag==1)) //三个事件都同时发生
{
event0flag=0; //标志清零
event1flag=0;
event2flag=0;
}
}
}
}
实验现象
FreeRTOS 任务通知模拟事件标志组的更多相关文章
- FreeRTOS 事件标志组 ——提高篇
假设你已经看过FreeRTOS 事件标志组这篇随笔了. 之前的基础篇,真的就只是简单了解一下,相当于大学实验室的实验,但是,我们实际公司项目中,需要更多地思考,就算我们之前只是学习了基础概念以及基础语 ...
- FreeRTOS 事件标志组
以下转载自安富莱电子: http://forum.armfly.com/forum.php 为什么要使用事件标志事件标志组是实现多任务同步的有效机制之一.也许有不理解的初学者会问采用事件标志组多麻烦, ...
- FreeRTOS 任务计数信号量,任务二值信号量,任务事件标志组,任务消息邮箱
以下基础内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 FreeRTOS 计数信号量的另一种实现方式----基于任务通知(Task Not ...
- RTX——第13章 事件标志组
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 前面的章节我们已经讲解了任务管理和时间管理,从本章节开始讲解任务间的通信和同步机制.首先讲解任务间的通信 ...
- FreeRTOS_事件标志组
FreeRTOS事件标志组 事件标志组简介 1. 事件位(事件标志) 事件位用于表明某个事件是否发生,事件位通常用作事件标志,比如下面的几个例子: 当收到一条消息并且把这条消息处理掉以后就可以将某个位 ...
- 16.3-uC/OS-III同步 (事件标志组实验)
事件标志组,顾名思义,就是若干个事件标志的组合,代表若干个事件是否发生,通常用于集合两个或两个以上事件的状态 . 1.如果想要使用事件标志组,就必须事先使能事件标志组.消息队列的使能位于“os_cfg ...
- 16.2-uC/OS-III同步 (事件标志组)
事件标志组 1.当任务要与多个事件同步时可以使用事件标志.若其中的任意一个事件发生时任务被就绪, 叫做逻辑或(OR).若所有的事件都发生时任务被就绪,叫做逻辑与( AND). 2.用户可以创建任意个事 ...
- UCOSIII事件标志组
两种同步机制 "或"同步 "与"同步 使能 #define OS_CFG_FLAG_EN 1u /* Enable (1) or Disable (0) cod ...
- FreeRTOS 任务通知模拟二值信号量
FreeRTOS官方统计,使用任务通知替代二值信号量的时候,任务解除阻塞的时间要快45%,并且需要的RAM也更少 举例 void DataProcess_task(void *pvParameters ...
随机推荐
- Super Fish
Super fish is a common fun and leisure game. It's a game that tests your intelligence and memory ...
- 使用uwsgi部署项目?
方式1: 这种方式虽然比较方便,但是启动操作比较繁琐,每次都不能关闭窗口 安装uwsgi:pip3 install uwsgi 上传项目,部署web app 创建数据库,同步数据 运行django项目 ...
- three.js 基础使用1
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- ESA2GJK1DH1K升级篇: 升级STM32 预热: 单片机每隔一定时间 使用 http 获取天气
前言: 实现功能概要: STM32使用AT指令控制Wi-Fi以TCP方式连接服务器(YY天气Web服务器),然后使用http的get协议获取今天的天气数据 单片机提取今天的温度和湿度数据,把温湿度数据 ...
- Django+uWSGI+Nginx 部署网站
Django 1.11设置 保证Django在本地调试没有问题: 当然这是前提^_^ 收集静态文件至指定文件夹 Django静态文件设置具体参考:https://docs.djangoproject. ...
- selenium--拖拽页面元素
from selenium import webdriver import unittest from selenium.webdriver import ActionChains import ti ...
- concurrent(六)同步辅助器CyclicBarrier & 源码分析
参考文档:Java多线程系列--“JUC锁”10之 CyclicBarrier原理和示例:https://www.cnblogs.com/skywang12345/p/3533995.html简介Cy ...
- Skipping unneeded JARs during scanning can improve startup time and JSP compilation time
Tomcat在启动是提示: INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least on ...
- VisualStudio ------- vs发布软件
上线的系统和自己做的系统有什么区别 上线的没有源代码,没有实体层,数据库访问层 业务逻辑层 只有表现层 而且也也没有 .cs 和 .psd 文件,这样就不能修改系统代码 他们都在 Web ...
- Js迷宫游戏
<!DOCTYPE html> <html> <head> <title>MyHtml.html</title> </head> ...