ZigBee学习之37——osalInitTasks()分析(2)

2019-04-21 21:54

HalLedBlink ( HAL_LED_4, 0, 50, 500 ); }

ZDApp_RegisterCBs();

//注册ZDO消息,只有注册了的消息才能以ZDO_CB_MSG消息的形式发送给指定的任务

} /* ZDO_Init() */

事件处理函数SAPI_ProcessEvent(),在任何地方只要调用osal_set_event()对这个处理函数对应的任务ID设置了事件的话就会启动这个事件处理函数。

系统消息事件SYS_EVENT_MSG包含几个子类的消息(子类可以在文档【Z-Stack Sample Applications (F8W-2006-0023).pdf】中找到),SYS_EVENT_MS由函数osal_msg_send()【OSAL.C】发送,osal_msg_send()首先将传过来的任务ID加入到消息包中,然后再把这个消息包通过osal_msg_enqueue加入到消息队列中,(osal_qHead是消息队列的头指针),然后我们再来查找调用osal_msg_send()的函数,这样我们就可以知道系统消息SYS_EVENT_MSG是在什么情况下如何发出的了。afDataConfirm()【AF.c】会调用osal_msg_send(),并且构造的消息中包含事件AF_DATA_CONFIRM_CMD(此事件说明由AF_DataRequest()初始化的数据已成功发送,若AF_DataRequest()的选项中要求有回应,则此事件表示目标已收到数据)

void afDataConfirm( uint8 endPoint, uint8 transID, ZStatus_t status ) {

endPointDesc_t *epDesc; afDataConfirm_t *msgPtr;

//每个终端都需要一个描述,如果没有则直接返回 epDesc = afFindEndPointDesc( endPoint ); if ( epDesc == NULL ) return;

??????

// Determine the incoming command type

msgPtr = (afDataConfirm_t *)osal_msg_allocate( sizeof(afDataConfirm_t) ); if ( msgPtr ) {

// Build the Data Confirm message

msgPtr->hdr.event = AF_DATA_CONFIRM_CMD; //设置消息的事件为AF_DATA_CONFIRM_CMD msgPtr->hdr.status = status; msgPtr->endpoint = endPoint; msgPtr->transID = transID;

//给指定任务发送消息,并且设置事件数组中SYS_EVENT_MS事件准备好 osal_msg_send( *(epDesc->task_id), (byte *)msgPtr ); }

}

换个思路看看SAPI的事件处理函数当接收到数据的时候干了些什么,然后找出接收数据的函数!从文档中我们得知当采集器接收到数据后就会发送到串口,好那么就找出发送串口数据的处理函数:SAPI_ReceiveDataIndication(),当收到系统消息中的事件为AF_INCOMING_MSG_CMD事调用此函数,afBuildMSGIncoming()会构造基于此事件的消息,而afIncomingData将会调用此函数,

作者:Free

原文来源:61IC中国电子在线


ZigBee学习之37——osalInitTasks()分析(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:企业研究开发费用税前扣除管理办法(试行)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: