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

最新文章

  1. webstorm下载&&安装过程&&打开项目
  2. Angular内置指令(二)
  3. Jquery EasyUI的datagrid页脚footer使用及数据统计
  4. as3+java+mysql(mybatis) 数据自动工具(一)
  5. JavaScript--循环--打印星星和99乘法表
  6. intel安装mac os
  7. iOS获取手机当前的网络状态
  8. Oracle左连接、右连接示例
  9. JavaScript中数组类型的属性和方法
  10. Oracle update 执行更新操作后的数据恢复
  11. Mysql创建、删除用户、用户管理等相关:转载http://www.cnblogs.com/fly1988happy/archive/2011/12/15/2288554.html
  12. vue 组件传值
  13. Shell命令-系统信息及显示之stat、du
  14. [HackerRank]New Year Chaos[UNDONE]
  15. moogodb 安装及简单介绍
  16. Java NIO中的Buffer 详解
  17. Swift真机调试时报错dyld: Library not loaded: @rpath/libswiftCore.dylib
  18. python---ORM之SQLAlchemy(1)
  19. IntelliJ IDEA中文乱码问题
  20. jQuery outerHeight() 方法

热门文章

  1. Java API 常用 详解
  2. GPDB 5.x PSQL Quick Reference
  3. Python学习---线程基础学习
  4. 图的存储结构(邻接矩阵与邻接表)及其C++实现
  5. a标签在实际工作中的应用
  6. css笔记 2
  7. 文本处理三剑客之 Sed ——一般编辑命令
  8. 通过CXF,开发soap协议接口
  9. js中公有方法、特权方法、静态方法
  10. 牛客网多校训练第一场 F - Sum of Maximum(容斥原理 + 拉格朗日插值法)