zoukankan      html  css  js  c++  java
  • 【iCore4 双核心板_uC/OS-II】例程四:软件定时器

    一、实验说明:

      一些应用程序执行它们的任务时需要延迟一段特定的时间,因此uC/OS-II为我们提供了一些相应的

    延时函数,本例程我们使用软件定时器定时500ms点亮相应的LED实现三色LED循环闪烁。

    二、实验截图:

    三、源代码下载链接:

    链接:https://pan.baidu.com/s/1kWFhoXp 密码:xuc7

    四、核心代码:

    /*
     * 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("33[1;32;40m");                          //设置字体终端为绿色
        usart6.printf("
    Hello, I am iCore4!
    
    ");
    
        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
    ",f);     //串口输出
            OSTimeDlyHMSM(0,0,0,500);                //延时500ms
        }
    }

    iCore4链接:

  • 相关阅读:
    Notes about "Exploring Expect"
    Reuse Sonar Checkstyle Violation Report for Custom Data Analysis
    Eclipse带参数调试的方法
    MIT Scheme Development on Ubuntu
    Manage Historical Snapshots in Sonarqube
    U盘自动弹出脚本
    hg的常用配置
    Java程序员的推荐阅读书籍
    使用shared memory 计算矩阵乘法 (其实并没有加速多少)
    CUDA 笔记
  • 原文地址:https://www.cnblogs.com/xiaomagee/p/8403425.html
Copyright © 2011-2022 走看看