【iCore4 雙核心板_uC/OS-II】例程四:軟件定時器

1、實驗說明:函數

  一些應用程序執行它們的任務時須要延遲一段特定的時間,所以uC/OS-II爲咱們提供了一些相應的字體

延時函數,本例程咱們使用軟件定時器定時500ms點亮相應的LED實現三色LED循環閃爍。spa

2、實驗截圖:code

3、源代碼下載連接:htm

連接:https://pan.baidu.com/s/1kWFhoXp 密碼:xuc7blog

4、核心代碼:ip

/*
 * Name                : main
 * Description         : ---
 * Author              : zh.
 *
 * History
 * --------------------
 * Rev                 : 0.00
 * Date                : 07/12/2017
 * 
 * create.
 * --------------------
 */
/*實驗現象:
  紅綠藍三色燈循環定時點亮。
  */
int main(void)
{
    system_clock.initialize();                               //系統時鐘初始化
    led.initialize();                                        //LED初始化
    usart6.initialize(115200);                               //串口初始化
    usart6.printf("\x0c");                                   //清屏    
    usart6.printf("\033[1;32;40m");                          //設置字體終端爲綠色
    usart6.printf("\r\nHello, I am iCore4!\r\n\r\n");

    OSInit();                                                          //UCOS初始化
    OSTaskCreate(start_task,                                 //建立開始任務
            (void*)0,                                   //任務參數
            (OS_STK*)&START_TASK_STK[START_STK_SIZE-1], //任務堆棧
            START_TASK_PRIO);                           //任務優先級
    OSStart();                                               //開啓UCOS    
}
/*
 * Name                : start_task
 * Description         : ---
 * Author              : liu.
 *
 * History
 * --------------------
 * Rev                 : 0.00
 * Date                : 07/12/2017
 * 
 * create.
 * --------------------
 */
void start_task(void *pdata)
{
    OS_CPU_SR cpu_sr;

    OSStatInit();//初始化統計任務

    OS_ENTER_CRITICAL();//關中斷

    OSTaskCreate(timer_task,(void*)0,(OS_STK*)&TIMER_TASK_STK[TIMER_STK_SIZE-1],TIMER_TASK_PRIO);//建立LED0任務
    OSTaskCreate(usart_task,(void*)0,(OS_STK*)&USART_TASK_STK[USART_STK_SIZE-1],USART_TASK_PRIO);//建立usart任務
    OSTaskSuspend(OS_PRIO_SELF);//掛起start_task任務

    OS_EXIT_CRITICAL();//開中斷
}
/*
 * Name                : led0_task
 * Description         : ---
 * Author              : liu.
 *
 * History
 * --------------------
 * Rev                 : 0.00
 * Date                : 07/12/2017
 * 
 * create.
 * --------------------
 */
void TmrCallback(OS_TMR *ptmr,void *p_arg)
{
    static int counter = 0;

    /*
       LED_XX_ON        點亮相應LED
       LED_XX_OFF    熄滅相應LED

       三色LED交替閃爍*/
    if(counter % 3 == 0){
        LED_RED_ON;
        LED_GREEN_OFF;
        LED_BLUE_OFF;
    }else if(counter % 3 == 1){
        LED_RED_OFF;
        LED_GREEN_ON;
        LED_BLUE_OFF;
    }else if(counter % 3 == 2){
        LED_RED_OFF;
        LED_GREEN_OFF;
        LED_BLUE_ON;
    }
    counter ++;
}
/*
 * Name                : led0_task
 * Description         : ---
 * Author              : liu.
 *
 * History
 * --------------------
 * Rev                 : 0.00
 * Date                : 07/12/2017
 * 
 * create.
 * --------------------
 */
void timer_task(void *pdata)
{
    INT8U    err;
    OS_TMR   * soft_timer;//軟件定時器

    soft_timer = OSTmrCreate(10,10,OS_TMR_OPT_PERIODIC,(OS_TMR_CALLBACK)TmrCallback,0,(INT8U *)"soft_timer",&err);//100ms執行一次
    OSTmrStart(soft_timer,&err);//啓動軟件定時器         

    while(1){
        OSTimeDlyHMSM(0,0,0,500);//延時500ms
    }
}

/*
 * Name                : usart_task
 * Description         : ---
 * Author              : liu.
 *
 * History
 * --------------------
 * Rev                 : 0.00
 * Date                : 07/12/2017
 * 
 * create.
 * --------------------
 */
void usart_task(void *pdata)
{    
    double f=0.1;

    while(1){
        f+=0.1f;                                 //浮點型運算
        usart6.printf("float f=%.4f\r\n",f);     //串口輸出
        OSTimeDlyHMSM(0,0,0,500);                //延時500ms
    }
}

iCore4連接:get

相關文章
相關標籤/搜索