本人相对没悟出小编会在这里地跟大家吹捧皮

本人是卓波,我是一名嵌入式技术员,作者相对没悟出小编会在这里地跟我们吹嘘皮。

嵌入式框架Zorb Framework搭建进度

嵌入式框架Zorb
Framework搭建意气风发:嵌入式情况搭建、调节和测量试验输出和树马上间体系

嵌入式框架Zorb
Framework搭建二:环形缓冲区的得以达成

嵌入式框架Zorb
Framework搭建三:列表的完成

嵌入式框架Zorb
Framework搭建四:状态机的落到实处

嵌入式框架Zorb
Framework搭建五:事件的得以达成

嵌入式框架Zorb
Framework搭建六:停车计时器的实现

嵌入式框架Zorb
Framework搭建七:职分的贯彻

 

一、前言

  事件有协同事件和异步事件,在此生机勃勃篇中,咱们将为Zorb
Framework提供异步事件作用。在无数时候,大家来不如处理局地操作照旧对操作的实时性供给不高时,能够杜撰使用异步事件作用。如在暂停中管理多量的操作是不太明智的,那时就能够爆发八个风云出来,等待事件管理程序在暂停外形成。

 

二、事件功效设计

  大家先来探视要促成的平地风波提供哪些效果:

  先导要提供的成效如下:

  1、能够改换事件

  2、事件之中应该有事件管理函数

  3、能够加上事件管理函数的参数

  4、最好事件能够有优先级,优先级高的先实行

  5、最棒事件可以活动回笼

  因而,开头设计的数据结构如下: 

 1 /* 事件结构 */
 2 struct _Event
 3 {
 4     uint8_t Priority;               /* 优先级 */
 5     IEventProcess EventProcess;     /* 事件程序 */
 6     List *pArgList;                 /* 事件程序的参数指针 */
 7     
 8     /* 增加程序参数(深拷贝,按先后顺序入队列) */
 9     bool (*AddArg)(Event * const pEvent, void *pArg, uint32_t size);
10     
11     /* 销毁事件 */
12     bool (*Dispose)(Event * const pEvent);
13 };
14 
15 /* 事件处理器结构 */
16 struct _EventHandler
17 {
18     List *pEventList;   /* 事件列表 */
19     bool IsRunning;     /* 是否正在运行:默认开 */
20     
21     /* 获取事件数 */
22     uint32_t (*GetEventCount)(EventHandler * const pEventHandler);
23     
24     /* 增加事件(按优先级排序) */
25     bool (*Add)(EventHandler * const pEventHandler, Event *pEvent);
26     
27     /* 删除事件(释放空间) */
28     bool (*Delete)(EventHandler * const pEventHandler, Event *pEvent);
29     
30     /* 清空事件列表(释放空间) */
31     bool (*Clear)(EventHandler * const pEventHandler);
32     
33     /* 销毁事件处理器(释放空间) */
34     bool (*Dispose)(EventHandler * const pEventHandler);
35     
36     /* 执行事件(按列表位置) */
37     void (*Execute)(struct _EventHandler * const pEventHandler);
38 };

  事件和事件微型机已经陈设好了,再定义多个宏来协助推送事件。

1 /* 推送事件 */
2 #define EVENT_POST(handler_, event_) handler_->Add(handler_, event_)

  具体得以达成请看附属类小零器件代码或在文末的github地址拉框架源码。

 

三、事件结果测验

  轻易的测量检验代码如下:

  1 /**
  2   *****************************************************************************
  3   * @file    app_event.c
  4   * @author  Zorb
  5   * @version V1.0.0
  6   * @date    2018-06-28
  7   * @brief   事件测试的实现
  8   *****************************************************************************
  9   * @history
 10   *
 11   * 1. Date:2018-06-28
 12   *    Author:Zorb
 13   *    Modification:建立文件
 14   *
 15   *****************************************************************************
 16   */
 17 
 18 #include "app_event.h"
 19 #include "zf_includes.h"
 20 
 21 /* 事件处理器 */
 22 static EventHandler *pEventHandler;
 23 
 24 /******************************************************************************
 25  * 描述  :事件程序1
 26  * 参数  :(in)-pArgList 事件参数列表指针
 27  * 返回  :无
 28 ******************************************************************************/
 29 void EventProcess1(List *pArgList)
 30 {
 31     uint32_t i;
 32     
 33     ZF_DEBUG(LOG_D, "rn");
 34     ZF_DEBUG(LOG_D, "event1 arg count is %drn", pArgList->Count);
 35     for (i = 0; i < pArgList->Count; i ++)
 36     {
 37         ZF_DEBUG(LOG_D, "event1 arg %d is %srn", i,
 38             pArgList->GetElementDataAt(pArgList, i));
 39     }
 40 }
 41 
 42 /******************************************************************************
 43  * 描述  :事件程序2
 44  * 参数  :(in)-pArgList 事件参数列表指针
 45  * 返回  :无
 46 ******************************************************************************/
 47 void EventProcess2(List *pArgList)
 48 {
 49     uint32_t i;
 50     
 51     ZF_DEBUG(LOG_D, "rn");
 52     ZF_DEBUG(LOG_D, "event2 arg count is %drn", pArgList->Count);
 53     for (i = 0; i < pArgList->Count; i ++)
 54     {
 55         ZF_DEBUG(LOG_D, "event2 arg %d is %srn", i,
 56             pArgList->GetElementDataAt(pArgList, i));
 57     }
 58 }
 59 
 60 /******************************************************************************
 61  * 描述  :任务初始化
 62  * 参数  :无
 63  * 返回  :无
 64 ******************************************************************************/
 65 void App_Event_init(void)
 66 {
 67     Event *pEvent; /* 事件指针 */
 68     
 69     /* 初始化事件处理器 */
 70     EventHandler_create(&pEventHandler);
 71     
 72     /* 创建事件1 */
 73     Event_create(&pEvent);
 74     pEvent->EventProcess = EventProcess1;
 75     pEvent->AddArg(pEvent, "hello", sizeof("hello") + 1);
 76     
 77     /* 推送事件1 */
 78     EVENT_POST(pEventHandler, pEvent);
 79     
 80     /* 创建事件2 */
 81     Event_create(&pEvent);
 82     pEvent->EventProcess = EventProcess2;
 83     pEvent->AddArg(pEvent, "zorb", sizeof("zorb") + 1);
 84     pEvent->AddArg(pEvent, "framework", sizeof("framework") + 1);
 85     
 86     /* 推送事件2 */
 87     EVENT_POST(pEventHandler, pEvent);
 88 }
 89 
 90 /******************************************************************************
 91  * 描述  :任务程序
 92  * 参数  :无
 93  * 返回  :无
 94 ******************************************************************************/
 95 void App_Event_process(void)
 96 {
 97     while(1)
 98     {
 99         /* 执行事件 */
100         if (pEventHandler->GetEventCount(pEventHandler) > 0)
101         {
102             pEventHandler->Execute(pEventHandler);
103         }
104         else
105         {
106             /* 可在此实现低功耗 */
107         }
108     }
109 }
110 
111 /******************************** END OF FILE ********************************/

  结果:

event1 arg count is 1
event1 arg 0 is hello

event2 arg count is 2
event2 arg 0 is zorb
event2 arg 1 is framework

 

四、最后

  本篇为Zorb
Framework提供了风浪成效。事件成效首要用以搭建基于事件驱动的程序,借使直接习于旧贯于开垦时间驱动程序(轮询程序)的你,尝试一下事件驱动程序,你会意识别有意气风发番风味。

 

  Zorb Framework
github:

  版权全体,转发请打赏哟

 

举例您欣赏笔者的稿子,能够由此Wechat扫一扫给自个儿打赏哟

图片 1

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website