void OSMonitorTask(void *data) { unsigned char s[128]; int i, j, badcmd; for(i = 0; cmds[i].Name != NULL; ++i) cmds[i].NameLen = strlen(cmds[i].Name); while(1) { OSPrintf("monitor>"); OSGets(s); if(s[0] == '\0') continue; for(i = 0; s[i] == ' ' && s[i] != '\0'; ++i) ; badcmd = 1; for(j = 0; cmds[j].Name != NULL; ++j) if(!strncmp(cmds[j].Name, &s[i], cmds[j].NameLen)) { cmds[j].Func(s + i + cmds[j].NameLen); badcmd = 0; } if(badcmd) OSPrintf("monitor: command not found\n"); } }
void Task1(void *pdata) //任务1,控制LED灯亮,开启蜂鸣器同时鸣叫 { U16 task1Cnt=0; if(user_task1_firstboot == 1) { // RTC初始化 Rtc_Init(); user_task1_firstboot = 0; } while (1) { task1Cnt++; OSPrintf("\nEnter Task1\n"); OSPrintf("uC/OS Version:V%4.2f\n",(float)OSVersion()*0.01);//打印uC/OS的版本号 //实现流水灯 if((task1Cnt%5) == 0) rGPBDAT = 0x1E0; //全灭 else rGPBDAT = rGPBDAT - (0x10<<(task1Cnt%5)); //流水灯 #if 0 //蜂鸣器鸣叫 Beep(3000, 60); Beep(2500, 60); Beep(2000, 60); Beep(1500, 60); Beep(1000, 60); Beep(900, 60); #endif OSTimeDly(OS_TICKS_PER_SEC*5); } }
void Task0(void *pdata) //任务0,打印CPU占用率 { while (1) { OSPrintf("\nEnter Task0\n"); OSPrintf("\nTest by me for git\n"); OSPrintf("CPU Usage: %d%%\n",OSCPUUsage); //打印CPU占用率,调用系统变量实现 OSTimeDly(OS_TICKS_PER_SEC); } }
void _monitor_ps(unsigned char *params) { int i, printed; char stat; OS_TCB *p; for(i = 0, printed = 0; i < OS_LO_PRIO + 1; ++i) { if(printed%23 == 0) { if(printed != 0) { OSPrintf("\npress any key to continue"); OSGetKey(); OSPrintf("\n"); } OSPrintf("PRIO STAT DLY STACK ptr used NAME"); } p = OSTCBPrioTbl[i]; if(p != NULL) { switch(p->OSTCBStat) { case OS_STAT_RDY: if(p->OSTCBDly == 0) stat = 'R'; else stat = 'W'; break; case OS_STAT_MBOX: stat = 'M'; break; case OS_STAT_SEM: stat = 'S'; break; case OS_STAT_Q: stat = 'Q'; break; default: stat = 'U'; break; } OSPrintf("\n%4d%5c %08X %08X %08X %s", (int)p->OSTCBPrio, stat, p->OSTCBDly, p->OSTCBStkPtr, (int)((char*)p->OSTCBInitialStkPtr - (char*)p->OSTCBStkPtr), p->TaskName); ++printed; } } OSPrintf("\n"); return; }
void MainTask(void *pdata) //Main Task create taks0 and task1 { #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif OS_ENTER_CRITICAL(); Timer0Init(); //initial timer0 for ucos time tick ISRInit(); //initial interrupt prio or enable or disable OS_EXIT_CRITICAL(); OSPrintfInit(); //use task to print massage to Uart OSStatInit(); OSTaskCreate (Task0,(void *)0, &Task0Stk[Task0StkLengh - 1], Task0Prio); OSTaskCreate (Task1,(void *)0, &Task1Stk[Task1StkLengh - 1], Task1Prio); OSTaskCreate (Task2,(void *)0, &Task2Stk[Task2StkLengh - 1], Task2Prio); OSTaskCreate (Task3,(void *)0, &Task3Stk[Task2StkLengh - 1], Task3Prio); while(1) { OSPrintf("\nEnter Main Task\n"); OSTimeDly(OS_TICKS_PER_SEC); } }
void Task2(void *pdata) { unsigned int i, x, m, n, k, y; int tmp,key; int width = 10; int height = 100; if(user_task2_firstboot == 1) { //LCD 初始化 Lcd_Display(); user_task2_firstboot = 0; } while(1) { i++; if(i>99)i=0; if(rBCDYEAR == 0x99) rYear = 1999; else rYear = (2000 + rBCDYEAR); rMonth = FROM_BCD(rBCDMON & 0x1f); rDay = FROM_BCD(rBCDDAY & 0x03f); rDayOfWeek = rBCDDATE - 1; rHour = FROM_BCD(rBCDHOUR & 0x3f); rMinute = FROM_BCD(rBCDMIN & 0x7f); rSecond = FROM_BCD(rBCDSEC & 0x7f); OSTimeDly( 5 ); OSPrintf("\nEnter Task2\n"); OSPrintf("LCD display Test!\n\n"); //在LCD上打印日期,星期,时间 Lcd_printf(0,65,RGB( 0xFF,0xFF,0xFF),RGB( 0x00,0x00,0x00),0,"时间:%4d-%02d-%02d 星期%d %02d:%02d:%02d\n", rYear, rMonth, rDay,rDayOfWeek, rHour, rMinute, rSecond); Lcd_printf(84,92,RGB( 0xFF,0xFF,0xFF),RGB( 0x00,0x00,0x00),1," uC/OS2任务演示"); Lcd_printf(89,122,RGB( 0xFF,0xFF,0xFF),RGB( 0x00,0x00,0x00),0,"任务 计数中:%02d" , i); OSTimeDly(OS_TICKS_PER_SEC/5); } }
void Task3(void *pData) { while (1) { OSPrintf("\nEnter Task3\n"); OSTimeDly(OS_TICKS_PER_SEC); } }