8.物联网操作系统之事件标志组

这篇具有很好参考价值的文章主要介绍了8.物联网操作系统之事件标志组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

事件标志组定义

FreeRTOS事件标志组介绍

FreeRTOS事件标志组工作原理

一。事件标志组定义

信号量信号量只能实现任务与单个事件或任务间的同步。但是某些任务可能会需要与多个事件或任务进行同步,此时就可以使用事件标志组来解决。事件标志组能够实现某个任务与多个事件或任务间的同步。

8.物联网操作系统之事件标志组,物联网

 如上图所示:

        事件可以由两个或两个以上来触发运行,所以引入事件标志组定义。

2.FreeRTOS事件标志组介绍

8.物联网操作系统之事件标志组,物联网

有24个位,中断或者任务运行结束,把为SET为1,当满足条件时,运行Task2. 

3.FreeRTOS事件标志组工作原理

8.物联网操作系统之事件标志组,物联网

 任务1需要事件3与4同时运行,任务0需要事件3或者4运行,所以当事件3运行后,任务0激活,任务1不激活。当事件4发生后,任务0才激活。

二。实验:事件标志组函数的应用(上节的基础上,递归信号量)

1.功能需求

1、使用事件标志组检测多个按键输入(K3、K4、K5、K6)

2、当检测到任何一个按键按下,串口打印输出按键信息

3、当4路按键都已经按下,触发蜂鸣器报警

2.API

(1)xEventGroupCreate()创建事件标志组#include "event_groups.h"

8.物联网操作系统之事件标志组,物联网

(2) xEventGroupSetBits()在任务中设置事件标志单位

8.物联网操作系统之事件标志组,物联网

 (3)xEventGroupSetBitsFromISR()中断设置事件标志组位

8.物联网操作系统之事件标志组,物联网

 (4)xEventGroupGetBits()在任务中获取事件标志组位值

8.物联网操作系统之事件标志组,物联网

 (5)xEventGroupGetBitsFromISR()中断中获取事件标志组位的值

8.物联网操作系统之事件标志组,物联网

(6)xEventGroupWaitBits()等待事件标志组位触发

8.物联网操作系统之事件标志组,物联网

 (7)xEventGroupSync()此功能通常用于同步多个任务

8.物联网操作系统之事件标志组,物联网

3.功能需求及具体实现方法

1、使用事件标志组检测多个按键输入(K3、K4、K5、K6)

2、当检测到任何一个按键按下,串口打印输出按键信息

3、当4路按键都已经按下,触发蜂鸣器报警

4.cubemx创建工程

(1)Key3-Key6都设置成中断输出,并把上下沿都设置成可导致中断。NVIC也设置一下。

注意改名

8.物联网操作系统之事件标志组,物联网

(2)FREERTOS的配置

        上述的API接口xEventGroupSetBitsFromISR()必须要用到守护任务。

        从FREERTOS 原理图可以找到,这个函数,上面的Note中表示,必须要使能configUSE_TIMERS与INCLUDE_xTimerPendFunctionCall。如下两图所示。

8.物联网操作系统之事件标志组,物联网

8.物联网操作系统之事件标志组,物联网

设置USE_TIMERS

8.物联网操作系统之事件标志组,物联网

 设置

 8.物联网操作系统之事件标志组,物联网

 5.步骤:

(1)创建事件标志

        根据FREERTOS的参考手册(上面也有API),创建的时候需要头文件#include "event_groups.h",自己创建一个事件标志句柄EventGroupHandle_t KeyEventGroup;如图所示。

8.物联网操作系统之事件标志组,物联网

#include "event_groups.h"
EventGroupHandle_t KeyEventGroup;

(2)在FREERTOS的init中创建事件标志组 

8.物联网操作系统之事件标志组,物联网

	//创建事件标志组
  	KeyEventGroup = xEventGroupCreate();
	if(KeyEventGroup == NULL){
		printf("KeyEventGroup Create Error\r\n");
	}     

(3)事件标志组用在GPIO.c,声明为外部变量

8.物联网操作系统之事件标志组,物联网

extern EventGroupHandle_t KeyEventGroup;

(4)在gpio.c的值

8.物联网操作系统之事件标志组,物联网

#define KEY3_EVENT_BIT  (1<<0)
#define KEY4_EVENT_BIT  (1<<1)
#define KEY5_EVENT_BIT  (1<<2)
#define KEY6_EVENT_BIT  (1<<3) 

(5)在GPIO.c中的中断回调函数,按下就Set指定位。

8.物联网操作系统之事件标志组,物联网

//按键3
	if(Key3_Pin == GPIO_Pin){
		if(HAL_GPIO_ReadPin(Key3_GPIO_Port,Key3_Pin) == GPIO_PIN_RESET){
			HAL_Delay(10);
			if(HAL_GPIO_ReadPin(Key3_GPIO_Port,Key3_Pin) == GPIO_PIN_RESET){
				xEventGroupSetBitsFromISR(KeyEventGroup,KEY3_EVENT_BIT,NULL);			
			}
		}
	}
	//按键4
	if(Key4_Pin == GPIO_Pin){
		if(HAL_GPIO_ReadPin(Key4_GPIO_Port,Key4_Pin) == GPIO_PIN_RESET){
			HAL_Delay(10);
			if(HAL_GPIO_ReadPin(Key4_GPIO_Port,Key4_Pin) == GPIO_PIN_RESET){
			 xEventGroupSetBitsFromISR(KeyEventGroup,KEY4_EVENT_BIT,NULL);			
			}
		}
	}
	//按键5
	if(Key5_Pin == GPIO_Pin){
		if(HAL_GPIO_ReadPin(Key5_GPIO_Port,Key5_Pin) == GPIO_PIN_RESET){
			HAL_Delay(10);
			if(HAL_GPIO_ReadPin(Key5_GPIO_Port,Key5_Pin) == GPIO_PIN_RESET){
			 xEventGroupSetBitsFromISR(KeyEventGroup,KEY5_EVENT_BIT,NULL);			
			}
		}
	}
	
	//按键6
	if(Key6_Pin == GPIO_Pin){
		if(HAL_GPIO_ReadPin(Key6_GPIO_Port,Key6_Pin) == GPIO_PIN_RESET){
			HAL_Delay(10);
			if(HAL_GPIO_ReadPin(Key6_GPIO_Port,Key6_Pin) == GPIO_PIN_RESET){
			 xEventGroupSetBitsFromISR(KeyEventGroup,KEY6_EVENT_BIT,NULL);					
			}
		}
	}

(6)低优先级设置8.物联网操作系统之事件标志组,物联网

EventBits_t KeyEventBits;

KeyEventBits = xEventGroupWaitBits(KeyEventGroup,
								KEY3_EVENT_BIT|KEY4_EVENT_BIT|KEY5_EVENT_BIT|KEY6_EVENT_BIT,
								pdFALSE,
								pdFALSE,
								portMAX_DELAY);
	  printf("Key is Down Key Event Bit is %x\r\n",KeyEventBits);
		osDelay(10);

 (6)高优先级设置

8.物联网操作系统之事件标志组,物联网

EventBits_t KeyEventBits;

KeyEventBits = xEventGroupWaitBits(KeyEventGroup,
								KEY3_EVENT_BIT|KEY4_EVENT_BIT|KEY5_EVENT_BIT|KEY6_EVENT_BIT,
								pdTRUE,
								pdTRUE,
								portMAX_DELAY);	
	  if(KeyEventBits == (KEY3_EVENT_BIT|KEY4_EVENT_BIT|KEY5_EVENT_BIT|KEY6_EVENT_BIT)){
		printf("Buzzer is Toggle\r\n");
		HAL_GPIO_TogglePin(Buzzer_GPIO_Port,Buzzer_Pin);
	  }
osDelay(10);

结果:

应该是:

key3,key4,key5,key6按钮都可以触发输出,蜂鸣器触发似乎是要全部按钮按下才会消除。

KEY3,4,5,6都按下过后,蜂鸣器会响,这就是事件标志组的问题文章来源地址https://www.toymoban.com/news/detail-628143.html

到了这里,关于8.物联网操作系统之事件标志组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 物联网实时操作系统1RTOS简介(上)

    在大型计算机的世界里,操作系统(OS operating systems)已经存在了相当长的一段时间。最基本的操作系统可以追溯到20世纪50年代。到20世纪70年代中期,操作系统的概念、结构、功能和界面已经非常成熟。 微型系统大约在 1970年出现。在基于微处理器的设备中迅速应用操作系统

    2024年02月16日
    浏览(57)
  • 物联网操作系统-软件定时器(software timer)

    软件定时器就是\\\"闹钟\\\",你可以设置闹钟, ⚫ 在 30 分钟后让你起床工作 ⚫ 每隔 1 小时让你例行检查机器运行情况 软件定时器也可以完成两类事情: ⚫ 在\\\"未来\\\"某个时间点,运行函数 ⚫ 周期性地运行函数 日常生活中我们可以定无数个\\\"闹钟\\\",这无数的\\\"闹钟\\\"要基于一个真实

    2024年02月21日
    浏览(44)
  • 9.物联网操作系统之软件定时器,实现一个闹钟

    一。软件定时器概念及应用 1.软件定时器定义         就是软件实现定时器。 2.FreeRTOS软件定时器介绍         如上图所示,Times的左边为设置定时器时间,设置方式可以为任务设置或者中断设置;Times的右边为定时器的定时响应,使用CallBack响应。  3.FreeRTOS软件定时器工作

    2024年02月12日
    浏览(46)
  • 物联网操作系统Zephyr入门教程4调度(scheduling)

    调度器决定哪个线程被允许在任何时间点上执行;这个线程被称为当前线程。 在不同的时间点有机会改变当前线程的身份。这些点被称为重新安排点。一些潜在的重排点是: 从运行状态过渡到暂停或等待状态,例如通过k_sem_take()或k_sleep()。 过渡到准备状态,例如通过k_sem_

    2024年02月13日
    浏览(48)
  • iNeuOS工业互联网操作系统,高效采集数据配置与应用

    1. 概述 2. 通讯原理 3. 参数配置  1.   概述 某生产企业世界500强的集团能源管控平台项目建设,通过专线网络实现异地厂区数据集成, 每个终端能源仪表都有 IP 地址,总共有1000 多台能源表计,总共有将近10000 个数据点 。在集团端部署iNeuOS工业互联网操作系统,终端能源表

    2024年02月05日
    浏览(52)
  • 【全新重构发布】iNeuOS工业互联网操作系统 V5 版本

        iNeuOS工业互联网操作系统历经 迭代27个版本,老版本截止更新V4.1版本 ;历时一年多时间,现在正式发布全新V5版本, V5版本与V4.1老版本不完全兼容 。     发布V5版本后,iNeuOS工业互联网操作系统主要方向是向业务端发展: 能源、安全、工艺、设备、环保 等方面的产品

    2024年02月12日
    浏览(55)
  • iNeuOS工业互联网操作系统,民爆远程运维平台案例

    iNeuOS工业互联网操作系统,民爆远程运维平台案例 目       录 1.      概述... 2 2.      iNeuOS在 民爆生产厂区和北京运维中心配置... 3 1.1           生产厂区配置... 3 1.2           运维中心配置... 7         针对本项目进行初步调研,项目的总体需求为满足

    2024年04月17日
    浏览(51)
  • iNeuOS工业互联网操作系统,“低代码”表单开发应用过程(一)

     iNeuOS工业互联网操作系统,“低代码”表单开发应用过程(一)   目       录 1.      概述... 2 2.      “低代码”表单开发应用过程... 2 1.   概述      iNeuOS工业互联网操作系统“表单设计”功能经过升级后,能够适用于更多应用场景,从业务上来讲可以扩展设备

    2024年04月08日
    浏览(59)
  • iNeuOS工业互联网操作系统V5,视图建模(WEB组态)升级

    针对工业来讲,特殊是流程行业,视图建模(Web组态)是必不可少应用场景,因为有很多工序要直观的展示工艺流程图。 对于一个工厂,少则几十张工艺流程图,多则上百张工艺流程图,还得支持灵活的修改。大屏也好,3D也罢,开发页面的总量不会太多。 该功能也广泛应用

    2024年02月09日
    浏览(57)
  • 发布:iNeuOS工业互联网操作系统 V5 Preview1 版本(自主可控)

           这半年来一直深耕包头,这个城市比较不错,但是推进项目的难度确实挺大的。与开发产品相比,后者更省心。但是光研发产品,没有项目依托,没办法产生价值。有些大学和研究院确实有好的产品,但是 没有市场化能力,再好的产品也没有用 。       前段时间

    2024年02月08日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包