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

📄 app.c

📁 ucos在NEC平台下的移植
💻 C
📖 第 1 页 / 共 2 页
字号:

#include <includes.h>
#include "stackTotal.h"
#include "swsZigbeeNWK_headers.h"
///*
/*********************************************************************************************************
*                                                CONSTANTS
*********************************************************************************************************
*/


///*
/*********************************************************************************************************
*                                        EXTERNAL REFERENCE GLOBAL  VARIABLES
*********************************************************************************************************
*/
extern NWK_FORMATION_INFO  nwkFormInfo;
extern NWK_NETWORK_DISCOVERY_INFO nwkNetworkDiscoveryInfo;
extern NWK_JOIN_INFO               nwkJoinInfo;
extern NWK_LEAVE_INFO         nwkLeaveInfo;
extern NLDE_DATA_REQUEST_INFO nldeDataRequestInfo;


///*
/*********************************************************************************************************
*                                                VARIABLES
*********************************************************************************************************
*/

//信道扫描以任务的方式实现时,创建的消息邮箱,用来传递执行信道扫描任务的结果
extern OS_EVENT    *formAndScanMessageBox; //用于指示能量扫描的消息邮箱
extern OS_EVENT    *formAndActiveScanMessageBox;//用于指示主动扫描的消息邮箱
OS_EVENT           *discoverAndScanMessageBox=NULL;
OS_EVENT           *discoverNetworkEndMessageBox=NULL;//用于指示主动扫描的消息邮箱
OS_EVENT           *broadcastEndMessageBox=NULL;//用于指示广播数据传输任务是否完成的邮箱 
OS_EVENT           *unicastEndMessageBox=NULL;  //用于指示单播数据传输任务是否完成的邮箱 

OS_STK        StackStartTaskStk[TASK_STK_SIZE];
OS_STK        StackRunTestTaskStk[TASK_STK_SIZE];
extern OS_STK        nwkJoinProcedureStk[TASK_STK_SIZE];
extern OS_STK        nwkRejoinProcedureStk[TASK_STK_SIZE];
extern OS_STK        nwkWishToLeaveProcedureStk[TASK_STK_SIZE];
extern OS_STK        nwkForcedToLeaveProcedureStk[TASK_STK_SIZE];
extern OS_STK        nwkFormNetworkProcedureStk[TASK_STK_SIZE];
extern OS_STK        nwkDiscoveryProcedureStk[TASK_STK_SIZE];
extern OS_STK        nwkDataBroadcastProcedureStk[TASK_STK_SIZE];
extern OS_STK        nwkDataUnicastProcedureStk[TASK_STK_SIZE];
extern OS_STK        nwkBackgroundProcedureStk[TASK_STK_SIZE-1];
INT16S         key;//用于退出的键
INT8U          err;

///*
/*********************************************************************************************************
*                                            FUNCTION PROTOTYPES
*********************************************************************************************************
*/

static  void  StackStartTask(void *p_arg);

static  void  StackRunTestTask (void *p_arg);

#if OS_VIEW_MODULE > 0
static  void  AppTerminalRx(INT8U rx_data);
#endif


///*
/*********************************************************************************************************
*                                                _tmain()
*
* Description : This is the standard entry point for C++ WIN32 code.  
* Arguments   : none
*********************************************************************************************************
*/

void main(int argc, char *argv[])
{
	INT8U  err;

#if 0
	BSP_IntDisAll();                       /* For an embedded target, disable all interrupts until we are ready to accept them */
#endif

	OSInit(); 

	//OSTaskCreateExt(StackStartTask,
	//	(void *)0,
	//	(OS_STK *)&StackStartTaskStk[TASK_STK_SIZE-1],
	//	TASK_START_PRIO,
	//	TASK_START_PRIO,
	//	(OS_STK *)&StackStartTaskStk[0],
	//	TASK_STK_SIZE,
	//	(void *)0,
	//	OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

	//测试协议栈运行以来后的一些任务
	OSTaskCreateExt(StackRunTestTask,
		(void *)0,
		(OS_STK *)&StackRunTestTaskStk[TASK_STK_SIZE-1],
		TASK_START_PRIO,
		TASK_START_PRIO,
		(OS_STK *)&StackRunTestTaskStk[0],
		TASK_STK_SIZE,
		(void *)0,
		OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);


	//OSTaskCreateExt(testStartTask,
	//	(void *)0,
	//	(OS_STK *)&testStartTaskStk[TASK_STK_SIZE-1],
	//	TASK_START_PRIO,
	//	TASK_START_PRIO,
	//	(OS_STK *)&testStartTaskStk[0],
	//	TASK_STK_SIZE,
	//	(void *)0,
	//	OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);


#if OS_TASK_NAME_SIZE > 11
	OSTaskNameSet(APP_TASK_START_PRIO, (INT8U *)"Start Task", &err);
#endif

#if OS_TASK_NAME_SIZE > 14
	OSTaskNameSet(OS_IDLE_PRIO, (INT8U *)"uC/OS-II Idle", &err);
#endif

#if (OS_TASK_NAME_SIZE > 14) && (OS_TASK_STAT_EN > 0)
	OSTaskNameSet(OS_STAT_PRIO, "uC/OS-II Stat", &err);
#endif
	OSStart();                             /* Start multitasking (i.e. give control to uC/OS-II)                               */
}
///*$PAGE*/
/*
*********************************************************************************************************
*                                          STARTUP TASK
*
* Description : This is an example of a startup task.  As mentioned in the book's text, you MUST
*               initialize the ticker only once multitasking has started.
* Arguments   : p_arg   is the argument passed to 'AppStartTask()' by 'OSTaskCreate()'.
* Notes       : 1) The first line of code is used to prevent a compiler warning because 'p_arg' is not
*                  used.  The compiler should not generate any code for this statement.
*               2) Interrupts are enabled once the task start because the I-bit of the CCR register was
*                  set to 0 by 'OSTaskCreate()'.
*********************************************************************************************************
*/

void  StackStartTask (void *p_arg)
{
#ifndef NWK_OPT_ZIGBEE_PAN_COORDINATOR
  NWK_DISCOVERY_RESULT networkDiscoveryResult;
#endif
    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

#if defined(NWK_OPT_ZIGBEE_PAN_COORDINATOR)
	//初始化执行组网函数所需要的参数
	nwkFormInfo.scanChannels=0x7000800;
	nwkFormInfo.scanDuration=12;
	nwkFormInfo.beaconOrder=12;
	nwkFormInfo.superframeOrder=10;
	nwkFormInfo.panID=0;
	nwkFormInfo.batteryLifeExtension=FALSE;
	formAndScanMessageBox=OSMboxCreate((void *)0);  

	printf("will start wrapNlmeFormNetworkTask!\n");
 
	//the following code is important!!!

	OSTaskCreateExt(nwkFormNetworkProcedure,
		(void *)&nwkFormInfo,                               //this is the parameter
		(OS_STK *)&nwkFormNetworkProcedureStk[TASK_STK_SIZE-1],
		TASK_START_PRIO+2,
		TASK_START_PRIO+2,
		(OS_STK *)&nwkFormNetworkProcedureStk[0],
		TASK_STK_SIZE,
		(void *)0,
		OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
     //should wait the task 'nwkFormNetworkProcedure' complete!
    for(;;)
	{
	 if(nwkFormInfo.nwkFormStatus==NWK_NETWORK_FORM_STATUS_ACTIVE)
	 {
	  OSTimeDlyHMSM(0,0,1,0);
      printf("nwkFormNetworkProcedure haven't completes!\n");
	  continue;
	 }
	 else
	 {
	  printf("nwkFormNetworkProcedure Completes!\n");
	  break;
	 }
	}
	//组网任务完成后,将组网任务删除
	if (nwkFormInfo.panID== 0x0000)  
	{
		printf("succeed in forming network!\n");
		//return NWK_SUCCESS;
		nwkFormInfo.nwkFormNetworkReturnState=NWK_SUCCESS;

	} 
	else 
	{
		printf("failed in forming network!\n");
		//return NWK_STARTUP_FAILURE;
		nwkFormInfo.nwkFormNetworkReturnState=NWK_STARTUP_FAILURE;
	}

	OSTaskDel(TASK_START_PRIO+10);

#else	


	//创建关于执行网络发现操作的消息邮箱
	discoverAndScanMessageBox=OSMboxCreate((void *)0);  
	//初始化执行发现网络函数所需要的参数
	nwkNetworkDiscoveryInfo.scanChannels=0x7000800;
	nwkNetworkDiscoveryInfo.scanDuration=12;
	//nwkNetworkDiscoveryInfo.nwkDiscoveryResult=networkDiscoveryResult;
	discoverNetworkEndMessageBox=OSMboxCreate((void *)0);  
    printf("will start wrapNlmeFormNetworkTask!\n");
	//发现网络所需的参数初始化完毕
	OSTaskCreateExt(nwkDiscoveryProcedure,
		(void *)&nwkNetworkDiscoveryInfo,                               //this is the parameter
		(OS_STK *)&nwkDiscoveryProcedureStk[TASK_STK_SIZE-1],
		TASK_START_PRIO+10,
		TASK_START_PRIO+10,
		(OS_STK *)&nwkDiscoveryProcedureStk[0],
		TASK_STK_SIZE,
		(void *)0,
		OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
    //等待网络发现操作的完成
	for(;;)
	{
		if(nwkNetworkDiscoveryInfo.status==NWK_NETWORK_DISCOVERY_STATUS_ACTIVE)
		{
			OSTimeDlyHMSM(0,0,3,0);
			printf("nwkDiscoveryProcedure haven't completes!\n");
			continue;
		}
		else
		{
			printf("nwkDiscoveryProcedure Completes!\n");
			break;
		}
	}

   OSTaskDel(TASK_START_PRIO+10);
   //网络发现操作完成之后,创建设备加入网络的任务
   //创建真正的设备加入网络的任务
   //初始化执行加入网络所需要的参数
   nwkJoinInfo.panID=0x00;
   nwkJoinInfo.joinAsRouter=TRUE;
   nwkJoinInfo.rejoinNetwork=FALSE;
   nwkJoinInfo.scanChannels=0x7000800;
   nwkJoinInfo.scanDuration=12;
   nwkJoinInfo.powerSource=OTHER_ENERGY;
   nwkJoinInfo.rxOnWhenIdle=FALSE;
   nwkJoinInfo.macSecurity=FALSE;
   printf("will start nwkJoinProcedure!\n");
   if(!nwkJoinInfo.rejoinNetwork)
   {
	   OSTaskCreateExt(nwkJoinProcedure,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -