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

📄 cmdexc.c

📁 一个类似于shell的程序
💻 C
字号:
#include "..\inc\include.h"
#include "..\inc\cmdexc.h"
#include <string.h>

#define cmdCount 7

char prompt='#'; 
STATUS GETCMD(char *);

typedef struct __COMMAND
{
	char strCMD[255];
	STATUS staCMD;	
}CMD;

typedef struct __CMDTABLE
{
	char strCMD[255];
	CMDFUN pFUN;
}CMDEXECTABLE;

CMD myCMD={"",1};

CMDEXECTABLE tableCMD[cmdCount]=
{
	{"reboot",REBOOT},
	{"hello",HELLO},
	{"start",START},
	{"sysinfo",SYSINFO},//collect system info
	{"data",DATA},
	{"time",TIME},
	{"ver",VERSION}
};



STATUS cmdEXEC(char *cmd)
{
	char tempcmd[32]="";//stor the command(coresponding to the first word)
	char *parameter=0;
	U8 i=0;
	if (!GETCMD(cmd))
	{
		return PEND;
	}//last command is pending
	
	else 
	{
		while ((myCMD.strCMD[i]!=' ')&&(myCMD.strCMD[i])&&(i<32))
		{
		tempcmd[i]=	myCMD.strCMD[i];
		i++;
		}
		 //CMD.strCMD[i] should '\0' or space here 
		if (myCMD.strCMD[i]!=' '&&myCMD.strCMD[i]!='\0')
		{
			Uart_Printf("Error command! Command too long.\r\n");
		}
		else
		{
			while (myCMD.strCMD[i++]==' ');
			if (myCMD.strCMD[i]) //have parameters
				parameter=&(myCMD.strCMD[i]);
			for (i=0;i<cmdCount;i++)
			{
				if(strcmp(tempcmd,tableCMD[i].strCMD)==0)
				{
					//start do command here;
					tableCMD[i].pFUN(parameter);
				}
				else
				{
					Uart_Printf("Error command!\r\n");
				}
			}
		
		}
	myCMD.staCMD=EXEC;
	Uart_Printf("%c",prompt);
	return EXEC;
	}
}

STATUS GETCMD(char *str)
{
	if (!myCMD.staCMD)
	{
		return PEND;
	}
	else
	{
		myCMD.staCMD=PEND;
		strcpy(myCMD.strCMD,str);
		//myCMD.staCMD=EXEC;
		return EXEC;
	}
}

void HELLO(char *paramet)
{
	char param[223];
	strcpy(param,paramet);
	myCMD.staCMD=EXEC;
	Uart_Printf("Hello ARM! %s\r\n",paramet);
}
void START(char *paramet)
{
	char param[223];
	strcpy(param,paramet);
	myCMD.staCMD=EXEC;
	Uart_Printf("Start ARM! %s\r\n",paramet);
}
void REBOOT(char *paramet)
{
	char param[223];
	strcpy(param,paramet);
	myCMD.staCMD=EXEC;
	if(param[0])
		Uart_Printf("Error parameter!\r\n");
	REBOOT_SYSTEM();	
}
void SYSINFO(char*p)
{
	char param[223];
	strcpy(param,p);
	myCMD.staCMD=EXEC;

}
void DATA(char*p)
{
	char param[223];
	strcpy(param,p);
	myCMD.staCMD=EXEC;
}
void TIME(char*p)
{
	char param[223];
	strcpy(param,p);
	myCMD.staCMD=EXEC;
}
void VERSION(char*p)
{
	char param[223];
	strcpy(param,p);
	myCMD.staCMD=EXEC;
}

⌨️ 快捷键说明

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