FreeRTOS事件组使用

本文档介绍了如何在FreeRTOS中使用Event Groups进行任务间的通信。通过创建事件组、设置和清除事件位以及等待特定事件的发生,实现对电机操作(启动、暂停和关闭)的控制。代码示例展示了如何在任务和中断服务函数中使用相关API进行事件管理。
摘要由CSDN通过智能技术生成


一、包含头文件/源码

event_groups.c源代码
event_groups.h头文件


二、定义句柄/设置事件

static EventGroupHandle_t motor_event_group; //事件组句柄
const int MOTOR_START = BIT1;                //启动
const int MOTOR_PAUSE = BIT2;                //暂停
const int MOTOR_CLOSE = BIT3;                //关闭

三、创建事件组

motor_event_group = xEventGroupCreate(); //创建事件组

如果成功建立事件组,则会返回事件组的句柄(指针),如果内存堆没有足够的内存则会返回NULL(创建失败)


四、等待事件位

while(1)
{
	uxBits = xEventGroupWaitBits(motor_event_group,                      //正在测试的事件组
	                             MOTOR_START | MOTOR_PAUSE | MOTOR_CLOSE, //事件组中要等待的位
	                              true,                                   //在返回之前应该被清除
	                              false,                                  //等待条件是否都要满足
	                              portMAX_DELAY);                         //等待超时--#define portMAX_DELAY 0xFFFFFFFF
	
	
	if (uxBits & MOTOR_START) //启动
	{
	    DEBUG("motor is start");
	}
	else if (uxBits & MOTOR_PAUSE) //暂停
	{
	    DEBUG("motor is pause");
	}
	else if (uxBits & MOTOR_CLOSE) //关闭
	{
	    DEBUG("motor is close");
	}
	else //超时
	    DEBUG("xEventGroupWaitBits out time");
	vTaskDelay(200 / portTICK_RATE_MS);
}

五、设置事件位

xEventGroupSetBits(motor_event_group, MOTOR_START);// 将指定的事件位置1, 用在任务中
xEventGroupSetBitsFromISR() // 将指定的事件位置1,用在中断服务函数中。

六、清除事件位

xEventGroupClearBits(motor_event_group, MOTOR_START);// 将指定的事件位清零, 用在任务中
xEventGroupClearBitsFromISR() // 将指定的事件位清零,用在中断服务函数中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值