TI中文支持网
TI专业的中文技术问题搜集分享网站

循环事件中用睡眠定时函数

问题出在这一段代码中

if(events & SEND_DATA_EVENT) //发送事件{int i=0; for(i;i<3;i++) halSleep(1000);GenericApp_SendTheMessage();//发送函数osal_start_timerEx(GenericApp_TaskID,SEND_DATA_EVENT,2000); //每个6s,重复这次事件return(events ^ SEND_DATA_EVENT);}
这里会导致终端连续发送两段数据,如
 
后面带的‘dht110000’这个尾巴,我完全不知道是怎么冒出来的,前面的数据是我需要的,但这尾巴不知从哪而降的
感谢各位大大,观看
最后附上终端代码
#include "OSAL.h"
#include "AF.h"
#include "ZDApp.h"
#include "ZDObject.h"
#include "ZDProfile.h"
#include <string.h>

#include "Coordinator.h"
#include "DebugTrace.h"

#include "OnBoard.h"

/* HAL */
#include "hal_lcd.h"
#include "hal_led.h"
#include "hal_key.h"
#include "hal_uart.h"
#include "aps_groups.h"
#include "DHT11.h"
#define SHOW_INFO_EVENT 0x01
#define SEND_DATA_EVENT 0x0001

const cId_t GenericApp_ClusterList[GENERICAPP_MAX_CLUSTERS] =
{GENERICAPP_CLUSTERID
};
const SimpleDescriptionFormat_t GenericApp_SimpleDesc = //简单节点描述符
{GENERICAPP_ENDPOINT,GENERICAPP_PROFID,GENERICAPP_DEVICEID,GENERICAPP_DEVICE_VERSION,GENERICAPP_FLAGS,0,(cId_t*)NULL,GENERICAPP_MAX_CLUSTERS,(cId_t *)GenericApp_ClusterList
};

endPointDesc_t GenericApp_epDesc; //本节点的函数
byte GenericApp_TaskID;
byte GenericApp_TransID;
devStates_t GenericApp_NwkState;
void GenericApp_MessageMSGCB(afIncomingMSGPacket_t *pckt);
void GenericApp_SendTheMessage(void);

void GenericApp_Init( byte task_id ) //节点的初始化
{GenericApp_TaskID = task_id;GenericApp_NwkState = DEV_INIT;GenericApp_TransID = 0;GenericApp_epDesc.endPoint = GENERICAPP_ENDPOINT;GenericApp_epDesc.task_id = &GenericApp_TaskID;GenericApp_epDesc.simpleDesc= (SimpleDescriptionFormat_t *)&GenericApp_SimpleDesc;GenericApp_epDesc.latencyReq = noLatencyReqs;// Register the endpoint description with the AFafRegister( &GenericApp_epDesc );
}
UINT16 GenericApp_ProcessEvent( byte task_id, UINT16 events ) //事件处理机制
{afIncomingMSGPacket_t *MSGpkt;if ( events & SYS_EVENT_MSG ){MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );while ( MSGpkt ){switch ( MSGpkt->hdr.event ){case ZDO_STATE_CHANGE:  //当节点网络状态发生改变时,触发此事件GenericApp_NwkState = (devStates_t)(MSGpkt->hdr.status); //获取节点当前状态,MSGpkt->hdr.status这个涉及到协议栈底层if (GenericApp_NwkState == DEV_END_DEVICE) //当节点状态是终端时,触发下列处理机制{osal_set_event(GenericApp_TaskID,SEND_DATA_EVENT);// 设置一个新的事件}break;default:break;}osal_msg_deallocate( (uint8 *)MSGpkt ); //清缓存// NextMSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID );}// return unprocessed eventsreturn (events ^ SYS_EVENT_MSG);}if(events & SEND_DATA_EVENT) //发送事件{int i=0;for(i;i<3;i++)halSleep(1000);GenericApp_SendTheMessage();//发送函数osal_start_timerEx(GenericApp_TaskID,SEND_DATA_EVENT,2000); //每个6s,重复这次事件return(events ^ SEND_DATA_EVENT);}return 0;
}

void GenericApp_SendTheMessage(void) //发送函数,包括读取DHT11的数据,发送数据
{char temp[2],humidity[2],strTemp[10];DHT11();temp[0] = wendu_shi+0x30;temp[1] = wendu_ge+0x30;humidity[0] = shidu_shi+0x30;humidity[1] = shidu_ge+0x30; //上面是读取事件,以及定义一些变量osal_memcpy(strTemp,"dht11",5);osal_memcpy(&strTemp[5], temp, 2);osal_memcpy(&strTemp[7], humidity, 2);//数据整合afAddrType_t my_DstAddr;my_DstAddr.addrMode=(afAddrMode_t)Addr16Bit;my_DstAddr.endPoint = GENERICAPP_ENDPOINT;my_DstAddr.addr.shortAddr=0x0000;//上面是发送准备工作AF_DataRequest(&my_DstAddr,&GenericApp_epDesc,GENERICAPP_CLUSTERID,10,(uint8*)strTemp,&GenericApp_TransID,AF_DISCV_ROUTE,AF_DEFAULT_RADIUS);
}//发送函数

 
yuetian song:

回复 VV:

OK,谢谢。下回我会注意图片的

赞(0)
未经允许不得转载:TI中文支持网 » 循环事件中用睡眠定时函数
分享到: 更多 (0)