新闻中心

EEPW首页 > 牛人业话 > 频繁中断狂轰乱炸,操作系统很难招架

频繁中断狂轰乱炸,操作系统很难招架

作者:光华居士时间:2018-12-25来源:电子产品世界收藏

3

本文引用地址:http://www.eepw.com.cn/article/201812/396004.htm

春困秋乏夏打盹,睡不醒的冬三月。洒家一面克制着午饭后不断袭来的阵阵睡意,一面添加着接收程序,不过是从裸机下挪到操作系统的框架下,应该问题不大。笔者复制、粘贴、修改,一顿操作猛如虎,扫视一番信心鼓,便开始志得意满地调试起来。

按了一下器,嗯?仿真器怎么好像和电脑断开连接了?哎,天杀的windows!肯定是windows恰好把仿真器的驱动程序给搞死了。笔者重新把仿真器插拔了一番,继续下载程序、运行、调试。按下器,嗯?没反应,把程序停下来,嗯?停不下来!不死心地重启了电脑,重新来过,原来,确乎是一按遥控器就貌似死了机了。

一丝阴影从洒家心头掠过,盘旋在脑中的困意也一瞬间消失的无影无踪。不消说,碰上事了!

夏天,最是一个容易上火焦躁的时节,在烈日的威逼下,干渴的大地冒着腾腾的热气,不住地无声喘息。白杨树兀自矗立在似火的骄阳里,慢慢扇动着被晒得快要冒烟的绿叶,显出一副无精打采的样子。知了不停地求饶,可是炽热的太阳全然不听它的祷告。鸟儿忍受着饥肠辘辘,也不愿意出来觅食。顶着日头匆匆赶路的俊男靓女们,挥汗如雨,被汗水一遍遍刷过的脸上早已没有了香水的气息。

时间不多了,快要提交样机了,却碰上这等大问题,尽管身处空调房,洒家依然心中发凉,倍感不爽。

4

洒家揉了揉已然刻上了几条皱纹的额头,站起身,茫然环顾,有的同事正在热火朝天地打游戏,有的同事看着小说,有的同事叉着腰、扎煞着胳膊,唠着闲嗑,看我站起身来,随即送来带着笑意的目光。哎,多么和谐的场景啊!

佛家有谓,因果不欺,自作自受,白话就是,谁的福谁享,谁的罪谁受。他们玩他们的,洒家干洒家的! 

那么,好端端的,程序怎么就死了机呢?看调试器的反应,倒像是跑不动了一样,既如此,统计一下系统负载率吧,ucos正好提供了这项功能。

果不其然,一按遥控器,系统负载率就蹭蹭蹭地摸高到了100%,屡试不爽,本来系统负载率在百分之二三十之间,只要按下遥控,系统立马死给你看。

笔者工作多年,身经百战,掰着脚趾头掐指一算,肯定是遥控接收中断太频繁了,导致ucos把大量的时间用在系统调度上,以至于根本就没有了空闲时间,为何如此,且听洒家娓娓道来。

系统被ucos划分成多个任务,这些任务平时处于“等待”某些信号的状态,信号一来,便进入“就绪”状态,倘若没有更高优先级的任务,处于就绪态的任务就得到了MCU的计算资源,进入任务执行程序,执行完后,便再次回到等待状态。倘若来了中断,ucos便中断当前任务,存储系统上下文、任务上下文,执行中断服务程序,然后判断是否存在被中断服务程序推入就绪态、优先级高于被中断任务的任务,如果有,进入新任务,如果没有,恢复被中断任务的上下文继续执行。

ucos本来在系统的各个任务之间调度得好好的,偶尔来了个中断,就存一下任务上下文,执行以下上文所述的操作,只要中断次数有限,系统还是可以正常稳定运行的。可是,一旦中断非常频繁,以至于中断时间间隔和ucos存储任务上下文、执行中断服务程序、恢复任务上下文的时间很接近的话,显然,ucos就基本上干不了有用的事情了,它会把几乎所有时间消耗在存储、恢复任务上下文这些“辅助性”的操作上。

遥控报文是一连串射频信号,每个上升沿都会触发中断,对于ucos和所选用MCU的主频来说,遥控报文的频繁中断简直就是狂轰乱炸,搞得操作系统很难招架。

5

行文至此,脑力敏捷的读者可能会抢答说,既然如此,那就不用ucos了,解决方法很简单,把操作系统去掉,再换成裸机形式不就可以了吗?

对此,我只想套用一下《卖拐》里本山大叔对脑袋大、脖子粗的伙夫范伟的一句评语:恭喜你,都会抢答了!

我们都听说过一个大致类似的典故,说有一个家伙想学钢琴,打听学费几何,老师问清楚这个家伙有一点基础之后,就故作高深地说,如果没学过,学费1万,如果学过,学费2万。不等学员把诧异的眼睛睁圆,老师悠悠地自问自答,为什么需要多交费?原因无他,只是需要多花时间把你的错误习惯改过来而已。

笔者在ucos的框架下已经写了那么多程序,你提议让我去掉ucos,然后改写那些依赖于ucos的任务、信号、消息机制的诸多代码?时日无多,徒奈其何,哪里有那么多的时间呢?最好是不仅能去掉ucos,把ucos切割开,同时尽量把其它相关代码的修改量降到最低,不改那些依赖它的任务、信号机制的代码!

“怎么办?最简单也最困难,饭要粒粒分开,还要沾着蛋,嘿,蛋炒饭。”




关键词: 汽车 遥控

评论


相关推荐

技术专区

关闭