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

📄 app.c

📁 基于 ST 公司的 ARM-7 使用之 uC/OS-II 作业系统,此例程是移植于 STR-750 上的应用,有支援 OS_View 观察器功能,于 IAR EWARM V4.41A 工程编译,而 u
💻 C
📖 第 1 页 / 共 2 页
字号:
        if (msg != (CPU_INT08U *)0) {                           /* If message has been posted ....                          */
            value = *msg;
            change = DEF_TRUE;
            if (value == 1) {                                   /* ... update the current user if state ...                 */
                if (user_if_state == 0) {
                    user_if_state = 3;
                } else {
                    user_if_state--;
                }
            } else if (value == 2) {
                user_if_state = (user_if_state + 1) % 4;
            }
            DispClrScr();                                       /* ... clear the display screen.                            */
        }

        switch (user_if_state) {                                /* Display appropriate message                              */
            case 1:
                 OS_StrCopy(s, "uC/OS-II:  Vx.yy");
                 value = (CPU_INT32U)OSVersion();
                 s[12] = value / 100 + '0';
                 s[14] = (value % 100) / 10 + '0';
                 s[15] = (value %  10) + '0';
                 DispStr(0, 0, s);

                 OS_StrCopy(s, "TickRate:   xxxx");
                 value = (CPU_INT32U)OS_TICKS_PER_SEC;
                 AppFormatDec(&s[12], value, 4);
                 DispStr(1, 0, s);
                 break;

            case 2:
                 OS_StrCopy(s, "CPU Usage:xx %  ");
                 value = (CPU_INT32U)OSCPUUsage;
                 s[10] = (value / 10) + '0';
                 s[11] = (value % 10) + '0';
                 DispStr(0, 0, s);

                 OS_StrCopy(s, "CPU Speed:xx MHz");
                 value = (CPU_INT32U)BSP_CPU_ClkFreq() / 1000000L;
                 s[10] = (value / 10) + '0';
                 s[11] = (value % 10) + '0';
                 DispStr(1, 0, s);
                 break;

            case 3:
                 OS_StrCopy(s, "#Ticks: xxxxxxxx");
                 value = (CPU_INT32U)OSTime;
                 AppFormatDec(&s[8], value, 8);
                 DispStr(0, 0, s);

                 OS_StrCopy(s, "#CtxSw: xxxxxxxx");
                 value = (CPU_INT32U)OSCtxSwCtr;
                 AppFormatDec(&s[8], value, 8);
                 DispStr(1, 0, s);
                 break;

            case 0:
            default:
                 if (change) {
                     DispStr(0, 0, "Micrium uC/OS-II");             /* Display 'sign on' message                                */
                     DispStr(1, 0, "   ST  STR75x   ");
                     user_if_state = 0;
                 }
                 break;

        }
    OSTimeDlyHMSM(0, 0, 0, 50);
    }
}
#endif


/*
*********************************************************************************************************
*                                      CREATE APPLICATION TASKS
*********************************************************************************************************
*/

static  void  AppTaskCreate (void)
{
    CPU_INT08U  err;


#if uC_LCD_MODULE == DEF_TRUE
    OSTaskCreateExt(AppTaskUserIF,
                    (void *)0,
                    (OS_STK *)&AppTaskUserIFStk[APP_TASK_USER_IF_STK_SIZE - 1],
                    APP_TASK_USER_IF_PRIO,
                    APP_TASK_USER_IF_PRIO,
                    (OS_STK *)&AppTaskUserIFStk[0],
                    APP_TASK_USER_IF_STK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);

#if OS_TASK_NAME_SIZE > 13
    OSTaskNameSet(APP_TASK_USER_IF_PRIO, "User I/F", &err);
#endif
#endif
}


/*
*********************************************************************************************************
*                                      TERMINAL WINDOW CALLBACK
*********************************************************************************************************
*/

#if OS_VIEW_MODULE > 0
static  void  AppTerminalRx (CPU_INT08U rx_data)
{
}
#endif


/*
*********************************************************************************************************
*                                      HANDLE THE PB INTERRUPT
*
* Description: This function is the ISR for the PB interrupt.  The actions taken are as follows:
*                   On PB1, a message "1" is posted to the user IF task, causing the previous page
*                           to be written to the display;
*                   On PB2, a message "2" is posted to the user IF task, causing the next     page
*                           to be written to the display;
*                   On PB3, no action is taken;
*                   On PB4, the LCD backlight is turned on;
*                   On PB1 AND PB2, no action is taken;
*
* Arguments  : none
*
* Returns    : none
*********************************************************************************************************
*/

static  void  EXTINT_ISRHandler (void)
{
    CPU_BOOLEAN  change;


    change = DEF_FALSE;

    if (EXTIT_GetITStatus(EXTIT_ITLine7) == SET) {              /* If PB1 has been pressed ...                              */
        change      = DEF_TRUE;
        if (EXTIT_GetITStatus(EXTIT_ITLine8) == RESET) {        /* ... and PB2 has not ...                                  */
            EXTINT_Char = 1;                                    /* ... then post a 1 to the user IF task.                   */
            OSMboxPost(EXTINT_Mbox, &EXTINT_Char);
        }
        EXTIT_ClearITPendingBit(EXTIT_ITLine7);                 /* ... In any case, clear pending bit.                      */
    }

    if (EXTIT_GetITStatus(EXTIT_ITLine8) == SET) {              /* If PB2 has been pressed ...                              */
        if (change == DEF_FALSE) {                              /* ... and PB1 has not ...                                  */
            EXTINT_Char = 2;                                    /* ... then post a 2 to the user IF task.                   */
            OSMboxPost(EXTINT_Mbox, &EXTINT_Char);
        }
        EXTIT_ClearITPendingBit(EXTIT_ITLine8);                 /* ... In any case, clear pending bit.                      */
    }

    if (EXTIT_GetITStatus(EXTIT_ITLine9) == SET) {              /* If PB3 has been pressed ...                              */
        EXTIT_ClearITPendingBit(EXTIT_ITLine9);                 /* ... clear pending bit.                                   */
    }                                                           /* ... Further actions could be configured.                 */

    if (EXTIT_GetITStatus(EXTIT_ITLine11) == SET) {             /* If PB4 has been pressed ...                              */
        LED_Toggle(LED_LIGHT_LCD);                              /* ... toggle the LCD backlight LED ...                     */
        EXTIT_ClearITPendingBit(EXTIT_ITLine11);                /* ... and clear pending bit.                               */
    }
    EIC->IPR = (CPU_INT32U)(1 << EXTIT_IRQChannel);             /* Clear interrupt pending bit in EIC_IPR register          */
}


/*
*********************************************************************************************************
*                                      FORMAT A DECIMAL VALUE
*
* Description: This function converts a decimal value to ASCII (with leading zeros)
*
* Arguments  : s       is a pointer to the destination ASCII string
*              value   is the value to convert (assumes an unsigned value)
*              digits  is the desired number of digits
*********************************************************************************************************
*/

static  void  AppFormatDec (CPU_INT08U *s, CPU_INT32U value, CPU_INT08U digits)
{
    CPU_INT08U      i;
    CPU_INT32U      mult;


    mult        = 1;
    for (i = 0; i < (digits - 1); i++) {
        mult   *= 10;
    }
    while (mult > 0) {
        *s++    = value / mult + '0';
        value  %= mult;
        mult   /= 10;
    }
    *s          = 0;
}

⌨️ 快捷键说明

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