📄 system.c
字号:
/*******************************************************************************//*启动等待*//*******************************************************************************/INT8U StartWait(void){ #if OS_SEND_EN>0 uint8 x; uint32 y; sysprintf("This system is uC/OS-II,A Real-Time Kernel\n\r"); sysprintf("The syetem make by Jean J. Labrosse\n\r"); sysprintf("This example by Z.Q.Yang\n\r"); sysprintf("Perss any key to stop to SHELL: "); for(x=3;x>0;x--) { // sendbyte(x+0x30); sysprintf("%d",x); for(y=1500000;y>0;y--) { if((U0LSR&0x01)!=0) { revbyte(); sysprintf("\n\rTurn to shell...\n\r"); return 1; } } sendbyte(8); } sysprintf("\n\rTurn to user...\n\r"); return 0; #endif }/*******************************************************************************//*查看系统时间*//*******************************************************************************/void systime(void){ #if OS_SEND_EN>0 sysprintf("System time is :%2d-%2d-%2d %2d-%2d-%4d\n\r",HOUR,MIN,SEC,MONTH,DOM,YEAR); #endif}#if (OS_SHELL_EN&OS_SEND_EN)>0extern void Reset(void);//extern void LCDClr(void);/*******************************************************************************//*shell启动*//*******************************************************************************/void ShellStart(void){ sysprintf("uC/OS-II Shell\n\r"); sysprintf("Version %d.%d\n\r",SHELL_VERSION/100,(SHELL_VERSION-(SHELL_VERSION/100)*100)); sysprintf("By Z.Q.Yang\n\r"); sysprintf("Sash command shell\n\r>");}/*******************************************************************************//*shell退出*//*******************************************************************************/void exitshell(void){ sysprintf("SHELL exit...\n\r"); CreatUseTask(); OSTaskDel(OS_PRIO_SELF);}/*******************************************************************************//*从shell运行*//*******************************************************************************/void run(void){ CreatUseTask();}/*******************************************************************************//*从shell运行*//*******************************************************************************/void shellclr(){ // LCDClr();}/*******************************************************************************//*指令错误*//*******************************************************************************/void shellcmderr(void){ sysprintf("Unkonw command %s,-try help\n\r",cmdbuf);}/*******************************************************************************//*shell帮助函数*//*******************************************************************************/void shellhelp(void){ sysprintf("%-10s: see CPU usage\n\r",cmmd[0]); sysprintf("%-10s: see time tick total\n\r",cmmd[1]); sysprintf("%-10s: see task prio\n\r",cmmd[2]); sysprintf("%-10s: see taskSW total\n\r",cmmd[3]); sysprintf("%-10s: see task total\n\r",cmmd[4]); sysprintf("%-10s: see all\n\r",cmmd[5]); sysprintf("%-10s: ask help\n\r",cmmd[6]); sysprintf("%-10s: exit shell and run user\n\r",cmmd[7]); sysprintf("%-10s: see the system time\n\r",cmmd[8]); sysprintf("%-10s: run user but not exit shell\n\r",cmmd[9]); sysprintf("%-10s: system reset\r",cmmd[10]); sysprintf("%-10s: clr\n\r",cmmd[11]); sysprintf("%-10s: delete a task\n\r",cmmd[12]); sysprintf("other set by user\n\r");}/*******************************************************************************//*删除一个任务*//*******************************************************************************/void del(){ INT8U prio; if(cmdbuf[4]=='\0')sysprintf("You lost the prio!\n\r"); else { prio=NumChang(cmdbuf+4); if(prio==OSPrioCur)sysprintf("ERROR!You can't delete self!\n\r"); else { if(OS_NO_ERR==OSTaskDel(prio)) { sysprintf("Prio %d was delete!\n\r",prio); } else sysprintf("ERROR! The prio isn't exist!\n\r"); } }}/*******************************************************************************//*挂起一个任务*//*******************************************************************************/void suspend(){ INT8U prio; if(cmdbuf[4]=='\0')sysprintf("You lost the prio!\n\r"); else { prio=NumChang(cmdbuf+4); if(prio==OSPrioCur)sysprintf("ERROR!You can't suspend self!\n\r"); else { if(OS_NO_ERR==OSTaskSuspend(prio)) { sysprintf("Prio %d was suspend!\n\r",prio); } else sysprintf("ERROR! The prio isn't exist!\n\r"); } }}/*******************************************************************************//*恢复一个任务*//*******************************************************************************/void resume(){ INT8U prio; if(cmdbuf[4]=='\0')sysprintf("You lost the prio!\n\r"); else { prio=NumChang(cmdbuf+4); if(prio==OSPrioCur)sysprintf("ERROR!You can't resume self!\n\r"); else { if(OS_NO_ERR==OSTaskResume(prio)) { sysprintf("Prio %d was resume!\n\r",prio); } else sysprintf("ERROR! The prio isn't exist or haven't suspend!\n\r"); } }}/*******************************************************************************//*shell任务*//*******************************************************************************/ void OSShell(void *padata){ uint8 i,command,flag; ShellStart(); while(1) { for(i=0;i<CMDLEN;i++)cmdbuf[i]='\0'; revstr(cmdbuf); OS_ENTER_CRITICAL(); for(i=0;cmdbuf[i]!='\0';i++) cmdbuf[i]=(uint8)tolower(cmdbuf[i]); for(i=0;i<CMD;i++) { flag=cmp(cmmd[i],cmdbuf); if(flag==0) { command=i; break; } else command=0xff; } OS_EXIT_CRITICAL(); switch(command) { case 0:CPUUsage(); break; case 1:Tick(); break; case 2:Prio(); break; case 3:SWCtr(); break; case 4:TaskCtr(); break; case 5:SeeAll(); break; case 6:shellhelp(); break; case 7:exitshell(); break; case 8:systime(); break; case 9:run(); break; case 10:Reset(); break; case 11:shellclr(); break; case 12:del(); break; case 13:suspend(); break; case 14:resume(); break; case 15://takecmd2(); break; case 16://takecmd2(); break; case 17://takecmd2(); break; case 18://takecmd2(); break; case 19://takecmd2(); break; case 0xff:shellcmderr(); break; } sendbyte('>'); OSTimeDly(OS_TICKS_PER_SEC/50); }}/*******************************************************************************//*shell初始化*//*******************************************************************************/void OSShellInit(INT8U PRIO) { UART_MODE uset; uset.bps=115200; uset.stp=1; uset.datlen=8; uset.parity=0xff; UARTInit(0,uset); OSTaskCreateExt(OSShell,(void *)0,&OSShellStk[ShellStkLen-1],PRIO, 7,&OSShellStk[0],ShellStkLen,(void *)0,OS_TASK_OPT_STK_CHK); // OSTaskCreate(OSShell,(void *)0,&OSShellStk[ShellStkLen-1],PRIO); } #endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -