如何使用EmberZNet中的EmberTask和EmberEventControl?

本文详细介绍了EmberZNet中的任务机制和事件控制,包括如何创建任务、事件,以及初始化和运行任务的方法。通过实例展示了EmberTask和EmberEventControl的使用,适合初学者和开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何使用EmberZNet中的EmberTask和EmberEventControl?

一、在EmberZNet中使用了一种事件型的任务机制,其主要内容是:

  1. 任务,最多可以有256个任务;
  2. 任务包含事件,一个任务理论上可以有N多个事件;
  3. 事件,事件通过时间控制运行,时间单位有5种:不运行、毫秒、256毫秒、65536毫秒、尽快运行。
{
  /** The event is not scheduled to run. */
  EMBER_EVENT_INACTIVE = 0,
  /** The execution time is in approximate milliseconds.  */
  EMBER_EVENT_MS_TIME,
  /** The execution time is in 'binary' quarter seconds (256 approximate
      milliseconds each). */
  EMBER_EVENT_QS_TIME,
  /** The execution time is in 'binary' minutes (65536 approximate milliseconds
      each). */
  EMBER_EVENT_MINUTE_TIME,
  /** The event is scheduled to run at the earliest opportunity. */
  EMBER_EVENT_ZERO_DELAY
};

二、如何新建一个任务

  1. 定义一个任务ID变量
// Task ids used to run events through idling
EmberTaskId appTaskId;
  1. 定义一个事件数组和事件字符串数组,其中事件字符串数组是可选的。
PGM_P appEventStrings[] = {

	APP_TEST_EVENT_STRINGS
};

EmberEventData appEvents[] = {

	APP_TEST_EVENTS
    { NULL, NULL }
};

  1. 初始化函数
// A function used to initialize events for idling
void appInitEvents(void)
{
  emberTaskEnableIdling(true);
  appTaskId = emberTaskInit(appEvents);
}
  1. 运行任务函数
void appRunEvents(void)
{
  // Don't run events while crypto operation is in progress
  // (BUGZID: 12127)
  if (emAfIsCryptoOperationInProgress()) {
    // DEBUG Bugzid: 11944
    emberAfCoreFlush();
    return;
  }
  emberRunTask(appTaskId);
}

三、新建一个事件

  1. 事件的定义和处理可以参考EmberZNet中例子,大概如下:

EmberEventControl appTest1EventControl;
EmberEventControl appTest2EventControl;
EmberEventControl appTest3EventControl;

void appTest1EventHandler(void)
{
	emberEventControlSetInactive(appTest1EventControl);

	emberAfCorePrintln("appTest1EventHandler");

	emberEventControlSetDelayMS(appTest1EventControl, 1000);
}

void appTest2EventHandler(void)
{
	emberEventControlSetInactive(appTest2EventControl);

	emberAfCorePrintln("appTest2EventHandler");

	emberEventControlSetDelayMS(appTest2EventControl, 1000);
}

void appTest3EventHandler(void)
{
	emberEventControlSetInactive(appTest3EventControl);

	emberAfCorePrintln("appTest3EventHandler");

	emberEventControlSetDelayMS(appTest3EventControl, 1000);
}

void vStartTestEvent(void)
{
	emberEventControlSetDelayMS(appTest1EventControl, 1000);
	emberEventControlSetDelayMS(appTest2EventControl, 1000);
	emberEventControlSetDelayMS(appTest3EventControl, 1000);
}

四、初始化任务和运行事件

  1. 初始化和运行任务,使用Callback,这样就不用改动任何链接文件了。
void emberAfMainInitCallback(void)
{
  appInitEvents();
  vStartTestEvent();
}

void emberAfMainTickCallback(void)
{
  appRunEvents();
}
  1. 运行效果

运行效果

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值