《请答复1988》第一集就让我这个三十多岁的肥腻中年男哭了个稀里哗啦,在一般而琐碎的日常日子里,母子之间、父女之间那种似淡却浓、连绵不绝的亲情总会在不经意间戳中为人爸爸妈妈/为人子女的泪点。这种爱情的质地亘千年而不变,表达的方法则历万古而常新。古有孟母三迁的美谈,现有幼儿园门口的亲子大战。
上班路过幼儿园门口,常常看到娃娃和妈妈们相爱相杀的一幕。有的抱着妈妈的大腿,摊在地上撕心裂肺地哭喊,有的拽着妈妈的臂膀,上气不接下气地边哭边讲条件。妈妈们的体现倒出奇的共同,一副虽九死而尤未悔的慨然,怒目相向,横眉冷对。
大多数孩子膂力不济,打不了持久战,所以乖乖就范,耷拉着小脑袋一步三回头,在妈妈们志足意满的目光中走向幼儿园。可是,在这种敌我两边力量悬殊的战局中,偶有那种毅力坚决的小兵士,一向满怀着敢叫日月换新天的豪情,虽千万人吾往矣地宣告着自己的价值建议-玩、在家玩。
这种战略对峙的局面并不多见,常常目击,不认为怪。直到有一次,我忽然对坚持反抗的小兵士充满了深深的慕名之情:毅力这么坚决,必定是个干工程师的好苗子。
1
老衲之所以感慨万端,天然是因为工作上遇到了难以战胜的应战。在处理的过程中,屡次感到自己毅力不坚,想当逃兵脱离这迷离的前方。
老衲开发的一款工控产品中有一个反常电压维护功用,当外部供电电压反常时需求关断一切输出,当供电电压回到正常规模时康复一切输出。
这个功用乍看起来有些简略,有经历的工程师必定已经在脑海里想好了处理计划:
设定供电电压的正常规模上下限,用ADC周期性地检测外部供电电压并周期性地判别。设置判别电压反常的周期计时次数N,当供电电压继续低于下限或许继续高于上限必定次数(N)的周期时,关断其时正在导通状况下的一切输出。当供电电压继续处于正常区间(N个ADC检测周期)时,依据产品的功用逻辑,操控输出的注册和关断。
悲催的老衲开端便是这么干的,可是很快,老衲就意识到这种办法笨拙备至,底子完成不了反常电压维护。
原因无他,输出太多尔,操控逻辑太杂乱尔!
这款工控产品的输出通道高达30多路,每路输出都需求独自操控,并且有的通道互有相关。输入信号则来自多路传感器、RS485总线、zigbee。操控输出时,主要是依据输入信号、产品内部状况,依照必定的逻辑注册或关断。
输入输出信号繁复,操控逻辑错综杂乱,以至于那个“想当然”的处理计划底子完成不了。
拍一拍脑袋想想吧。假定供电电压反常时,有15路输出处于注册状况。经过N个检测周期发现电压一向反常,所以乎把这15路统统关断。
咔咔咔,犹如抽刀砍西瓜,一刀剖去,红瓤黑子清楚俨然,那真叫一个不亦快哉!
可是且慢,“快哉”了之后呢?现在供电电压康复正常了,您这15路通道怎样康复之前的注册状况?
2
傻眼了吧?不论你们傻不傻,横竖我其时就傻眼了!
关断总是简略,可是康复太难。就好像把房子推倒简略,再建起来很难相同。
老衲得供认,刚开端虽然傻了眼,可是我并没有开窍。我傻傻地为这30多路输出界说了30多个状况变量,“不亦快哉”之前先计算处于导通状况的通道,“快哉”之后需求康复时,再把处于导通状况的逐个康复。
可是,在导通状况的康复程序中,依然需求面临30多路输出。每一路输出都有自己的操控逻辑,在操控逻辑里既要看输入信号,还要看内部状况。并且有的输出还比较膈应人,它能够被好几个输入信号一起操控,终究处于什么状况要看这些输入信号之间的优先级。便是说,不只要看信号的其时状况,还要看它的前史状况!
从理论上来讲,硬扛不是不能够。总共30多路,余生还长,鼓起勇气一路一路来呗。程序上电运转后,将各个输入信号的前史状况、先后次第都存储下来,并实时更新。在反常电压关断维护之后的康复程序子分支中,再把每一路的操控逻辑都重写一遍。
从实践上来看,这种计划几乎笨的离谱。老衲花了半响功夫,弄了一路输出之后,测试了一番,发现这一路也没有康复对。
这路输出有四种操控逻辑,能够经过zigbee信号操控,输出方法是常开,经过RS485操控,则应该是闪耀,经过一个传感器操控,则应该是频率更低的闪耀,也能够经过一个本地开罐直接注册或许关断。这四种信号的优先级是最简略的那种:最终呈现的信号说了算。这儿没有康复对,明显是因为我从前存储前史状况时,把这些信号的先后次第搞乱了,可是信号这么多,程序搞得这么乱,犯错也是天经地义。
刚弄了一路还没弄对,要害是还有那么多路,我滴个乖乖,这岂止一个费事了得!
想通了这一点之后,老衲的毅力在一刹那间溃散了。
崩地那么猝不及防,以至于很长一段时间,我都深陷在椅子上,“关断”了自己的大脑输出,再也不想康复。
3
鲁迅先生说,这世上本没有路,走的人多了,天然就有了路。
在被幼儿园的小兵士从头鼓动了斗志之后,老衲的“小我”在脑海里左冲右突,寻觅晦暗的出路。
明显,有必要让输出通道的康复逻辑和平常的操控逻辑有所区隔,才干从那么繁复的操控网络中解放出来。
古龙说过:最高超的招数便是没有招数,以无招胜有招。金刚经曰:菩萨无我相,无人相,无众生相,无寿者相,方能成道。
那么,最高超的康复逻辑便是没有任何逻辑,让这三十多路输出通道康复时不遵照任何逻辑,不便是最为高深的“逻辑”吗?
很快,我就顺着佛陀的开示思路展开了下去。
大道千万条,最妙的是老衲这一条。我只需求在MCU的输出操控端口上做文章,当电压反常时禁能MCU端口的输出功用,电压康复正常时康复MCU端口的输出功用,就整齐划一、简明有力地完成了反常电压下的输出维护、正常电压下的输出康复。
管它电压反常时处于导通状况仍是关断状况,管它的操控信号状况怎么,诸信号间的优先级怎么,统统不重要。关断维护前是导通状况,禁能了MCU的输出就主动起到了输出维护效果,康复时也能主动康复导通状况。关断维护前是关断状况,禁能MCU的输出后仍是处于关断状况,相当于做了个“双保险”,康复时仍是主动康复关断状况!
老衲再一次被自己的梵学素质惊呆了。只要不遵照任何产品功用上的逻辑,才是最为简练的逻辑,更为要害的一点是,这种完成计划还能被应用在其它任何产品的反常电压维护上。
谁说工程师学佛没用来着?
4
以这种近乎古怪的方法完成了反常电压维护功用之后,一向长于内省的老衲又开端“向内寻求”,总结经历教训了。
在技术问题上,首要仍是要战胜畏难心思,把畏战怯战心情尽量压制住。靠动脑袋处理的事儿,有必要先鼓足了心劲,坚决毅力,好好地把脑袋磨尖,才干在技术上深化地向下钻。
其次,人的思路总是有自己的限制性。就像老衲在这儿把思路限制在产品的功用逻辑上相同,像是蒙了眼的驴相同,来回地兜圈子。殊不知,跳出这限制,还广有一番洞天。
说到底,仍是破除“执着”。真实的高手,处理问题时从来不限制在武器上,刀枪剑戟斧钺钩叉,哪个趁手用哪个。也不限制在一招一式上,纵横捭阖如行云流水。只靠三板斧的笨功夫,在工程师这条道路上只会越走越窄。
思路上尽量开阔,不要粘滞在一隅。在这上面,咱们仍是要取法天然,多看看荷塘里怒放的荷花和莲叶,多看看挂在天边的月亮。细心领会领会这两句明言:犹如莲花不着水,亦如日月不住空!
水珠在莲叶上滚来滚去,一点点也不粘滞。弯弯的月亮挂在天边,可是咱们能明显地领会到它并没有“住”在虚空里。
这对咱们工程师,不正是很好的启示吗?多说无益,望诸君善思之!