zoukankan      html  css  js  c++  java
  • (uC/OS-II学习笔记)uC/OS-II 时间管理

    OSTimeDly(INT16U ticks),函数可以延迟相应的时钟节拍数。可是我发现OSTimeDly(INT16U ticks)函数一旦在任务中调用,任务就跑死了。

    由于木有OS基础,感觉每前进一步都很蛋疼。

    ……后来发现,在kinetis的移植文件里面有这样的一个函数。

    void  OS_CPU_SysTickInit (INT32U  cnts)
    {
        INT32U  prio;
    
    
        OS_CPU_CM3_NVIC_ST_RELOAD = cnts - 1u;
    
        /* Set SysTick handler prio.                              */
        prio  = OS_CPU_CM3_NVIC_SHPRI3;
        prio &= DEF_BIT_FIELD(24, 0);
        prio |= DEF_BIT_MASK(OS_CPU_CFG_SYSTICK_PRIO, 24);
    
        OS_CPU_CM3_NVIC_SHPRI3 = prio;
    
        /* Enable timer.                                          */
        OS_CPU_CM3_NVIC_ST_CTRL |= OS_CPU_CM3_NVIC_ST_CTRL_CLK_SRC |
                                   OS_CPU_CM3_NVIC_ST_CTRL_ENABLE;
        /* Enable timer interrupt.                                */
        OS_CPU_CM3_NVIC_ST_CTRL |= OS_CPU_CM3_NVIC_ST_CTRL_INTEN;
    }

    这个函数是初始化时钟节拍的(目前理解)

    故在任务中加入

    OS_CPU_SysTickInit(100000000/OS_TICKS_PER_SEC);

    OS_TICKS_PER_SEC是宏定义,即每秒进入中断次数。cnts即是我们想要得到的计数次数。

    OSTimeDlyHMSM()按照时、分、秒延迟。

    OSTimeDlyResume(INT8U prio)恢复被延迟的任务

    OSTimeGet(void)获取系统时间(进入中断次数)

    OTTimeSet(void)重设系统时间。

    关于任务调度,这是一个蛋疼点。

    貌似uc/os-II每次进入中断都会调度一次任务。同样时间延迟也会使uC/OS-II调度任务。

    OSRdyGrp变量(8位置)相应位0/1意味着OSRdyTbl[n]数组有任务就绪。

    就续表中存储相关任务的优先级。

    所以可以利用以下代码设置相应优先级为就绪状态

    OSRdyGrp |= OSMapTbl[prio>>3];                  //y行 相应位置1

    OSRdyTbl[prio>>3] |= OSMapTbl[prio&0x07];   //OSRdyTbl[y]相应元素置1

    其中,OSMapTbl[N] 元素值为(1<<n)

    同样如果在就绪表中删除任务

    OSRdyGrp &= ~OSMapTbl[prio&0x07]; 

    找出优先级最高任务

    y = OSUnMapTbl[OSRdyGrp];

    x = OSUnMapTbl[OSRdyTbl[y]];

    OSUnMapTbl[]为查询任务优先级表

  • 相关阅读:
    CodeForces 500C New Year Book Reading
    CodeForces 460B Little Dima and Equation 枚举
    CodeForces 451B Sort the Array
    【jquery】jQuery实现轮播图
    【IDEA】IDEA技巧记录
    【eclipse】日常使用eclipse记录
    【SSM】spring配置文件中读取配置文件的三种方式
    【Git】IDEA克隆和提交项目于码云
    semantic UI—表单验证
    【spring Data Jpa】JPA生成数据库表
  • 原文地址:https://www.cnblogs.com/hebaichuanyeah/p/3239728.html
Copyright © 2011-2022 走看看