QK对中断的特殊处理
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对中断的特殊处理的更多相关文章
- angular2系列教程(九)Jsonp、URLSearchParams、中断选择数据流
大家好,今天我们要讲的是http模块的第二部分,主要学习ng2中Jsonp.URLSearchParams.observable中断选择数据流的用法. 例子
- myrocks复制中断问题排查
背景 mysql可以支持多种不同的存储引擎,innodb由于其高效的读写性能,并且支持事务特性,使得它成为mysql存储引擎的代名词,使用非常广泛.随着SSD逐渐普及,硬件存储成本越来越高,面向写优化 ...
- GDB 多线程调试:只停止断点的线程,其他线程任然执行; 或只运行某些线程 其他线程中断
多线程调试之痛 调试器(如VS2008和老版GDB)往往只支持all-stop模式,调试多线程程序时,如果某个线程断在一个断点上,你的调试器会让整个程序freeze,直到你continue这个线程,程 ...
- UWP开发之Mvvmlight实践五:SuspensionManager中断挂起以及复原处理
最近比较忙有一段时间没有更新了,再接再厉继续分享. 案例下载:https://github.com/NewBLife/UWP/tree/master/SuspendSample 先我们看看App在生命 ...
- exynos4412中断编程
中断概述 我们知道,ARM核能处理的异常有7种,但仅仅区分异常的种类显然不能够满足需求.拿手机来说,触摸屏幕和按下音量键可能都是irq异常,但是ARM并不能将他们区分开,而事实的情况是针对这两种中断, ...
- [No00009F]CMD在执行命令时的中断快捷键
有两种: Ctrl+C:完全中断.类似于C语言在while循环中的Break: Ctrl+Break(Pause键):单步中断.类似于C语言在while循环中的Continue:
- CPU中断和轮询
轮询顾名思义,CPU不停的询问,CPU很忙. 中断和轮询不同,是硬件上的,就像一个开关被按下了,没有什么东西在不停的询问开关有没有被按下,开关只是被按下了,就通电了,通电了就会发声一些事情. 可以看看 ...
- [原创]用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题
用windows7连接windows2003的终端服务器时,出现"由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的问题,原因是终端服务器授权方式设置为了"每 ...
- Linux mips64r2 PCI中断路由机制分析
Linux mips64r2 PCI中断路由机制分析 本文主要分析mips64r2 PCI设备中断路由原理和irq号分配实现方法,并尝试回答如下问题: PCI设备驱动中断注册(request_irq) ...
随机推荐
- 十个免费的 Web 压力测试工具
本文列举了是十个免费工具,可以用来进行Web的负载/压力测试的.这样你就可以知道你的服务器以及你的WEB应用能够扛得住多少的并发量,以及网站性能. 0. Grinder – Grinder是一个开源 ...
- 安装skype for business server组件 报错“未满足先决条件”和安装KB2982006补丁提示“此更新不适用于你的计算机”
安装skype for business server组件 报错“未满足先决条件” 上网经查询发现是没有安装KB2982006-x64 更新补丁 去官网上找这个补丁,发现这个补丁要热更新啥的,还要写邮 ...
- 修改mysql允许主机访问的权限
开启mysql的远程访问权限 默认mysql的用户是没有远程访问的权限的,因此当程序跟数据库不在同一台服务器上时,我们需要开启mysql的远程访问权限. 主流的有两种方法,改表法和授权法. 相对而言, ...
- 解决yii2.0里url重写引用js路径问题(@web/的用法)
在实际项目中,为了seo优化,使用了伪静态,开启了url重写
- RabbitMQ的事件总线
RabbitMQ的事件总线 在上文中,我们讨论了事件处理器中对象生命周期的问题,在进入新的讨论之前,首先让我们总结一下,我们已经实现了哪些内容.下面的类图描述了我们已经实现的组件及其之间的关系,貌似系 ...
- 使用react-redux开发的简单步骤
一.安装相关包 npm install redux react-redux --save 二.根据具体情形创建模块文件 Store.js.Reducer.js.Actions.js Store.js的 ...
- BIND简易教程(3):DNSSec配置
目录:BIND简易教程(1):安装及基本配置BIND简易教程(2):BIND视图配置BIND简易教程(3):DNSSec配置 (本篇) DNSSec,有个半英半中的名字叫DNS安全扩展.说的好听一点, ...
- CF1063A Oh Those Palindromes
嘟嘟嘟 只要将每一种字母放一块输出就行了. 证明1:比如 1 2 3 4 5 6,那么这个序列对答案的贡献分别是1和5,2和4 ,3和6……如果重新排列成x x x x o o,会发现对 ...
- 处理java多线程时线程安全问题 - ThreadLocal和Synchronized
多线程在自动化测试中用的不多,也就是说我们用单线程可以完成大部分的自动化测试脚本. 主要有两个原因,首先是因为自动化测试首要考虑的是脚本的稳定性,所以一般会牺牲效率以保证脚本稳定,其次是由于局限于我们 ...
- mac使用brew安装配置常见测试工具
Homebrew 包管理工具可以让你安装和更新程序变得更方便,目前在 OS X 系统中最受欢迎的包管理工具是 Homebrew. 安装 在安装 Homebrew 之前,需要将 Xcode Comman ...