搜索
bottom↓
回复: 4

djyos的中断实时性

[复制链接]

出0入0汤圆

发表于 2012-8-8 17:52:02 | 显示全部楼层 |阅读模式

djyos的中断实时性
使用RTOS的场合,大多都对实时性有要求,甚至有些要求极端高的实时性。一般来说,设计者会把实时性要求很高的部分功能,用中断来实现,从这个意义上,对于RTOS来说,最坏情况下的中断响应延迟,几乎就是该系统的实时性指标。现有操作系统,或多或少的会带来额外的、不确定的中断延时,使许多实时性要求很高的应用,要么不使用操作系统,要么需要增加额外的硬件来处理实时任务。djyos在最坏情况下,提供近乎裸跑的中断延迟,实现无以伦比的实时性,使得一些原来只能裸跑的应用,也可以使用操作系统。
由于中断实时性在RTOS中极端重要,本文以中断为重点,谈谈实时性。
1.        理解中断
代码,是现实问题的一个抽象,同样,设计中断系统,就要先弄清楚“什么是中断,该如何抽象”这个问题。
中断,从形式上看,是一个异步到达的(通知)事件,异步是什么意思呢?异步是相对于主程序的,即主程序不知道什么时候会来中断,也不知道中断达到时,自己运行到什么地方、处于什么状态。中断从形式上,并没有告诉我们,它是否需要处理,更没有说是否需要紧急处理。因此,把中断都看做要“需要紧急处理的事件”,是没有依据的。
由于cpu是串行执行指令的,如果靠cpu执行指令的方式查询获得事件,比如查询IO口获得上升沿事件。从事件发生到cpu查询到的延迟时间,必然跟cpu的查询周期相关,除非你的系统只有“查询并处理中断”这一件任务,否则很难做到很短。因此,紧急事件只能通过中断来获取。
所以,中断可以用三句话来概括:
1、        中断是异步事件。
2、        中断不一定是紧急事件。
3、        紧急事件必须用中断来通知。
了解了中断的三个特性,我们就知道,并不是所有中断,都需要极速响应的,事实上,绝大多数情况下,只有极少量的中断需要很高实时性的。
凡是中断就要求极速响应吗?
答案显然是否定的。许多操作系统对中断的处理,是一视同仁的,而且都把中断看成是一个需要紧急处理的事件,这显然是一个自以为是的想法,根本不知道用户需要什么,也没有理解什么是“中断”。
在操作系统支持下,需要接近裸跑的中断延迟吗?
答案显然是肯定的,但是,人们对此似乎很宽容。为什么会宽容呢?当没有汽车时,人们能够容忍马车的速度;没有火车时,人们容忍汽车的速度;没有飞机时,人们容忍火车的速度。当所有操作系统都做不到近乎裸奔的中断延迟时,人们便容忍OS给中断响应带来额外延迟。
为什么要为一些不紧急的事件(例如键盘)分配中断号呢?
设计者经常为键盘分配中断号,对于台式PC来说,键盘也许勉强算紧急事件,因为PC中有很多慢速操作;但对于使用RTOS的嵌入式控制系统来说,却并非紧急事件。为什么呢?因为键盘是人手通过机械按钮实现的,操作系统的反映,只要比人的动作快就可以了,响应太快了,反而可能导致误触发,失去按键防抖功能。那为什么不少人会把按键挂在中断线上,使用中断来响应按键操作呢?答案是,一可以简化软件设计,不需要单独启动一个键盘扫描线程;二可以减轻cpu负担,不用定期扫描键盘;三是低功耗系统特有的,可以用键盘中断来唤醒休眠的cpu。
2.        设计中断系统
理解了中断,我们就可以着手设计中断系统了。
1、        能够为异步事件提供服务,既然是事件,就应该提供普通事件一样的操作系统服务,使其编码更加容易。
2、        为实时中断提供裸跑的中断延迟,即使在最坏情况下,也不能例外。
3、        用户用中断处理异步事件,是希望简化系统设计,因此,不能因为异步事件而使调度系统更加复杂。
传统操作系统,因为没有弄清楚这些问题,企图对所有中断极速响应,又企图给中断响应函数以尽可能多的服务,而两者,却是矛盾的,更多的服务,必然需要更多的关中断,导致中断延迟加长。最终的结果是:
1、        异步事件得不到操作系统的充分支持,对编写ISR程序有诸多限制。
2、        真正实时性要求很高的中断,又做不到很快响应。
3、        调度器保护临界资源时,分为关调度和关中断两级,使系统更加复杂,完全违背了用户的用中断响应异步事件以简化软件的目的。

Djyos的中断系统,可以用这张图来表示:

一般cpu的中断控制器,都有许多中断输入线,每个中断线对应一个中断号,由一个独立的开关控制。
每个中断线,都允许独立设置为实时中断还是异步信号,该开关可能是硬件开关,也可能是软件开关,依赖于具体硬件以及移植者的选择。
异步信号有一个独立的总使能开关,也就意味着,异步信号是可以整体关断的。
实时中断没有独立的使能开关,意味着,实时中断是不允许集体关断的。
异步信号和实时中断有一个公共的总使能开关,意味着,允许用户关闭所有中断。
Djyos中,“异步信号使能开关”同时又是关调度开关,djyos没有独立的调度开关,使得djyos的临界区保护代码更加简洁,和用户希望通过“用中断实现异步信号”来简化软件设计的目的,是相适应的。简洁的调度器,也是djyos更加可靠。由于关异步信号和关中断等同,使得异步信号处理函数可以使用操作系统提供的全部服务,更加方便易用。
操作系统运行过程中,总中断使能开关时从来不会被关闭的,所以,djyos的实时中断,达到裸跑的速度,这是架构决定的,跟中断响应的代码是否精简无关。
虽然知道中断实时性对RTOS极其重要,但许多RTOS,由于不能对中断做正确的抽象,不能从架构角度提高实时性,往往爱使用一些很复杂的技巧来提高性能。但过多的技巧,实现高性能的同时,可能带来不稳定因素。殊不知,对于实时控制系统来说,稳定性可靠性才是核心。而且,即使再巧妙的技巧,都不能对实时性的提高,带来质的变化。
3.        Djyos中断系统的特点
1、        实时中断具有裸跑的实时性,使得有些原本不能使用操作系统的应用,可以享受操作系统的服务。
2、        编写异步信号编程更加方便,像普通事件一样,允许使用所有操作系统服务。
3、        系统更加简洁可靠,与用户“用中断实现异步信号以简化软件”的目标相一致。


阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2012-8-9 10:09:53 | 显示全部楼层
沙发。

顶一个!

出0入0汤圆

发表于 2012-8-9 10:15:11 | 显示全部楼层
请教楼主485通讯,125K波特率,10个数据一帧,每5ms发一帧 ,算不算对实时性要求很高?

出0入0汤圆

 楼主| 发表于 2012-8-9 10:46:44 | 显示全部楼层
yulutong 发表于 2012-8-9 10:15
请教楼主485通讯,125K波特率,10个数据一帧,每5ms发一帧 ,算不算对实时性要求很高? ...

得看你的cpu速度而定,如果达到cortes-M0级别的话,就不算高。
有一个用户,2.5Mbaud,每3毫秒发一包数据,每包60个字节,在M0上。

出0入0汤圆

发表于 2012-8-9 13:04:10 | 显示全部楼层
我定义一个,我的老家是都江堰的!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 19:49

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表