⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 app.c

📁 ucos在NEC平台下的移植
💻 C
📖 第 1 页 / 共 2 页
字号:
		   (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 + -