zoukankan      html  css  js  c++  java
  • SST-超级简单任务调度器结构分析

    SST(Super Simple Task) 是一个基于任务优先级、抢占式、事件驱动、RTC、单堆栈的超级简单任务调度器,它基于Rober Ward一篇论文的思想,Miro Samek用C重新编程实现的,它是QP中QK的的基本思想。

    QK加上状态机事件处理的方法QEP,再加上任务的注册与事件的保存与分发功能QF,再加上串口调试功能QSpy,再加上基于模型驱动的开发QM,就成了QP。

    2015年,QP获得“嵌入式计算设计”顶级发明奖【1】。

    1.SST层次结构

    b29d51e7a3a50701b8382071.jpg

    2.SST总体结构

    7063cdfc1db6ebd2fd037f7d.jpg

    • 发送事件(产生事件)

      SST_post(目标任务优先级prio,信号sig,参数para ),发送事件到prio任务对应事件队列,置1队列状态位。

    • 调度(消耗事件)

      SST_schedule_(void ),调度任务函数,队列空时,清0队列状态位。

    • 队列状态表置1

      SST_readySet_ |= tcb->mask_ 队列中放入事件时,对应位置1;

    • 队列状态表清0

      SST_readySet_ &= ~tcb->mask_ 队列中无事件时,对应位清0.

    3.SST TCB结构

    8bd6dc3336faf96cac4b5f74.jpg

    4.发送事件SST_post()流程图

    641fd8c4bd59a9e438db4940.jpg

    5.调度SST_schedule()流程图

    329cae640a2250dff6365469

    6.头文件关系

    ff0bdfb46980065c8ad4b26a

    7.进入中断宏、,退出中断宏、及中断中的使用

    • 中断的进入宏
    #define SST_ISR_ENTRY(pin_, isrPrio_) do { 
      (pin_) = SST_currPrio_;       /*1.保存被中断的任务优先级(当前优先级)到pin中*/
      SST_currPrio_ = (isrPrio_);   /*2.设置ISR的优先级isrPrio为当前优先级*/
      SST_INT_UNLOCK();             /*3.开中断*/
    } while (0)
    
    • 中断的退出宏
    #define SST_ISR_EXIT(pin_, EOI_command_) do { 
      SST_INT_LOCK();           /*1.关中断*/
      (EOI_command_);           /*2.结束当前中断*/
      SST_currPrio_ = (pin_);   /*3.恢复被中断前任务优先级为当前任务*/
      SST_schedule_();          /*4.调度*/
    } while (0)
    
    • 中断中使用宏例子
    //键盘中断ISR 
    static void interrupt kbdISR(){
        uint8_t pin;
        uint8_t key = inport(0x60); //取键值
        displayPreemptions(SST_currPrio_, KBD_ISR_PRIO); //测试用,显示被抢占次数 
        SST_ISR_ENTRY(pin, KBD_ISR_PRIO);        /*1.进入中断*/
        SST_post(KBD_TASK_PRIO, KBD_SIG, key);   /*2.发事件到KbdTask任务*/
        SST_ISR_EXIT(pin, outportb(0x20, 0x20)); /*3.退出中断*
    }
    

    结束语

    如果把Rober Ward的论文比喻成一粒不起眼的种子,Miro Samek的SST就是一个小树苗,而Miro Samek的QP则长成了参天大树,这棵树已经成长了十年,2015年,QP获得“嵌入式计算设计”顶级发明奖【1】。

    参考:
    【1】QP获得“嵌入式计算设计”2015年顶级发明奖

  • 相关阅读:
    iOS多线程开发小demo5 线程间的通信
    iOS多线程开发小demo4,线程的同步问题
    iOS多线程开发小demo3,线程的状态
    iOS多线程开发小demo2,NSThread篇
    iOS多线程开发小demo
    iOS开发多线程基础知识
    sublime text 3 3083 注册码
    Canvas现实画板功能
    CSS3动画进度条
    移动端使用HTML5表单增强体验
  • 原文地址:https://www.cnblogs.com/hyper99/p/SSTchao-ji-jian-dan-ren-wu-diao-du-fang-fa.html
Copyright © 2011-2022 走看看