QNX手册学习笔记————中断机制
来源:互联网 发布:蓝月翅膀升级数据 编辑:程序博客网 时间:2024/05/21 10:52
继续学习QNX_Neutrino_RTOS_Archituecture的interrupt部分。
刚开始学习就遇到了ISR的概念和Interrupt handler 概念的区别问题。查阅维基百科,ISR与Interrupt handler是同一个概念,都是由interrupt引发的callback函数。类似于C#中的event,当我们敲击键盘或移动鼠标时,会产生一个事件,而该事件可以被多个中断监听,从而执行各个callback的回调操作。在linux等操作系统中,优先级的执行分为第一优先级ISR和第二优先级ISR。第一优先级,即interrupt service routine;当它执行时,通常会屏蔽中断,直至执行结束,因此会引起jitter(我的理解是,每个实时任务的执行时间可能长也可能短)。为了减小jitter,应该尽量减少ISR的执行时间;如果有更加复杂的任务,应该放到第二优先级ISR中去执行。第一优先级的执行,包括处理器的context切换等。第二优先级ISR通常指的是process或thread,执行较为复杂的任务,时间限制没有规定得那么死。
例如通过串口发送数据时,每次中断都发送一个数据,都不会产生Tsl。仅当发送缓存快为空时,会引发sigEvent事件产生线程或进程的切换,让新的线程对发送缓存进行装载。
event handler可以被更高优先级的硬中断而中断。但是具体的thread中的task的执行,需要各个中断的event handler执行完毕后,统一调度执行。如下图所示。 QNX手册中详细阐述了两个接口InterruptAttach,和InterruptEventAttach两个常用的接口。通过他们来绑定eventhandler。值得注意的是,一个中断可以绑定多个event handler。
文中给了一个InterruptAttach的例子。该例子是一个循环定时器中断引起eventhandler对thread中的计数器轮询增加的例子。该例子可以看出,event handler 是包含在线程中的;event handler 可以运用和更改thread中的资源变量,并作为条件进行判断;当handler中满足某个条件时,可以向内核返回event,从而引起不同有限级线程之间的切换。为了更好地实现实时效果,应该尽量减少event handler中的程序执行的时间,而将复杂的程序放在线程中处理,这与维基百科中的说法是一致的。即减少硬中断执行的时间,增加软中断的执行时间。
InterruptEventAttach 是一个有限选择的方法,因为使用该方法,在event handler中不能执行用户自己写的代码,从而避免了浪费时间,从而降低实时性。该方法直接将event送给相应的线程执行。
另外,还有内存映射放在线程中而不是放在内核中;最长中断时间可以计算;除中断实现线程导切外,还可通过event hook相关的线程和进程的方式。例如当没有其他认为执行时,系统会通过传递event的方式,执行最低优先级的空闲线程(idle task)。将低功耗线程hook到该event,可以实现低功耗。
阅读全文
0 0
- QNX手册学习笔记————中断机制
- QNX手册学习笔记————IPC(2)
- QNX手册学习笔记——IPC(3)
- QNX手册学习笔记——IPC(4)
- QNX手册学习笔记——Dynamic Linking
- QNX驱动开发—中断处理,中断响应机制
- QNX手册学习————IPC(1)
- QNX学习笔记——IPC(5)
- QNX驱动开发——中断处理
- QNX驱动开发——中断处理
- QNX学习——QNX的初步探索以及开发环境的搭建
- [linux中断]——软中断机制
- Linux内核学习笔记五——中断推后处理机制
- Linux内核学习笔记五——中断推后处理机制
- Linux内核学习笔记五——中断推后处理机制
- Linux内核学习笔记五——中断推后处理机制
- QNX手册学习笔记------同优先级调度算法
- ZYNQ QNX开发——在ZedBoard上运行QNX
- FatMouse and Cheese(记忆化搜索)
- linux 如何清理僵尸进程
- minimum-depth-of-binary-tree
- 通知栏通知,及点击跳转(广播实现)
- 《算法导论》第四章-思考题(参考答案)
- QNX手册学习笔记————中断机制
- TensorFlow手写汉字识别
- python numpy
- http协议几种数据传输方式
- JavaScript HTML DOM 事件机制,常用方法
- R
- 从高版本JDK换成低版本JDK报错Unsupported major.minor version 52.0
- QNX手册学习笔记------同优先级调度算法
- 《Deep Learnning Tutorial》笔记(一)