📄 app.c
字号:
(void *)&nwkJoinInfo, //this is the parameter
(OS_STK *)&nwkJoinProcedureStk[TASK_STK_SIZE-1],
TASK_START_PRIO+6,
TASK_START_PRIO+6,
(OS_STK *)&nwkJoinProcedureStk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
}
else
{
OSTaskCreateExt(nwkRejoinProcedure,
(void *)&nwkJoinInfo, //this is the parameter
(OS_STK *)&nwkRejoinProcedureStk[TASK_STK_SIZE-1],
TASK_START_PRIO+6,
TASK_START_PRIO+6,
(OS_STK *)&nwkRejoinProcedureStk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
}
//等待加入网络任务的完成
#endif
for(;;)
{
//如果按下esc键,则退出ucOS
if(PC_GetKey(&key)==TRUE)
{
if(key==0x1B)
{
PC_DOSReturn();
}
}
//OS_Printf("Delay 1 second and print\n");
OSTimeDlyHMSM(0,0,3,0);
}
}
void StackRunTestTask (void *p_arg)
{
//在这个任务中主要是测试协议栈运行起来后协议栈的一些功能
ADDRESS leaveDeviceAddress;
BYTE dataFromAps[89];
BYTE i=0;
INT8U err=0xff;
p_arg = p_arg;
#if 0
BSP_Init(); /* For embedded targets, initialize BSP functions */
#endif
#if OS_TASK_STAT_EN > 0
OSStatInit(); /* Determine CPU capacity */
#endif
//下边的代码是一些初始化的代码
{
initBTTArrayUsedInTest();
initRouteDiscoveryTablePointer();
initRouteTableUsedInTest();
initRoutingBufferedPacketsArray();
}
//初始化设备离开网络的一些参数
memset(&leaveDeviceAddress,0,sizeof(ADDRESS));
leaveDeviceAddress.Extended[0]=0x10;
leaveDeviceAddress.Extended[1]=0x11;
leaveDeviceAddress.Extended[2]=0x12;
leaveDeviceAddress.Extended[3]=0x13;
leaveDeviceAddress.Extended[4]=0x14;
leaveDeviceAddress.Extended[5]=0x15;
leaveDeviceAddress.Extended[6]=0x16;
leaveDeviceAddress.Extended[7]=0x17;
ByteArrayContentCopy(nwkLeaveInfo.deviceAddress.Extended, leaveDeviceAddress.Extended, 8);
nwkLeaveInfo.removeChildren=FALSE;
nwkLeaveInfo.macSecurityEnable=FALSE;
nwkLeaveInfo.leaveStatus=NWK_LEAVE_STATUS_ACTIVE;
//设备离开网络参数初始化完毕
if((longAddressIsNULL(nwkLeaveInfo.deviceAddress.Extended))||(NWKThisIsMyLongAddress(nwkLeaveInfo.deviceAddress.Extended)))
{
//设备自己要与网络断开连接
nwkLeaveInfo.leaveReason=DEVICE_WISHES_TO_LEAVE;
printf("DEVICE_WISHES_TO_LEAVE!\n");
OSTaskCreateExt(nwkWishToLeaveProcedure,
(void *)&nwkLeaveInfo, //this is the parameter
(OS_STK *)&nwkWishToLeaveProcedureStk[TASK_STK_SIZE-1],
TASK_START_PRIO+10,
TASK_START_PRIO+10,
(OS_STK *)&nwkWishToLeaveProcedureStk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
}
else
{
//设备强迫其子设备与网络断开连接
nwkLeaveInfo.leaveReason=COORD_WISHES_DEVICE_TO_LEAVE;
printf("COORD_WISHES_DEVICE_TO_LEAVE!\n");
OSTaskCreateExt(nwkForcedToLeaveProcedure,
(void *)&nwkLeaveInfo, //this is the parameter
(OS_STK *)&nwkForcedToLeaveProcedureStk[TASK_STK_SIZE-1],
TASK_START_PRIO+10,
TASK_START_PRIO+10,
(OS_STK *)&nwkForcedToLeaveProcedureStk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
}
//等待并判断离开任务是否结束
for(;;)
{
if(nwkLeaveInfo.leaveStatus==NWK_LEAVE_STATUS_ACTIVE)
{
OSTimeDlyHMSM(0,0,1,0);
continue;
}
else
{
//设备离开网络任务执行的结果都通过nlmeLeaveConfirm函数发送了,此处该如何如进行处理?
break;
}
}
printf("设备离开网络任务执行完成!\n");
//创建数据发送的任务
//初始化来自于应用层的数据
memset(dataFromAps,1,89);
nldeDataRequestInfo.pNsdu=dataFromAps;
if(nldeDataRequestInfo.pDestAddr!=NULL)
{
nldeDataRequestInfo.pDestAddr=NULL;
nldeDataRequestInfo.pDestAddr=(ADDRESS*)malloc(sizeof(ADDRESS));
}
else
{
nldeDataRequestInfo.pDestAddr=(ADDRESS*)malloc(sizeof(ADDRESS));
}
memset(nldeDataRequestInfo.pDestAddr,0,sizeof(ADDRESS));
//nldeDataRequestInfo.pDestAddr->Short=0xFFFF;
nldeDataRequestInfo.pDestAddr->Short=0x1213;
nldeDataRequestInfo.nsduLength=89;
nldeDataRequestInfo.broadcastRadius=10;
nldeDataRequestInfo.nsduHandle=nlmeGetNwkBCSN();
nldeDataRequestInfo.securityEnable=FALSE;
nldeDataRequestInfo.discoverRoute=FALSE;
broadcastEndMessageBox=OSMboxCreate((void *)0);
unicastEndMessageBox=OSMboxCreate((void *)0);
if(nldeDataRequestInfo.pDestAddr->Short==0xFFFF)
{
OSTaskCreateExt(nwkDataBroadcastProcedure,
(void *)&nldeDataRequestInfo, //this is the parameter
(OS_STK *)&nwkDataBroadcastProcedureStk[TASK_STK_SIZE-1],
TASK_START_PRIO+6,
TASK_START_PRIO+6,
(OS_STK *)&nwkDataBroadcastProcedureStk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
//等待数据发送任务的完成
for(;;)
{
OSMboxPend(broadcastEndMessageBox,10,&err);
if(err==OS_NO_ERR)
{
printf("nwkDataBroadcastProcedure not ends!\n");
}
else
{
continue;
}
if(nldeDataRequestInfo.broadcastTransmissionStatus==NLDE_BROADCAST_DATA_TRANSMISSION_STATUS_ACTIVE)
{
OSTimeDlyHMSM(0,0,1,0);
printf("nwkDataBroadcastProcedure not ends!\n");
continue;
}
else
{
//设备离开网络任务执行的结果都通过nldeDataConfirm函数发送了,此处该如何如进行处理?
break;
}
}
printf("设备发送数据任务执行完成!\n");
}
else
{
OSTaskCreateExt(nwkDataUnicastProcedure,
(void *)&nldeDataRequestInfo, //this is the parameter
(OS_STK *)&nwkDataUnicastProcedureStk[TASK_STK_SIZE-1],
TASK_START_PRIO+6,
TASK_START_PRIO+6,
(OS_STK *)&nwkDataUnicastProcedureStk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
//等待数据发送任务的完成
for(;;)
{
OSMboxPend(unicastEndMessageBox,10,&err);
if(err==OS_NO_ERR)
{
printf("nwkDataBroadcastProcedure not ends!\n");
}
else
{
continue;
}
if(nldeDataRequestInfo.unicastTransmissionStatus==NLDE_BROADCAST_DATA_TRANSMISSION_STATUS_ACTIVE)
{
OSTimeDlyHMSM(0,0,1,0);
printf("nwkDataUnicastProcedure not ends!\n");
continue;
}
else
{
break;
}
}
printf("设备发送数据任务执行完成!\n");
}
//创建一个后台任务
OSTaskCreateExt(nwkBackgroundProcedure,
(void *)0, //this is the parameter
(OS_STK *)&nwkBackgroundProcedureStk[TASK_STK_SIZE-1],
TASK_START_PRIO+36,
TASK_START_PRIO+36,
(OS_STK *)&nwkBackgroundProcedureStk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
for(;;)
{
//如果按下esc键,则退出ucOS
if(PC_GetKey(&key)==TRUE)
{
if(key==0x1B)
{
PC_DOSReturn();
}
}
//OS_Printf("Delay 1 second and print\n");
OSTimeDlyHMSM(0,0,3,0);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -