📄 control.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 + -