zoukankan      html  css  js  c++  java
  • 第十六讲 任务优先级

     本讲就是利用上一讲的位图功能,用优先级对任务进行管理

    typedef struct _tTask {
        tTaskStack * stack;
        uint32_t delayTicks;
        uint32_t prio;        //task结构体中增加优先级
    }tTask;
    
    //首先需要在task创建中增加如下
    {
        task->prio = prio;
        
        taskTable[prio] = task; //这个表格是一个task结构体指针数组,利用这个表格调用task
        tBitmapSet(&taskPrioBitmap, prio); //在相应的位图中置1
    }
    //这个函数用来获取目前最高优先级的ready task
    tTask * tTaskHighestReady (void)
    {
        uint32_t highestPrio = tBitmapGetFirstSet(&taskPrioBitmap);
        return taskTable[highestPrio];
    }
    //在任务调度器中调用tTaskHighestReady 函数,如果current task不是最高优先级
    //就把next task置位最高优先级,然后切换
    void tTaskSched ()
    
    //在tTaskDelay中,需要把调用tBitmapClear(&taskPrioBitmap, currentTask->prio);
    //因为此时这个task已经不是ready 状态了,这个时候已经有了一些任务状态的概念了。
    tTaskDelay()
    
    //这个函数中,原本是用来扫描每个任务的delayTicks值,如果为0,那么就要调用
    //tBitmapSet,将相应位置1,重新ready了。
    void tTaskSystemTickHandler ()
  • 相关阅读:
    OnGUI 音频
    Java 8 的一些新特性
    获取文件编码格式
    js 常用 正则
    C#中这个算是什么
    数据的批量增加
    Ehcache的配置(自学,有问题请指出)
    Linux 下配置和使用java、Tomcat
    StringBuffer和StringBuildr的区别
    Oracle中复制一张表的结构,用sql语句复制一张表结构
  • 原文地址:https://www.cnblogs.com/nasduc/p/8505086.html
Copyright © 2011-2022 走看看