ZStack-OSAL中任务初始化中的afRegister函数调用分析总结
来源:互联网 发布:网络如何人肉搜索 编辑:程序博客网 时间:2024/04/30 06:03
首先看下以下几个结构体,定义在AF.h文件中
typedef struct{ uint8 EndPoint; //端点/端口/终端号 1-240 uint16 AppProfId; //支持的Profile ID,配置文件ID uint16 AppDeviceId; //支持的设备ID uint8 AppDevVer:4; //执行的设备描述的版本 uint8 Reserved:4; // AF_V1_SUPPORT uses for AppFlags:4. uint8 AppNumInClusters; //终端支持的输入群集数目 cId_t *pAppInClusterList; //指向输入Cluster ID(输入群集)列表的指针 uint8 AppNumOutClusters; //终端支持的输入簇数目 cId_t *pAppOutClusterList; //指向输出Cluster ID(输出)列表的指针} SimpleDescriptionFormat_t;//简单描述符
typedef struct{ uint8 endPoint; //终端号 uint8 *task_id; // Pointer to location of the Application task ID.任务ID指针 SimpleDescriptionFormat_t *simpleDesc; //简单描述符,就是上面定义的结构体 afNetworkLatencyReq_t latencyReq; //必须赋值为noLatencyReqs} endPointDesc_t;//终端描述符
typedef struct _epList_t { struct _epList_t *nextDesc; //下一个节点或称下一个终端条目 endPointDesc_t *epDesc; //终端/端点/端口描述符,里面包括简单的描述符 pDescCB pfnDescCB; // Don't use if this function pointer is NULL.回调函数 afAPSF_Config_t apsfCfg; eEP_Flags flags; //终端标志,eEP_Flags是一个枚举类型,里面含有两个变量eEP_AllowMatch=1,eEP_NotUsed=2} epList_t;//终端列表条目描述符afRegister函数解析
afStatus_t afRegister( endPointDesc_t *epDesc ){ /*查找是否已经存在此端点*/ if (afFindEndPointDescList(epDesc->endPoint)) // Look for duplicate endpoint. { return afStatus_INVALID_PARAMETER; } /* * 不存在,则调用afRegisterExtended,注册 * 注册成功(不为NULL)返回afStatus_SUCCESS * 注册失败(为NULL)返回afStatus_MEM_FAIL */ return ((NULL == afRegisterExtended(epDesc, NULL)) ? afStatus_MEM_FAIL : afStatus_SUCCESS);}
epList_t *afRegisterExtended( endPointDesc_t *epDesc, pDescCB descFn ){ /*开辟一个终端条目节点*/ epList_t *ep = osal_mem_alloc(sizeof(epList_t)); if (ep != NULL) { ep->nextDesc = epList; //将此节点的nextDesc指向终端条目的头节点,即链表头插法 epList = ep; //重新将终端条目链表的头指向最后一个插入的节点 ep->epDesc = epDesc; //将参数中的终端描述符赋值给终端条目结构体中的终端描述符成员 ep->pfnDescCB = descFn; //回调函数赋值,这里赋值为NULL ep->apsfCfg.frameDelay = APSF_DEFAULT_INTERFRAME_DELAY;// #define APSF_DEFAULT_INTERFRAME_DELAY 50 ep->apsfCfg.windowSize = APSF_DEFAULT_WINDOW_SIZE; // #define APSF_DEFAULT_WINDOW_SIZE 1 ep->flags = eEP_AllowMatch; // Default to allow Match Descriptor.赋值为1 } return ep;}总结:
ZStask-OSAL中将所有的终端以一个终端列表条目表现出来,并将它们都串在一个链表上,用全局epList结构体指针指向最后一个注册的终端列表条目结构体。一个任务就是一个应用程序,也就是一个终端,在任务初始化函数中调用afRegister函数,只需要我们传一个终端描述符endPointDesc_t,所有在调用afRegister函数之前需要将终端描述符endPointDesc_t进行初始化,初始化终端号、初始化任务ID指针、初始化简单描述符等。
0 0
- ZStack-OSAL中任务初始化中的afRegister函数调用分析总结
- Z-stack中OSAL任务机制分析
- Z-stack中OSAL任务机制分析
- Zstack协议栈OSAL中添加任务事件消息、发送数据详细过程
- ZStack-CC2530-2.5.1a主要代码分析总结——明白ZStack-OSAL的原理和思想
- Zstack 中新建任务
- OSAL函数分析-osalTimeUpdate
- OSAL函数分析-osalTimerUpdate
- ZigBee ZStack OSAL层API功能函数汇总
- Zstack OSAL详解
- Zstack OSAL资料汇编
- Zstack中如何实现自己的任务
- Zstack中如何实现自己的任务
- Zstack中如何实现自己的任务
- OSAL函数分析-osal_start_reload_timer,osalAddTimer,osalFindTimer
- (五)OSAL--操作系统抽象层 初始化流程分析
- 一道阿里巴巴笔试题中,关于java中的变量,初始化快,构造函数初始化分析
- zigbee中OSAL中的task ,event, message
- 马云说员工离职的原因
- JVM调优
- vlc-2.1.5在linux下使用QtCreator调试
- android学习二十四(网络编程的最佳实践)
- 产品:陌生人实名社交O2O(寻找合伙人)
- ZStack-OSAL中任务初始化中的afRegister函数调用分析总结
- 为 VM 配置静态内部 IP 地址 (DIP)
- 优秀的程序员
- HDMI之EDID
- 方法调用(Calling Methods)
- DLL中导出函数的声明有两种方式
- Oracle RULLUP和CUBE
- Python模块: collections
- android实现对导航Tab设置下划线选中效果