ZigBee自定义任务添加指南

需积分: 15 8 下载量 179 浏览量 更新于2024-09-21 收藏 31KB DOC 举报
"Zigbee 添加自己的任务,主要涉及如何在Zigbee应用程序中创建和管理自定义的任务,包括任务的初始化、事件处理函数的定义和声明,以及任务与事件处理函数之间的关联。" 在Zigbee应用开发中,有时需要根据特定需求添加自定义的任务。这里以2007Pro版本为例,介绍如何在ZStack框架下添加一个名为"yylong"的新任务。首先,我们需要在`osalInitTasks`函数中注册任务的初始化函数。在这个例子中,`ZDApp_Init`和`SampleApp_Init`是已经存在的任务初始化函数,而`Fanli_Init`是我们要添加的自定义任务的初始化函数。 ```c void osalInitTasks(void){ …………….. ZDApp_Init(taskID++); SampleApp_Init(taskID++); Fanli_Init(taskID); // 添加任务初始化函数 } ``` 任务ID是通过`taskID++`递增来分配的,确保每个任务有一个唯一的ID。`Fanli_Init`函数接收这个ID,并可以用于后续的自定义任务初始化操作,例如设置全局变量`yylong_TaskID`来记录任务的ID。 接下来,我们需要定义任务的事件处理函数。事件处理函数是任务的核心,它会响应特定的事件并执行相应的操作。在这个例子中,`Fanli_ProcessEvent`是我们的自定义事件处理函数,它负责处理`yylong`任务的事件: ```c uint16 Fanli_ProcessEvent(uint8 task_id, uint16 events){ P1_0 = ~P1_0; // led1翻转 osal_start_timerEx(yylong_TaskID, 3, 250); // 250ms后再次启动yylong_TaskID任务 return 0; } ``` 此函数会反转LED状态,并设置定时器在250毫秒后触发`yylong`任务。 为了使系统知道这个事件处理函数,我们需要在对应的头文件(如`SampleApp.h`)中声明它: ```c extern void Fanli_Init(uint8 task_id); extern UINT16 Fanli_ProcessEvent(uint8 task_id, uint16 events); ``` 这样,其他源文件就可以正确地引用和调用这些函数。 最后,`tasksArr[]`数组用于存储所有任务的事件处理函数指针。数组的结构必须与`osalInitTasks()`中任务添加的顺序保持一致,确保每个任务ID与其对应的事件处理函数相匹配。例如: ```c const pTaskEventHandlerFnt tasksArr[] = { ………………. ZDApp_event_loop, SampleApp_ProcessEvent, Fanli_ProcessEvent // 添加任务处理函数 }; ``` 这里的顺序与`osalInitTasks()`中的`Fanli_Init`添加顺序一致,保证了任务ID和事件处理函数在数组中的位置对应。 通过以上步骤,我们就成功地在Zigbee应用中添加了一个新的自定义任务"yylong",并且实现了它的初始化和事件处理逻辑。在实际开发中,可以根据需求扩展更多的任务和事件,以此实现更复杂的Zigbee网络功能。