📄 nettask.c
字号:
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 + -