1.QK的特性

  • QK(Quntum Kernel)是一个抢占式、基于优先级实时微内核、一个多任务调度器;
  • QK不同于传统的RTOS,是非阻塞的,并且只用了一个stack;
  • 对QK中的任务来说,采用了IOC(好莱坞原则)方式(是callback的),而不同于传统RTOS中任务的多线程或进程中的等待;
  • 传统RTOS只有中断后,才可能会有任务切换,而QK不只是中断后,在post一个事件后,也可能会使任务切换;
  • QK对事件的处理是RTC的;
  • .......

2.QK抢占方式

QK有同步抢占(post event时)和异步抢占(中断时)两种方式。而传统RTOS不分抢占的方式,只能归为异步抢占吧。
在post一个事件到高优先级任务时,会调用QK_scheduler, 找到当前最高的优先级任务来执行,这是同步抢占;而异步抢占发生在中断中,也会调用QK_scheduler

不管是什么抢占,在返回前都要检查是不是有更高级的任务要执行--处理事件。

3.QK的中断处理 (伪代码)

static void interrupt ISR( ) {
uint8_t pin; //用于暂存被中断任务的优先级
QK_ISR_ENTRY(pin, ISR_PRIO); //QK的特殊中断进入处理,执行下面的3个动作:
(1)保存当前优先级(被中断任务的优先级)到pin中;
(2)设置当前优先级为ISR_PRIO;
(3)开中断 Do interrupt processingthat might include QF calls.//传统中断服务处理,其中可以调QF函数。 QK_ISR_EXIT(pin); //QK的特殊中断退出,执行下面4个动作:
(1)关中断
(2)写结束EOI(End Of Interrupt) 到中断控制器. 如8259。相当于中断结束了,可以响应其它中断了。
(3)恢复当前优先级为pin
(4)调用QK_scheduler ; //*!异步抢占可能在这里会发生。
}//*!这里是中断的真正返回。上边的EOI只是表示本次中断结束,但并没返回。

!!!这里的关键是对EOI的理解,当写EOI时,表示当前中断已经结束,可以响应所有的中断,包括同级与低级。虽然当前中断已经结束,但并没有马上中断返回,在返回前会调用QK_scheculer, 如有更高任务,就执行,执行完才可能返回。

这种处理是可以多层嵌套的,所有的过程只用了一个stack。

其思想源于SST(Super Simple Task)。

QK对中断的特殊处理的更多相关文章

  1. angular2系列教程(九)Jsonp、URLSearchParams、中断选择数据流

    大家好,今天我们要讲的是http模块的第二部分,主要学习ng2中Jsonp.URLSearchParams.observable中断选择数据流的用法. 例子

  2. myrocks复制中断问题排查

    背景 mysql可以支持多种不同的存储引擎,innodb由于其高效的读写性能,并且支持事务特性,使得它成为mysql存储引擎的代名词,使用非常广泛.随着SSD逐渐普及,硬件存储成本越来越高,面向写优化 ...

  3. GDB 多线程调试:只停止断点的线程,其他线程任然执行; 或只运行某些线程 其他线程中断

    多线程调试之痛 调试器(如VS2008和老版GDB)往往只支持all-stop模式,调试多线程程序时,如果某个线程断在一个断点上,你的调试器会让整个程序freeze,直到你continue这个线程,程 ...

  4. UWP开发之Mvvmlight实践五:SuspensionManager中断挂起以及复原处理

    最近比较忙有一段时间没有更新了,再接再厉继续分享. 案例下载:https://github.com/NewBLife/UWP/tree/master/SuspendSample 先我们看看App在生命 ...

  5. exynos4412中断编程

    中断概述 我们知道,ARM核能处理的异常有7种,但仅仅区分异常的种类显然不能够满足需求.拿手机来说,触摸屏幕和按下音量键可能都是irq异常,但是ARM并不能将他们区分开,而事实的情况是针对这两种中断, ...

  6. [No00009F]CMD在执行命令时的中断快捷键

    有两种: Ctrl+C:完全中断.类似于C语言在while循环中的Break: Ctrl+Break(Pause键):单步中断.类似于C语言在while循环中的Continue:

  7. CPU中断和轮询

    轮询顾名思义,CPU不停的询问,CPU很忙. 中断和轮询不同,是硬件上的,就像一个开关被按下了,没有什么东西在不停的询问开关有没有被按下,开关只是被按下了,就通电了,通电了就会发声一些事情. 可以看看 ...

  8. [原创]用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题

    用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题,原因是终端服务器授权方式设置为了"每 ...

  9. Linux mips64r2 PCI中断路由机制分析

    Linux mips64r2 PCI中断路由机制分析 本文主要分析mips64r2 PCI设备中断路由原理和irq号分配实现方法,并尝试回答如下问题: PCI设备驱动中断注册(request_irq) ...

随机推荐

  1. Wpf 系列

    http://www.cnblogs.com/chillsrc/category/684419.html

  2. c# 的传递参数值传递与传递引用的区别,ref与out区别

    值传递 C#默认都是值传递的,就是复制变量的一个副本传递给方法,所以在退出方法后,对变量的修改无效. 但是要注意,当传递是引用类型时,因为引用类型是一个引用的地址,所以修改引用地址指向的对象时,一样会 ...

  3. cmd:相关命令和笔记

    (1)查看git版本:git --version (2)

  4. Sql去重一些技巧

    下午的时候遇到点问题,Sql去重,简单的去重可以用 DISTINCT 关键字去重,不过,很多情况下用这个解决不了问题.重复的数据千变万化,例如:类似于qq.微信的最近联系人功能,读取这些数据肯定要和消 ...

  5. tomcat 8 startup.bat启动乱码问题

    修改Tomcat bin目录下startup.bat文件 将call "%EXECUTABLE%" start %CMD_LINE_ARGS%  改为 call "%EX ...

  6. 百度地图label样式修正

    现象:百度地图 label 宽度为0,文字在标签边框外. 原因:样式冲突,在css中添加下列代码即可: .BMapLabel{ max-width:none; }

  7. Apache 在不同平台和版本上的默认文件布局

    https://wiki.apache.org/httpd/DistrosDefaultLayout This guide lists the default installation layouts ...

  8. UVa 1658 - Admiral(最小费用最大流 + 拆点)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  9. 「SLYZ Online Judge#74 Be」

    只有学校里的电脑才能看的题目 昊哥从牛客搬的,懒得找原题了 题意就是多组询问,每次询问一条树上路径,将这条路径上的点拿下来做\(0/1\)背包,求使得点权和为\(K\)的倍数的方案有几种 \(n< ...

  10. SQL 查询函数

    1.abs函数取值(绝对值) select ABS(-20) 结果是20 2.ceiling函数取大于等于指定表达式的最小整数 select CEILING(40.5) 结果是41 3.floor函数 ...