浪子三唱,不唱悲歌,红尘间,哀痛事,已太多。
佛祖有云,人生八苦交煎,所谓八苦者,生、老、病、死、求不得、怨憎会、爱分别、五阴炽盛。春天百花开,秋天黄叶落,人之生老病死在所难免,但乐观主义者常常在日子的荆棘中找出一条小径来,肩住漆黑的闸口,洒下光亮的福音。他们以饮食有节、起居有定、训练有时反抗变老和病痛,调素琴,阅金经,少私寡欲,也可逃过求不得、怨憎会、爱分别之摧残,但唯有这五阴炽盛,如影子随身,挥之不去。
五阴者,色、受、想、行、识。色者,肉身也,尽管微观上生灭不已,但以其改动缓慢,总让人产生青春永驻、年月静好之幻觉,仅仅苍天爱轮回,又曾饶过谁?受、想、行、识却都在精力层面,感触(受)时而无风无浪,如静海深流,时而劲风大雨、任意澎湃;主意(想)此伏彼起,像个五六岁的小男孩相同闹个不断;念念迁流不住(行),前赴后继;其背面的“识”也总在梦中像个画师相同,勾勒出彩色的梦境。在洒家看来,人生最苦就在这五阴炽盛了。由于,每次作业中遇到了大bug,身体都会被搞得疲惫不堪,心里诚惶诚恐,脑袋里主意一个接着一个,想闭目歇息一下吧,想法还总是一个接一个地不断蹦出来,烦扰得不得安定,真真叫一个苦啊!
1
鲁迅先生说过,“人生最苦痛的是梦醒了无路能够走。做梦的人是美好的,倘没有看出可走的路,最要紧的是不要去吵醒他。”我在半夜时分悄然醒来,一时竟不知身在何处。重庆的夜反常幽静,月色如洗,爬过窗台,倾泻了一地,在含糊的月光中,如同罩着一层轻纱,温顺地劝慰着喧嚣了一天后沉沉入睡的大地。我躺在宾馆的床上,脑袋空空,心中一片茫然,重复咀嚼着鲁迅先生的这句话。折腾一天,十分困难睡着,本该好好歇息了,偏偏五阴炽盛起来,搅了清梦不说,偏偏“梦醒了无路能够走”,岂非是先生所言“人生最苦痛的”?
自从接了这个BCM的活,两度寒暑,时刻不长不短,却也光临重庆屡次了。调试、测验、路试、试产、量产,一步步走来,步步惊心。自上回修正路试呈现的问题之后,现已曩昔一年有余了,洒家做的这款BCM也总算量产装车了。都说一波三折,这不,装车数量过了千台,却偏偏又出了问题!
问题的表现形式倒也爽性,便是开了几天车之后,不知道为了什么,再打转向灯时就会呈现倍频闪耀的状况,可是它来得也快去得也洒脱,泊车锁门关窗办点事之后,再次行车期间,这个毛病就又不可思议地消失了。奇也怪了个哉!
正常状况下,焚烧开关处于ON档,车灯组合开关拨到转向方位,转向灯就依照固定频率闪耀起来,亮了又灭,灭了又亮,似乎无声地诉说着尘世的轮回。倍频闪耀倒也不是毫无因由,空穴来风,BCM在转向灯闪耀期间检测各个转向灯的作业电流,假如检测出“掉灯”毛病,就将转向灯以正常闪耀频率的两倍闪耀。不消说,肯定是误检测出了掉灯毛病,才会触发“倍频”闪耀的。可是,转向灯开关检测和转向灯电流检测的时序是固定的,现在的程序设计确保了只需在转向灯闪耀的点亮期间才会检测转向灯电流,不或许呈现转向灯灭掉期间检测转向灯电流的景象,所以,按理不会呈现“误检测”掉灯毛病。我又翻了翻代码,确认了这个问题。
转向灯开关信号来自LIN总线上的组合开关节点,依据LIN报文长度和波特率能够核算得出,检测出有用转向灯开关信号的时刻大约都是在(60 *n)+ 6ms的方位,而BCM一起以50ms为周期循环进行转向灯的电流检测,先依据转向灯的亮灭状况设置ADC检测通道,在转向灯亮时使能相应端口的ADC检测,考虑到驱动芯片的电流回馈引脚需求必定的准备时刻,因此在设置了ADC检测通道之后,距离2ms后进行实践转化,检测时刻大约都是在(50 * m)+2ms的方位,明显,只需(50 * m)时刻转向灯是点亮状况,(50 * m)+2ms也是点亮状况。
根据这个“无懈可击”的判别,我过早地做出了这次毛病和时序无关的定论,当然也形成了我“梦醒了无路能够走”的苦痛。
2
自个儿研制期间没有测出来这个问题,路试人员也不明所以,明显,“不是国军无能,而是共军太奸刁。”这次出完事被揪过来,战战兢兢地鼓捣半响,我相同没有复现出这个毛病来。
车厂技术人员是个老相识了,长着一对像小孩子相同的招风大耳朵,忽闪着两只由于年青而显得分外有神的眼睛,站在两步开外,看着我在那里忙得焦头烂额,观摩良久,便把双手插在口袋里,悠悠地说:“光华居士,看来你的人品分外好,你一来,你家的BCM就厚道了。”
“咳,咳,”听着他充溢好心的戏谑,心虚的我居然手足无措起来。“或许吧。”
“吃饭去吧,请你吃重庆小面!”这位仁兄却是一副好心境。看着他那张没心没肺的笑脸,心中就像压了一块石头的我多少也安然了些,便跟在他那强健的脚步后边,萧规曹随地去了。
黄昏的饭馆乱糟糟的,夹杂着喧闹的说话声和哧溜哧溜的吃饭声的空气中,飘荡着一股淡淡的牛肉汤滋味和浓浓的辣椒气味。找地坐定,这位仁兄便翻开了话匣子,“我从库房里提出这台毛病车今后也测验了一下,刚开始也没有发现转向灯快闪的毛病,中心呈现过几回,再后来又消失了。看来,想测出来毛病还得靠命运。”他半开打趣似地说。
测了小半响依然茫无头绪的我一边萎靡不振地吃着面,一边不经意地问道。“之前那些毛病车是用户测出来的仍是你们自个测出来的?”
“咱们自己测出来的,用户还没有反应过这个问题。或许是由于这个毛病是偶发性的,即便呈现了,用户也不必定能留意得到,并且呈现过之后又会不可思议消失,所以也没当成回事。”在被热腾腾的面条蒸汽含糊了的脸庞上,他那两片肥肥的亮油油的嘴唇分外有目共睹。
‘为什么没早点测出来?’我心里不由嘀咕道,全然忘记了这雷本该自己来背。“毛病消失是产生在车辆休眠又唤醒之后?”我忽然想起来自己这小半响一直是开着门,车辆都没有进过低功耗状况。
“对对对,还真是这样,呈现毛病之后,总是消除不掉,锁了车,过了一段时刻又回来,毛病就消失了。”他咽下一块牛肉,又急又快地答复我。
几根面条歪歪扭扭地躺在碗中,绿莹莹的香菜若隐若现地装点在清汤里,看着面前的清汤寡水,我也心思澄明起来,肯定是低功耗改动了转向灯开关检测和转向灯电流检测的时序,使得设置ADC通道时转向灯仍是亮的,可是2ms后就现已是灭的了,对,肯定是这样,我模含糊糊地回想着代码。
弯弯的月牙如同跨过了一条看不出的边界,把落日挤进了山的那一边,被和风撕碎的几片白云也换上了青灰色的衣裳。本着多年的经历,我已然能够确认低功耗对时序的改动,心境大好的我一抹嘴,站动身来,掏出一张赤色大票,拍在桌子上,“我请客!”
3
回到宾馆,翻开电脑,直奔低功耗处理程序,一切都了然了。
休眠程序实践上是一个睡觉-暂时唤醒-睡觉-暂时唤醒。。的循环,睡觉24ms,暂时唤醒2ms,假如在暂时唤醒形式期间,唤醒条件有用,BCM退出休眠,不然,再次进入休眠,如此往复。
暂时唤醒期间,一切软件定时器共用的计时基准Timer_ticked也在累加,它每次硬件定时器中止都会累加1,累加到255后再回到0。明显,假定退出休眠时,转向灯电流检测定时器现已计满,而转向灯开关检测定时器还未计满,比如在56ms的方位,退出休眠后转向灯电流检测定时器便会由于计满清零,而丧失了和转向灯开关检测定时器的同步,它们之间错位的起伏为6ms。成果就形成或许呈现转向灯开关检测程序在设置ADC通道时转向灯处于点亮状况,而2ms后转向灯灭掉的状况,这就会导致“误检测”出掉灯毛病,然后呈现无故倍频闪耀的状况。
问题找到了,修正也很简单,在ADC转化中止服务程序中,增加对转向灯亮灭状况的判别。只需在转向灯亮时,才将ADC成果寄存器中的值赋值给寄存转向灯反应电流的变量,如此这般即可。
第二天,阳光温暖,春风送暖,问题解决地及时并且精确,给车厂技术人员解说一番,提交了整改陈述后,他们也就高高举起,悄悄落下,放咱们一马了,只需求把库房里的库存都改写程序就能够了。那么多件,一件件地刷程序是个不小的体力活,可是,不罚款,也不影响正常装车,这就应该烧高香了不是?要啥自行车啊!
跋文
嵌入式体系的正常工作,在于各个模块的密切配合,除了在空间(体现为RAM空间中的信号量、事情、全局变量等)上共通有无之外,还需求在时刻上精确而无误。正所谓,时序便是嵌入式体系的脉息,一点都错不得。