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

📄 control.c

📁 简单Shell命令调试系统开发的程序
💻 C
字号:
/****************************************/
/* Copyright (c) 2004, 63研究所 苗龙    */
/* All rights reserved.                 */
/* 作    者:苗龙                       */
/****************************************/

#include <reg52.h>                    /* special function registers 8052      */
#include <rtx51tny.h>                 /* RTX-51 tiny functions & defines      */
#include "shellfunc.h"

#define INIT      	0                   /* task number of task:  init           */
#define MAIN     	1                   /* task number of task:  poll          */
#define USER1       2
#define USER2       3


#define StatInputCom	0
#define StatExeCom	1


static unsigned char ComTable[MaxComNum][MaxLenCom+1]={"com1","com2","com3","com4","com5","com6","com7","out","close","clr","help","debug"};					
int State=StatInputCom;
unsigned char ch;
int ShellEnd=0;		/*Shell end flag*/
unsigned char ComBuf[MaxLenComBuf+1];	/*store '\0'*/
int i=-1;			/*ComBuf pointer*/
int tem;			/*Temp variable*/
int ComMatchFlag=0;		/*Command match flag*/

int Matched=0;	/*Match flag*/


/******************************************************************************/
/*        Task 0 'init': Initialize                                           */
/******************************************************************************/
void TaskInit (void) _task_ INIT  {       /* program execution starts here        */
  serial_init();
  os_create_task (MAIN); 
  os_create_task (USER1); 
  os_create_task (USER2); 
  os_delete_task (INIT);              /* stop init task (no longer needed)    */

}

/******************************************************************************/
/*        Task 1 'command': command processor */
/******************************************************************************/
void TaskPolled (void) _task_ MAIN  {

	PrintStr("\t\t***********************************************\n");
	PrintStr("\t\t*         Welcom to use SimpleShell            *\n");
	PrintStr("\t\t***********************************************\n\n\n");
		

	PrintStr("> ");
	while(!ShellEnd){

		switch(State){
			case StatInputCom:{
				if(ch=_getkey()){
					if(ch==13)	/*Enter return key*/
					{
						PrintStr("\n");
						ComBuf[i+1]='\0';					
						if(i+1==0) PrintStr("> ");
						else					
						State=StatExeCom;
					}
					else{
						i=i+1;
						if((i>=MaxLenComBuf)&&(ch!=8)){
							putchar(7);
							i=MaxLenComBuf-1;
						}
						else{
							if(ch==8){
								i=i-2;
								if(i<-1) {i=-1;putchar(7);}
								else{
									putchar(8);
									putchar(' ');
									putchar(8);
								}
							}
							else{
								putchar(ch);
								ComBuf[i]=ch;
							}
						}
					}
					break;
				}
				else{
					os_wait (K_IVL, 10, 0);
					break;
				}
			}
			case StatExeCom:{
				PrintStr("\n");
				if(InterpretCommand(ComBuf,&WordTable)==1&&WordTable.Num!=0)
					{
					strlwr(WordTable.wt[0].Str);
					
					for(tem=0;tem<MaxComNum&&!ComMatchFlag;tem++)
							if(strcmp(WordTable.wt[0].Str,ComTable[tem])==0) 
								ComMatchFlag=1;
					if(ComMatchFlag){
						tem--;
						switch(tem){
							case 0:{Command1(&WordTable);break;}
							case 1:{Command2(&WordTable);break;}
							case 2:{Command3(&WordTable);break;}
							case 3:{Command4(&WordTable);break;}
							case 4:{Command5(&WordTable);break;}
                           	case 5:{Command6(&WordTable);break;}
							case 6:{Command7(&WordTable);break;}
							case 7:{DebugOut(&WordTable);break;}
                            case 8:
                            	{
								//ShellEnd=1;
								PrintStr("\n\tThis Command is limited!\n\n");
								break;
								}
							case 9:{clrscr();break;}
							case 10:{DisplayHelpMenu(&WordTable);break;}
							case 11:{DebugChange(&WordTable);break;}
						}							
					}
					else
						PrintStr("    Bad command!\n\n");
					
				}
				else{
					if(WordTable.Num) PrintStr("    Bad command!\n\n");
				}
				
				ComMatchFlag=0;
				State=StatInputCom;
				if(ShellEnd) {PrintStr("\n\n");}
				else PrintStr("> ");
				i=-1;
				break;
			}
			default:{
				//ShellEnd=1;
				PrintStr("System fatal error!\n");
				putchar(7);putchar(7);putchar(7);
			}
		}
	}
}
/******************************************************************************/
/*        Task 3 用户任务1    */
/******************************************************************************/
void TaskUser1 (void) _task_ USER1
{   
    for(;;){
		if(mDebug&0x1)
        	PrintStr("\tUserTask1 is active.\n");

        os_wait(K_TMO,255,0); 
    }    
}
/******************************************************************************/
/*        Task 3 用户任务2    */
/******************************************************************************/
void TaskUser2 (void) _task_ USER2
{   
	int i;
	i=0;

    for(;;){
		if(mDebug&0x2)
			{
			i=1-i;
			if(i==0)
				{
				P0=0;
				}
			else
				{
				P0=1;
				}
			}

        os_wait(K_TMO,255,0); 
    }    
}


⌨️ 快捷键说明

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