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

📄 nettask.c

📁 VxWorks网络tNetTask任务演示源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
					variInfo[i].variPointer, *((unsigned char*)(variInfo[i].variPointer)),0,0,0,0);
			}
			else if(variInfo[i].variLen ==2)
			{
				logMsg("t0xFF00: *(unsigned short*)0x%08x = 0x%04x\n",
					variInfo[i].variPointer, *((unsigned short*)(variInfo[i].variPointer)),0,0,0,0);
			}
			else if(variInfo[i].variLen==4)
			{
				logMsg("t0xFF00: *(unsigned int*)0x%08x = 0x%04x\n",
					variInfo[i].variPointer, *((unsigned int*)(variInfo[i].variPointer)),0,0,0,0);
			}
		}
		else
		{
			/*没有找到对应的全局变量*/
			logMsg("t0xFF00: no variable with Num as 0x%04x defined\n",variNum,0,0,0,0,0);
			logMsg("t0xFF00: please send command with 0xFF00 as command Num and 0x%02x as first parameter\n",
					CMD_VARI_HELP,0,0,0,0,0);
			return(STATUS_WARNING);
		}			
	}
	else if(pBuff[8] == CMD_VARI_WRITE)
	{
		/*查找全局变量值*/
		i=0;
		variNum = pBuff[9]*0x100+pBuff[10];
		while(variInfo[i].variNum!=VARI_END_NUM)
		{
			if(variInfo[i].variNum==variNum)
				break;
			else
				i++;
		}
		if(variInfo[i].variNum!=VARI_END_NUM)	/*修改变量*/
		{
			/*存在此变量序号对应的变量,根据其长度修改内存值*/
 			logMsg("t0xFF00: set value of  -- \n",0,0,0,0,0,0);
 			logMsg("%s\n",(int)(variInfo[i].variName),0,0,0,0,0);
			pVari = (unsigned char*)(variInfo[i].variPointer);
			if((variInfo[i].variLen==1)&&(pBuff[11]==1))
			{
				pVari[0] = pBuff[12];
				logMsg("t0xFF00: *(unsigned char*)0x%08x = 0x%02x\n",
					variInfo[i].variPointer, *((unsigned char*)(variInfo[i].variPointer)),0,0,0,0);
			}
			else if((variInfo[i].variLen ==2)&&(pBuff[11]==2))
			{
				pVari[0] = pBuff[12];
				pVari[1] = pBuff[13];
				logMsg("t0xFF00: *(unsigned short*)0x%08x = 0x%04x\n",
					variInfo[i].variPointer, *((unsigned short*)(variInfo[i].variPointer)),0,0,0,0);
			}
			else if((variInfo[i].variLen==4)&&(pBuff[11]==4))
			{
				pVari[0] = pBuff[12];
				pVari[1] = pBuff[13];
				pVari[2] = pBuff[14];
				pVari[3] = pBuff[15];
				logMsg("t0xFF00: *(unsigned int*)0x%08x = 0x%08x\n",
					variInfo[i].variPointer, *((unsigned int*)(variInfo[i].variPointer)),0,0,0,0);
			}
			else
			{
				logMsg("t0xFF00: write variable Num 0x%04x, variable length is %d, should be %d\n",
						variNum,variInfo[i].variLen,pBuff[11],0,0,0);
			}
		}
		else
		{
			/*没有找到对应的全局变量*/
			logMsg("t0xFF00: no variable with Num as 0x%04x defined\n",variNum,0,0,0,0,0);
			logMsg("t0xFF00: please send command with 0xFF00 as command Num and 0x%02x as first parameter\n",
					CMD_VARI_HELP,0,0,0,0,0);
			return(STATUS_WARNING);
		}
	}
	else 
	{	
		/*全局变量的命令方式不正确*/
		logMsg("t0xFF00: no variable mode as 0x%02x\n",pBuff[8],0,0,0,0,0);
		logMsg("t0xFF00: please set first parameter of 0xFF00 as follows\n",0,0,0,0,0,0);
		logMsg("0x%02x for help, 0x%02x for read, 0x%02x for write\n",CMD_VARI_HELP,CMD_VARI_READ,CMD_VARI_WRITE,0,0,0);
		return(STATUS_WARNING);
	}
	return(STATUS_NORMAL);
}

/**********************************************************************
char t0xFF01(unsigned char*pBuff)
函数描述:		对VxWorks下的函数调用,具体格式参见通讯协议
网络返回:		执行完毕返回12byte 帧,具体格式参见通讯协议
调用:			
	netTask.c:			
		char netCMDAdd(unsigned char *pBuff, int buffLen, int cmdNum, unsigned char priority)
**********************************************************************/
char t0xFF01(unsigned char *pBuff)
{
	unsigned short funcNum;
	int paramNum;
	UINT param32[10];
	int i,paramI,nameI;
	char funcSpawnName[30];
	unsigned char *pSendBuff;
	unsigned char		returnVal8;
	unsigned short	returnVal16;
	unsigned int		returnVal32;
	
	if(pBuff[8]==CMD_FUNC_HELP)		/*帮助信息*/
	{
		/*打印关于函数的帮助信息*/
		logMsg("t0xFF01: print out help on functions:\n",0,0,0,0,0,0);
		printf("num     pointer     information\n");
		i=0;
		while(funcInfo[i].funcNum!=FUNC_END_NUM)
		{
			printf("0x%04x  0x%08x  %s\n",
				funcInfo[i].funcNum,funcInfo[i].funcPointer,funcInfo[i].funcName,0,0,0);
			i++;
		}
	}
	else if( (pBuff[8]==CMD_FUNC_DO) || (pBuff[8]==CMD_FUNC_SPAWN))	
	{
		/*寻找函数num对应的函数入口*/
		funcNum = pBuff[9]*0x100+pBuff[10];
		i=0;
		while(funcInfo[i].funcNum!=FUNC_END_NUM)
		{
			if(funcInfo[i].funcNum==funcNum)
				break;
			else
				i++;
		}
		if(funcInfo[i].funcNum!=FUNC_END_NUM)
		{
			/*找到了对应的函数,逐个初始化函数使用的参数*/
			for(paramI=0;paramI<10;paramI++)	/*首先全部初始化为0*/
			{
				param32[paramI]=0;
			}
			paramNum = 0;
			paramI = 11;
			while(paramNum<10)
			{
				if(pBuff[paramI]==1)	/*pBuff[paramI]对应当前参数的byte数*/
				{
					param32[paramNum] = (UINT)pBuff[paramI+1];
					paramNum++;
					paramI = paramI+2;
				}
				else if(pBuff[paramI]==2)
				{
					param32[paramNum] = (UINT)(pBuff[paramI+1]*0x100+pBuff[paramI+2]);
					paramNum++;
					paramI = paramI+3;
				}
				else if(pBuff[paramI]==4)
				{
					param32[paramNum] = (UINT)(pBuff[paramI+1]*0x1000000+pBuff[paramI+2]*0x10000+pBuff[paramI+3]*0x100+pBuff[paramI+4]);
					paramNum++;
					paramI = paramI+5;
				}
				else
					break;
			}
			/*根据命令方式决定是发起任务还是直接执行*/
			if(pBuff[8]==CMD_FUNC_SPAWN)
			{
				/*寻找不在使用的任务名*/
				nameI=0;
				while(nameI<FUNC_SPAWN_MAX)
				{
					sprintf(funcSpawnName,"%s0x%04x_%d",TNAME_DEBUG_FUNC,funcInfo[i].funcNum,nameI);
					if(taskNameToId(funcSpawnName)==ERROR)
					{
						break;
					}
					else
						nameI++;
				}
				if(nameI==FUNC_SPAWN_MAX)	/*任务发起个数已达上限*/
				{
					logMsg("t0xFF01: the tasks spawned from funcNum 0x%04x has exceeded max--%d\n",
							funcInfo[i].funcNum,FUNC_SPAWN_MAX,0,0,0,0);
					return(STATUS_WARNING);
				}
				else
				{
					/*此序号还没有对应的任务,可以发起*/
					sprintf(funcSpawnName,"%s_%d",TNAME_DEBUG_FUNC,nameI);
					logMsg("t0xFF01: task Spawned %s for --\n", ((int)funcSpawnName),0,0,0,0,0);
					logMsg("%s\n",((int)(funcInfo[i].funcName)),0,0,0,0,0);
					logMsg("t0xFF01: with params as follows\n",0,0,0,0,0,0);
					logMsg("param0~4: 0x%x, 0x%x, 0x%x, 0x%x, 0x%x\n",param32[0],param32[1],param32[2],param32[3],param32[4],0);
					logMsg("param5~9: 0x%x, 0x%x, 0x%x, 0x%x, 0x%x\n",param32[5],param32[6],param32[7],param32[8],param32[9],0);				
					taskSpawn(funcSpawnName,TPRI_DEBUG_FUNC,0,STACKSIZE_DEBUG_FUNC,funcInfo[i].funcPointer,
							param32[0],param32[1],param32[2],param32[3],param32[4],
							param32[5],param32[6],param32[7],param32[8],param32[9]);
				}	
			}
			else if(pBuff[8]==CMD_FUNC_DO)
			{
				/*准备好网络返回*/
				pSendBuff = malloc((10+funcInfo[i].funcReturnSize)*sizeof(char));
				if(pSendBuff!=NULL)
				{
					pSendBuff[8]	= pBuff[9];
					pSendBuff[9]	= pBuff[10];
					pSendBuff[10] = funcInfo[i].funcReturnSize;
				}
				else
				{
					logMsg("t0xFF01: unable to malloc net return buff\n",0,0,0,0,0,0);
					return(STATUS_WARNING);
				}

				logMsg("t0xFF01: function called --\n", ((int)funcSpawnName),0,0,0,0,0);
				logMsg("%s\n",((int)(funcInfo[i].funcName)),0,0,0,0,0);
				logMsg("t0xFF01: with params as follows\n",0,0,0,0,0,0);
				logMsg("param0~4: 0x%x, 0x%x, 0x%x, 0x%x, 0x%x\n",param32[0],param32[1],param32[2],param32[3],param32[4],0);
				logMsg("param5~9: 0x%x, 0x%x, 0x%x, 0x%x, 0x%x\n",param32[5],param32[6],param32[7],param32[8],param32[9],0);				

				/*根据提供的参数个数执行函数*/
				if(funcInfo[i].funcReturnSize == 0)
				{
					((funcInfo[i].funcPointer)(param32[0],param32[1],param32[2],param32[3],param32[4],
										param32[5],param32[6],param32[7],param32[8],param32[9]));
				}
				else if(funcInfo[i].funcReturnSize == 1)
				{
					returnVal8 = ((funcInfo[i].funcPointer)(param32[0],param32[1],param32[2],param32[3],param32[4],
													param32[5],param32[6],param32[7],param32[8],param32[9]));
					pSendBuff[11]	= returnVal8;
				}
				else if(funcInfo[i].funcReturnSize == 2)
				{
					returnVal16 = ((funcInfo[i].funcPointer)(param32[0],param32[1],param32[2],param32[3],param32[4],
													param32[5],param32[6],param32[7],param32[8],param32[9]));
					pSendBuff[11]	= ((returnVal16>>8)&0xFF);
					pSendBuff[12]	= (returnVal16&0xFF);
				}
				else if(funcInfo[i].funcReturnSize == 4)
				{
					returnVal32 = ((funcInfo[i].funcPointer)(param32[0],param32[1],param32[2],param32[3],param32[4],
													param32[5],param32[6],param32[7],param32[8],param32[9]));

					pSendBuff[11] = ((returnVal32>>24)&0xFF);
					pSendBuff[12] = ((returnVal32>>16)&0xFF);
					pSendBuff[13] = ((returnVal32>>8)&0xFF);
					pSendBuff[14] = (returnVal32&0xFF);
				}

				/*网络返回*/
				if(pSendBuff!=NULL)
				{
					netCMDAdd(pSendBuff,(10+funcInfo[i].funcReturnSize)*sizeof(char),0xFF01,QUEUE_PRI_LOW);
				}
			}
		}
		else
		{
			/*没有找到对应的函数*/
			logMsg("t0xFF00: no function with Num as 0x%04x defined\n",funcNum,0,0,0,0,0);
			logMsg("t0xFF00: please send command with 0xFF01 as command Num and 0x%02x as first parameter\n",
					CMD_FUNC_HELP,0,0,0,0,0);
			return(STATUS_WARNING);
		}
	}
	else
	{
		/*函数的命令方式不正确*/
		logMsg("t0xFF01: no function mode as 0x%02x\n",pBuff[8],0,0,0,0,0);
		logMsg("t0xFF01: please set first parameter of 0xFF01 as follows\n",0,0,0,0,0,0);
		logMsg("0x%02x for help, 0x%02x for immediately do, 0x%02x for task spawn\n",CMD_FUNC_HELP,CMD_FUNC_DO,CMD_FUNC_SPAWN,0,0,0);
		return(STATUS_WARNING);
	}
	return(STATUS_NORMAL);
}

⌨️ 快捷键说明

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