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

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

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

1.SST层次结构

2.SST总体结构

  • 发送事件(产生事件)

    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结构

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

5.调度SST_schedule()流程图

6.头文件关系

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年顶级发明奖

SST-超级简单任务调度器结构分析的更多相关文章

  1. TaskScheduler一个.NET版任务调度器

    TaskScheduler是一个.net版的任务调度器.概念少,简单易用. 支持SimpleTrigger触发器,指定固定时间间隔和执行次数: 支持CronTrigger触发器,用强大的Cron表达式 ...

  2. springMVC + quartz实现定时器(任务调度器)

    首先我们要知道任务调度器(定时器)有几种,这边我会写三种 第一种是基于JDK的本身的一个定时器(优点:简单,缺点:满足不了复杂的需求) package com.timer1; import java. ...

  3. Windows:任务调度器

    Windows 服务器系列: Windows:查看IP地址,IP地址对应的机器名,占用的端口,以及占用该端口的应用程 Windows:使用Dos命令管理服务(Services) Windows:任务调 ...

  4. spring任务执行器与任务调度器(TaskExecutor And TaskScheduler)

    对于多线程及周期性调度相关的操作,spring框架提供了TaskExecutor和TaskScheduler接口为异步执行和任务调度.并提供了相关实现类给开发者使用.(只记录采用注解的使用形式,对于X ...

  5. 记录对定时任务调度器的小小改进 - API调度计划

    之前记录过一篇 [开源一个定时任务调度器 webscheduler],这是一个看似简单的小工具,昨天部署到服务器上开始试用下,听听反馈. 项目经理看过后,立马反馈说这个使用 Cron表达式 的计划太难 ...

  6. 企业级任务调度框架Quartz(6) 任务调度器(Scheduler)

    前序:      我们已经在前面的内容能里看到了,我们用 Scheduler 来管理我们的 Job:创建并关联触发器以使 Job 能被触发执行:以及如可选择 calendar 为给定的时程安排提供更多 ...

  7. 2. SOFAJRaft源码分析—JRaft的定时任务调度器是怎么做的?

    看完这个实现之后,感觉还是要多看源码,多研究.其实JRaft的定时任务调度器是基于Netty的时间轮来做的,如果没有看过Netty的源码,很可能并不知道时间轮算法,也就很难想到要去使用这么优秀的定时调 ...

  8. 超级文件搜索器(SuperSearch)

    写了个工具,各个分享渠道上传太难了,在这里分享给大家吧! 中文名称:超级文件搜索器 英文名称:  SuperSearch 适用对象:硬盘里文件达到数万至数千万级的用户 运行环境:WindowXP,Wi ...

  9. JS基础(超级简单)

    1     JS基础(超级简单) 1.1 数据类型 1.1.1   基本类型: 1)        Number:特别注意:NaN的检测方法:Nan!=NaN;或者使用isNaN方法 2)       ...

随机推荐

  1. Win7系统托盘解决出现CH图标的方法

    中文环境下,使用的英文键盘应该是“中文(简体)-美式键盘",这个输入法虽然是用来打英文的,但是归到中文类的,对应就是CH 如果因为某些不知明原因,增加了"美式键盘"等其他 ...

  2. 使用burpsuite对移动app抓包分析

    测试移动APP的联网请求,需要获取路径或者参数的时候,使用该工具burpsuite非常方便! 要求: 移动终端和PC处于同一个wlan环境下 第一步:获取本地地址,cmd-->ipconfig  ...

  3. 百度地图隐藏LOGO显示

    在引入地图的页面加入下列样式即可隐藏百度地图左下角的LOGO   <style type="text/css">   .anchorBL{display:none;} ...

  4. Spring 的下载、安装和使用

    一.下载 Spring 下载地址:http://repo.spring.io/libs-release-local/org/springframework/spring/4.0.6.RELEASE/  ...

  5. java中的泛型1

    1.泛型概述 泛型,即“参数化类型”.一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参.那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数 ...

  6. hdu1579 Function Run Fun(深搜+记忆化)

    版权声明:本文为博主原创文章.未经博主同意不得转载.vasttian https://blog.csdn.net/u012860063/article/details/37076755 转载请注明出处 ...

  7. Linux关于scp命令

    声明:本文主要转自https://www.2cto.com/os/201503/379474.html scp主要应用场景如下: (1)必要时,每个季度或者每月将数据由这台服务器传输到另外一台,不过前 ...

  8. C#string byte[] base64位互相转换

    byte表示字节,byte[]则表示存放一系列字节的数组 1个字符=2个字节(byte) 1个字节=8个比特(bit) 网速上所说的1M其实是指1兆的小b,1M= 1024b/8 = 128kb 下面 ...

  9. EF Core中Key属性相同的实体只能被跟踪(track)一次

    在EF Core的DbContext中,我们可以通过DbContext或DbSet的Attach方法,来让DbContext上下文来跟踪(track)一个实体对象,假设现在我们有User实体对象,其U ...

  10. Canvas制作的下雨动画

    简介 在codepen上看到一个Canvas做的下雨效果动画,感觉蛮有意思的.就研究了下,这里来分享下,实现技巧.效果可以见下面的链接. 霓虹雨: http://codepen.io/natewile ...