新闻中心

EEPW首页 > 牛人业话 > 万物皆需滤波,否则系统翻车

万物皆需滤波,否则系统翻车

作者:光华居士时间:2019-01-31来源:电子产品世界收藏

“这是一个最好的时代,也是一个最坏的时代,这是一个智慧的年代,也是一个愚蠢的年代。”拿英国大文豪狄更斯的这段话用来描述这个信息爆炸的现代社会再合适不过了。

本文引用地址:http://www.amcfsurvey.com/article/201901/397351.htm

  当代社会,网络四通八达,触角遍布天下,宅在家中,只要连上网,我们似乎就被赋予了神通的力量,生了千里眼,足不出户,可观天下,长了顺风耳,动动鼠标,就能捕捉到空中永不消逝的电波。远古时代交通基本靠走,通信基本靠吼,就连那个传奇般的琅琊阁,也要靠遍布天下的眼线、不断飞梭的信鸽传书才能识尽天下人,算尽天下事,相比之下,这个耀眼的大时代对我们真是无私而慷慨。

  但是,这世上的一切都像月亮,总有一个阴暗面,让人永远看不见。

  在这个无序地野蛮生长的网络社会中,在这个你方唱罢我登场的自媒体时代,每个人既是信息的消费者,也是信息的生产者,在数以亿计生产者有意无意的输出中,数据终于泛滥的洪水滔天。各类垃圾数据犹如耀眼的烟花,腾空而来,逐风而去,转眼落地成渣。各种虚假的信息野蛮生长,来得轰轰烈烈,消失地无声无息。总之,无用的垃圾信息扑面而来,让网民们防不胜防,白白浪费了大好的宝贵时光。

  面对信息的汪洋,网民们大都脆弱而迷惘,太多时候,不想看的应有尽有,想看的一无所有。虽然常在河边走,哪有不湿鞋,百花丛中过,很难做到片叶不沾身,但是我们仍然期盼着有那么一堵墙或者一张无形的网,把我们不想看的都挡上一挡。

  哪里有压迫,哪里就有反抗,更何况,信息过滤也是一个非常大的市场。于是乎,靠着对个人阅读习惯的精准推送,在数据洪流上添加了一道过滤网的今日头条粉墨登场了。头条刚刚开始崭露头角时,洒家就切切实实地感受到了它的力量,这种体验实在太棒了,几番磨合下来,头条就像捕捉到了你的所思所想,给的都是想看的,不想看的通通入网。现代社会,效率至上,时间就是金钱,头条通过“滤波”节约了网民的大量时间,它也得以迅速成长。只是后来的头条慢慢走了样,变得空有技术,内容干货越来越少,我也终于把它一卸了之。

  刚刚成立六年的头条当今市值千亿,脚踢腾讯,掌掴百度,足以证明滤波有多么重要。做为嵌入式工程师的笔者,在一次莫名其妙的产品故障之后,也体会到了电子产品不滤波就翻车的尿性。

  1

  入冬后的北方越来越难熬了。

  公司地处偏郊,靠坐班车来回通勤。为了节约班车运营成本,司机师傅总是到点才开始热车,往往路程过半,车内才稍稍有了一些温度,到了公司门前,车内也终于变得一片温暖。由俭入奢易,由奢入俭难,坐在车内感受温暖,眼见着车外凛冽的寒风将枯枝吹得乱颤,也就不愿意下车面对这恼人的寒。这时候,只得带着一百个不情愿,重新把自己裹得严严实实,忍冻耐寒地大步奔向公司办公室。

  到了办公室,打开中央空调的开关,头两个小时内仍然不敢摘下帽子,不愿意伸出手。这段时间里,大家伙谈天的热情也不高,大都带着帽子,缩着脖子,畏畏缩缩地坐在电脑桌前,先看看文档打打前站,等到办公室内终于暖和过来,同事们才开始慢慢活泛起来,自此才开始一天热火朝天的工作。

  洒家虽然一向埋头苦干,也很耐得了烦,但在刚上班头一两个小时的冬眠蛰伏期,也颇不愿意遇上一些繁难,这一段时间,我也只求个平平安安。

  可是,岁月剑拔弩张,岂能尽如我们的想象?

  这不,刚到办公室坐下不大会儿,来自项目合作方的一通电话就火急火燎地打了过来。

  “光华居士,碰上大事了,不知道怎么搞的,转向灯一直闪个不停。”隔着电话,仍能听得到合作方小郑的焦急。

  当得知转向灯莫名其妙地闪了一夜之后,洒家心里一个咯噔,“你们怎么测试出来的?”打开程序后,我迅速锁定了和转向灯闪烁有关的代码后,开始心平气和地问起小郑来。

  “我们是在对这款产品进行带负载试验,拿一些时间继电器产生开关信号,触发产品接通负载,大概十分钟就跑完一个完整的测试周期了。测试的第一天一点事没有,前天发现转向灯突然闪个不停,我们断了电重新上电,测到昨天又发现转向灯突然闪个不停,到现在都快闪了一天了。”小郑简短地描述了问题产生的背景。

  我头脑中闪过几个可能的答案。“是不是警示开关坏了?”我提醒小郑。“如果警示开关一直有效的话,转向灯是会闪个不停的!”

  “我们确认了所有信号,这些信号都很正常,光华居士,我们分析了大半天了,现在感觉应该是软件问题,要不你仔细看看代码,分析分析哪里是不是有漏洞?”小郑小心翼翼地提议道。

  很有可能就是软件的问题,我在心里嘀咕道。

  2

  由于无法在公司重现产品测试环境,领导委派我到Z市去解决问题。出发时正赶上下雪,街边行人稀少,路过的美女也藏起了撩人的小蛮腰。公交车小心翼翼地行驶在有些上冻的路面上,时而发出吱呀吱呀的声音,洒家坐在摇摇晃晃的车上,有一搭没一搭地考虑着这个问题,突然想到了一个可能的答案。

  ‘可能是定时器管理程序那里的问题,在转向灯多次定时那里,有个对软件定时器节点的计时次数的递减操作,这是一个32位的变量,它是不是从0递减到了2的32次方-1了?’洒家一面盘算着,一边打开电脑,想验证一下自己的想法。

  看到代码后,洒家不禁哑然失笑,原来我早就改变了定时器管理程序的实现方式,现在计时次数不是递减,而是累加了,每次计时到达时将计时次数累加,然后和设定好的阈值进行比较,如果大于等于阈值就说明已经完成了多次定时。

  人的记忆真奇妙,大雁飞过天空了无痕,人之前干过的事情却在脑子里扎下了根。

  3

  北风吹,雪花飘,刮到脸上似镰刀!在一片肃杀的天寒地冻中,洒家顶风冒雪地来到项目合作方所在的Z市。

  寒暄几句之后,小郑把我引到测试台前,一个高约两米的测试机柜静静地矗立在房间的角落,前面有一些清晰但不耀眼的指示灯,后面就是一些时间继电器和实打实的车灯、车窗等负载了。

  我探过头去看了看,转向灯正闪个不停,甚是刺眼。

  “你们一直没有断电?”我揉了揉被车灯晃得发花的眼睛,问起小郑来。

  “没有,知道你过来,我们没敢断电,就怕断了电,问题就再也测不出来了。”小郑带着一丝不好意思的微笑,哎,多么老实的工程师啊!

  接着是一阵无言的沉默,看着我攒眉蹙额地想事情,小郑也识趣地站远了一些。产品线束零乱地接在测试台上,在测试过程中,其它负载仍然有条不紊地相继接通和关断,转向灯暂时正常一下,执行完相关功能之后再一次返回无休无止的通断轮回中。

  看着简陋的测试环境和凌乱的接线,我心里多多少少有些不安,这样的测试环境,各个输入线上得有多少杂波呀!不过,除了心疼产品要应对这种无端的骚扰之外,洒家对杂波会产生产品功能故障倒是一点也不担心,做为一名入职多年的嵌入式软件工程师,洒家可以想得到,杂波一次次向产品袭来,大无畏的产品果断启用滤波功能,将一道道杂波斩于马下,就是杂波来得再猛烈些,滤波也能游刃有余,不在话下!

  4

  洒家遇到问题一向喜欢快刀斩乱麻,凭着多年扫过的雷,掉过的坑,再辅以神神叨叨的直觉,一般都会精准定位,快速爆破,直捣黄龙,这种顺风顺水,在一定程度上也滋养了我的轻狂。

  自古年少多轻狂,谁不想,轻衣怒马,仗剑走四方!

  这次,洒家检查了触发转向灯闪烁的几乎所有代码,基本上都是有进有出,闪烁几次就会停下来,绝不至于闪个不停的。弄了半天还搞不清楚子丑演卯,身在异乡,进退恓惶,真想跺跺脚,骂骂娘,以免被憋到抓狂。

  人的世界里充满了尔虞我诈,计算机的世界却始终表里如一,童叟无欺。转向灯明明白白地突然在一边闪个不停,搞得人心神不宁,再不正视问题就是赤裸裸的掩耳盗铃!

  看来问题就出在还没检查过的最后一处代码了,即碰撞报警功能。这款产品平时会检测一个PWM形式的碰撞信号,碰撞信号有效时,会触发转向灯一直闪烁。

  可能吗?测试台还能鬼使神差地在碰撞信号线上产生出一个PWM形式的杂波来?

  世界千奇百怪,如果真有这样的杂波,身经百战的洒家也有些感到奇怪。但是毕竟没有了其它怀疑的对象,于是洒家收拾好心情,好好地分析了一下碰撞信号的检测程序。

  在这款产品中,使用管脚的输入捕捉功能检测碰撞信号,使用上升沿和下降沿同时捕捉的方式,检测到上升沿后,记录一个时间戳A,等到检测到下降沿时,再记录一个时间戳B,再等待下一个上升沿,继续记录时间戳C。如果信号线上的高电平持续时间(B-A)和低电平持续时间(C-B)满足碰撞信号形式,便认为碰撞信号有效。

  分析到这里,洒家有些茫然了。

  5

  天外有天有无常,山外有山有他乡,杂波之外有杂波,难道正是PWM模样?

  洒家正想沉浸在神秘主义和虚无主义的情绪里顾影自怜一番,小郑屁颠屁颠地过来了。他带着一副期待的神情,看了看我,看了看电脑,沉默了一会儿,终于问了出来;“是不是找到原因了?”

  “啊,”我不置可否,“还要再确认一下!”

  时间宝贵,不可浪费,既然对碰撞信号检测程序起了怀疑,不管三七二十一,先把代码改了再说。

  于是,我在碰撞信号的检测上也加了一层滤波。

  修改之后,必须连续三次PWM信号满足碰撞信号形式,才会认为碰撞信号有效。改完之后,我把新程序灌到板子上,把小郑叫来,让他重新对测试台上了电,便先回了宾馆。

  一路奔波,下了车直接过来顶锅,看着系统的翻车,最后加了一层滤波,洒家也是累了狗了!

  傍晚时分,我缓缓踱步到了合作方公司,测试台正在有条不紊地执行各项功能,指示灯闪来闪去都很正常。

  接下来两天正好是周末,我和小郑在办公室盯了两天,一切正常!心态放松的我跟小郑说明白了问题的来龙去脉,看着小郑惊讶地迟迟合不上嘴,我毫不留情地又给了他重重一锤:碰撞信号输入线上能引入PWM形式的杂波,你们应该检查检查到底是测试台的问题还是产品硬件的问题了!

  6

  回程的路上,我一直禁不住地胡思乱想,电子工程师的工作干得久了,我慢慢地变成了一个怀疑论者。在电子产品的世界里,一切都有可能发生,保持开放的态度、发散的思维对解决疑难杂症特别重要。这一次经验教训也给我结结实实地上了一课,正所谓:万物皆需加滤波,否则系统会翻车!



关键词:

评论


相关推荐

技术专区

关闭