void TaskStart (void *pdata) { #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif INT16S key; pdata = pdata; /* Prevent compiler warning */ TaskStartDispInit(); /* Setup the display */ OSStatInit(); /* Initialize uC/OS-II's statistics */ MsgQueue = OSQCreate(&MsgQueueTbl[0], MSG_QUEUE_SIZE); /* Create a message queue */ TaskStartCreateTasks(); for (;;) { TaskStartDisp(); /* Update the display */ if (PC_GetKey(&key)) { /* See if key has been pressed */ if (key == 0x1B) { /* Yes, see if it's the ESCAPE key */ exit(0); /* Yes, return to DOS */ } } OSCtxSwCtr = 0; /* Clear the context switch counter */ OSTimeDly(OS_TICKS_PER_SEC); /* Wait one second */ } }
/* ********************************************************************************************************* * STARTUP TASK ********************************************************************************************************* */ void TaskStart (void *pdata) { #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif char s[100]; INT16S key; pdata = pdata; /* Prevent compiler warning */ TaskStartDispInit(); /* Initialize the display */ OS_ENTER_CRITICAL(); /* Used to disable interrupts (see chapter 13)*/ PC_VectSet(0x08, OSTickISR); /* Install uC/OS-II's clock tick ISR */ PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */ OS_EXIT_CRITICAL(); /* Re-enable interrupts*/ OSStatInit(); /* Initialize uC/OS-II's statistics */ TaskStartCreateTasks(); /* Create all the application tasks */ for (;;) { if (PC_GetKey(&key) == TRUE) { /* See if key has been pressed */ if (key == 0x1B) { /* Yes, see if it's the ESCAPE key */ PC_DOSReturn(); /* Return to DOS */ } } OSCtxSwCtr = 0; /* Clear context switch counter */ OSTimeDlyHMSM(0, 0, 1, 0); /* Wait one second */ } }
/* ********************************************************************************************************* * STARTUP TASK ********************************************************************************************************* */ void TaskStart (void *pdata) { #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */ OS_CPU_SR cpu_sr; #endif char s[100]; INT16S key; pdata = pdata; /* Prevent compiler warning */ TaskStartDispInit(); /* Initialize the display */ OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR); /* Install uC/OS-II's clock tick ISR */ PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */ OS_EXIT_CRITICAL(); OSStatInit(); /* Initialize uC/OS-II's statistics */ FileContentInit(); /* Initialize fileContent */ TaskStartCreateTasks(); /* Create all the application tasks */ OSTaskCreate(ReceiveTask,(void *)0, &ReceiveTaskStk[TASK_STK_SIZE - 1], 11); for (;;) { TaskStartDisp(); /* Update the display */ if (PC_GetKey(&key) == TRUE) { /* See if key has been pressed */ if (key == 'q') /* Yes, see if it's the ESCAPE key */ PC_DOSReturn(); /* Return to DOS */ if (key == 'b') /* See if it's b and then stop the tasks */ TaskSuspend(); if (key == 'r') /* See if it's r and then resume the tasks */ TaskResume(); } OSCtxSwCtr = 0; /* Clear context switch counter */ OSTimeDlyHMSM(0, 0, 0, 100); /* Wait one second */ } }
/* ********************************************************************************************************* * RECEIVETASK ********************************************************************************************************* */ void ReceiveTask(void *pdata) { INT8U err; INT8U pos_x = 0, pos_y = 0; INT8U font_color; char *str_receiv; INT16U recev; float result; char avg[10]; char attention[2]; INT16U i = 0; ///used for row control char str_print[10]; INT16U number = 0; //used for calculating averages in receiving data. FILE* fp; char filename[25]; INT16U data_iter = 0; //data_iter/10 is the row and data_iter%10 is the col static INT16U times[10]; //used for count the times received static INT16U data[10]; //used for record all the data. static INT16U max[10]; static INT16U min[10]; static INT16U sumr[10]; pdata = pdata; memset(min,1000,sizeof(min)); //initialize the min array for (;;) { GetDate(filename); strcat(filename,"Rv.dat"); fp = fopen(filename, "a"); str_receiv = OSQPend(MSGQ,20,&err); //request message pos_x = i; i ++; i %= 10; if (pos_y/10 == 7) { pos_y = 0; PC_DispClrScr(DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); TaskStartDispInit(); } PC_DispStr(5+6*pos_x, 10 + pos_y/10, str_receiv, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY); fprintf(fp, "%s", str_receiv); recev = atoi(str_receiv); if (data_iter == 70) { data_iter = 0; } data[data_iter%10] = recev; PntIntNum((++ times[data_iter%10]),5+6*pos_x, 17); if (times[9] == 100) { TaskSuspend(); } max[data_iter%10] = (max[data_iter%10] < recev) ? recev : max[data_iter%10]; PntIntNum(max[data_iter%10],5+6*pos_x, 18); min[data_iter%10] = (min[data_iter%10] > recev) ? recev : min[data_iter%10]; PntIntNum(min[data_iter%10],5+6*pos_x, 19); sumr[data_iter%10] += recev; PntFltNum((float)sumr[data_iter%10]/(float)times[data_iter%10],5+6*pos_x,20); DrawGraph(sumr[data_iter%10]/times[data_iter%10], pos_x); data_iter ++; number += recev; result = (float)number/10.0; sprintf(avg,"%6.2f",result); attention[0] = Classify((unsigned int)result); attention[1] = 0; //the string ending strcat(avg,attention); font_color = 0x00 + ((*attention) - 'A'); PC_DispStr(68, 10 + pos_y/10, avg, font_color + DISP_BGND_LIGHT_GRAY); if (pos_y%10 == 9) { fprintf(fp, "%8s\n%6s",avg," "); memset(avg,0,sizeof(avg)); number = 0; RemoveGraph(); } OSTimeDlyHMSM(0, 0, 0, 100); pos_y ++; fclose(fp); } }