QK对中断的特殊处理
2015-12-01 20:06
232 查看
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)。
相关文章推荐
- select unit_timestamp(); 和select unit_timestamp("1970-1-1 08:00:00")和 select from_unixtime(1)
- 搭建SVN仓库
- ajxs非异步调用验证
- [转载]深入理解C语言函数指针
- 配置pcl的时候,boost库找不到/usr/lib/x86_64-linux-gnu/
- 科技论文格式
- iOS:Masonry 英文原档介绍
- Xamarin.Android 实现虾米音乐搜索下载
- matlab-图片-imrect使用
- MySQL_CRUD基础语句
- Docker中级学习-Docker Registry
- 日期计算器的实现
- .NET编码解码(HtmlEncode与HtmlEncode)
- 算法—二叉查找树的相关一些操作及总结
- CentOS 5.x 多个ISO文件 安装方法(VMware)
- LeetCode 19 : Remove Nth Node From End of List (Java)
- Tomcat启动报Unsupported major.minor version 51.0
- [Cocos2d-x/iOS源码]<诸神的挑战>三消新玩法
- 千亿VR市场 将被国内厂商玩坏多少?
- 抽象类和接口