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

📄 book3.c

📁 ucos2.8 移植到linux下的代码
💻 C
📖 第 1 页 / 共 2 页
字号:
*********************************************************************************************************
*/

static  void  TaskStartDispInit (void)
{
/*                                1111111111222222222233333333334444444444555555555566666666667777777777 */
/*                      01234567890123456789012345678901234567890123456789012345678901234567890123456789 */
    PC_DispStr( 0,  0, "                         uC/OS-II, The Real-Time Kernel                         ", COLOR_WHITE , COLOR_RED );
    PC_DispStr( 0,  1, "                                Jean J. Labrosse                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0,  2, "                                                                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0,  3, "                                    EXAMPLE #3                                  ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0,  4, "                                                                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0,  5, "                                                                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0,  6, "                                                                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0,  7, "                                                                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0,  8, "                                                                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0,  9, "Task Name         Counter  Exec.Time(uS)   Tot.Exec.Time(uS)  %Tot.             ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0, 10, "----------------- -------  -------------   -----------------  -----             ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0, 11, "                                                                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0, 12, "                                                                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0, 13, "                                                                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0, 14, "                                                                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0, 15, "                                                                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0, 16, "                                                                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0, 17, "                                                                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0, 18, "                                                                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0, 19, "                                                                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0, 20, "                                                                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0, 21, "                                                                                ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0, 22, "#Tasks          :        CPU Usage:     %                                       ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0, 23, "#Task switch/sec:                                                               ", COLOR_BLACK , COLOR_LIGHT_GRAY);
    PC_DispStr( 0, 24, "                            <-PRESS 'Ctrl C' TO QUIT->                          ", COLOR_BLACK , COLOR_LIGHT_GRAY );
/*                                1111111111222222222233333333334444444444555555555566666666667777777777 */
/*                      01234567890123456789012345678901234567890123456789012345678901234567890123456789 */
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                           UPDATE THE DISPLAY
*********************************************************************************************************
*/

static  void  TaskStartDisp (void)
{
    char   s[80];


    sprintf(s, "%5d", OSTaskCtr);                                  /* Display #tasks running               */
    PC_DispStr(18, 22, s, COLOR_YELLOW , COLOR_BLUE);

#if OS_TASK_STAT_EN > 0
    sprintf(s, "%3d", OSCPUUsage);                                 /* Display CPU usage in %               */
    PC_DispStr(36, 22, s, COLOR_YELLOW , COLOR_BLUE);
#endif

    sprintf(s, "%5d", OSCtxSwCtr);                                 /* Display #context switches per second */
    PC_DispStr(18, 23, s, COLOR_YELLOW , COLOR_BLUE);

    sprintf(s, "V%1d.%02d", OSVersion() / 100, OSVersion() % 100); /* Display uC/OS-II's version number    */
    PC_DispStr(75, 24, s, COLOR_YELLOW , COLOR_BLUE);

}

/*$PAGE*/
/*
*********************************************************************************************************
*                                               TASK #1
*********************************************************************************************************
*/

void  Task1 (void *pdata)
{
    char  *msg;
    INT8U  err;


    pdata = pdata;
    for (;;) {
        msg = (char *)OSQPend(MsgQueue, 0, &err);
        PC_DispStr(70, 13, msg, COLOR_YELLOW , COLOR_BLUE);
        OSTimeDlyHMSM(0, 0, 0, 100);
    }
}

/*
*********************************************************************************************************
*                                               TASK #2
*********************************************************************************************************
*/

void  Task2 (void *pdata)
{
    char  msg[20];


    pdata = pdata;
    strcpy(&msg[0], "Task 2");
    for (;;) {
        OSQPost(MsgQueue, (void *)&msg[0]);
        OSTimeDlyHMSM(0, 0, 0, 500);
    }
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                               TASK #3
*********************************************************************************************************
*/

void  Task3 (void *pdata)
{
    char  msg[20];


    pdata = pdata;
    strcpy(&msg[0], "Task 3");
    for (;;) {
        OSQPost(MsgQueue, (void *)&msg[0]);
        OSTimeDlyHMSM(0, 0, 0, 500);
    }
}

/*
*********************************************************************************************************
*                                               TASK #4
*********************************************************************************************************
*/

void  Task4 (void *pdata)
{
    char  msg[20];


    pdata = pdata;
    strcpy(&msg[0], "Task 4");
    for (;;) {
        OSQPost(MsgQueue, (void *)&msg[0]);
        OSTimeDlyHMSM(0, 0, 0, 500);
    }
}
/*$PAGE*/
/*
*********************************************************************************************************
*                                               TASK #5
*********************************************************************************************************
*/

void  Task5 (void *pdata)
{
    pdata = pdata;
    for (;;) {
        OSTimeDlyHMSM(0, 0, 0, 100);
    }
}

/*
*********************************************************************************************************
*                                               CLOCK TASK
*********************************************************************************************************
*/

void  TaskClk (void *pdata)
{
    char  s[40];


    pdata = pdata;
    for (;;) {
        PC_GetDateTime(s);
        PC_DispStr(56, 23, s, COLOR_YELLOW , COLOR_BLUE);
        OSTimeDlyHMSM(0, 0, 0, 500);
    }
}

/*$PAGE*/
/*
*********************************************************************************************************
*                                      DISPLAY TASK RELATED STATISTICS
*********************************************************************************************************
*/

void  DispTaskStat (INT8U id)
{
    char  s[80];


    sprintf(s, "%-18s %05u      %5u          %10d",
            TaskUserData[id].TaskName,
            TaskUserData[id].TaskCtr,
            TaskUserData[id].TaskExecTime,
            TaskUserData[id].TaskTotExecTime);
    PC_DispStr(0, id + 11, s, COLOR_BLACK , COLOR_LIGHT_GRAY);
}

/*
*********************************************************************************************************
*                                           STATISTIC TASK HOOK
*********************************************************************************************************
*/

void  OSTaskStatHook (void)
{
    char    s[80];
    INT8U   i;
    INT32U  total;
    INT8U   pct;


    total = 0L;                                          /* Totalize TOT. EXEC. TIME for each task */
    for (i = 0; i < 7; i++) {
        total += TaskUserData[i].TaskTotExecTime;
        DispTaskStat(i);                                 /* Display task data                      */
    }
    if (total > 0) {
        for (i = 0; i < 7; i++) {                        /* Derive percentage of each task         */
            pct = 100 * TaskUserData[i].TaskTotExecTime / total;
            sprintf(s, "%3d %%", pct);
            PC_DispStr(62, i + 11, s, COLOR_BLACK , COLOR_LIGHT_GRAY);
        }
    }
    if (total > 1000000000L) {                           /* Reset total time counters at 1 billion */
        for (i = 0; i < 7; i++) {
            TaskUserData[i].TaskTotExecTime = 0L;
        }
    }
}

/*
*********************************************************************************************************
*                                           TASK SWITCH HOOK
*********************************************************************************************************
*/
void  OSTaskSwHook (void)
{
    INT16U           time;
    TASK_USER_DATA  *puser;


    time  = PC_ElapsedStop();                    /* This task is done                                  */
    PC_ElapsedStart();                           /* Start for next task                                */
    puser = OSTCBCur->OSTCBExtPtr;               /* Point to used data                                 */
    if (puser != (TASK_USER_DATA *)0) {
        puser->TaskCtr++;                        /* Increment task counter                             */
        puser->TaskExecTime     = time;          /* Update the task's execution time                   */
        puser->TaskTotExecTime += time;          /* Update the task's total execution time             */
    }
}

⌨️ 快捷键说明

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