新聞中心

EEPW首頁(yè) > 牛人業(yè)話 > 時(shí)序就像脈搏,一點(diǎn)都錯(cuò)不得

時(shí)序就像脈搏,一點(diǎn)都錯(cuò)不得

作者:光華居士 時(shí)間:2018-11-07 來(lái)源:電子產(chǎn)品世界 收藏

浪子三唱,不唱悲歌,紅塵間,悲傷事,已太多。

本文引用地址:http://m.butianyuan.cn/article/201811/393985.htm

佛祖有云,人生八苦交煎,所謂八苦者,生、老、病、死、求不得、怨憎會(huì)、愛(ài)別離、五陰熾盛。春天百花開(kāi),秋天黃葉落,人之生老病死在所難免,但樂(lè)觀主義者每每在生活的荊棘中找出一條小徑來(lái),肩住黑暗的閘門(mén),灑下光明的福音。他們以飲食有節(jié)、起居有定、鍛煉有時(shí)抵抗衰老和病痛,調(diào)素琴,閱金經(jīng),清心寡欲,也可逃過(guò)求不得、怨憎會(huì)、愛(ài)別離之折磨,但唯有這五陰熾盛,如影子隨身,揮之不去。

五陰者,色、受、想、行、識(shí)。色者,肉身也,雖然微觀上生滅不已,但以其變化緩慢,總讓人產(chǎn)生青春永駐、歲月靜好之錯(cuò)覺(jué),只是蒼天愛(ài)輪回,又曾饒過(guò)誰(shuí)?受、想、行、識(shí)卻都在精神層面,感受(受)時(shí)而無(wú)風(fēng)無(wú)浪,如靜海深流,時(shí)而大風(fēng)大雨、肆意磅礴;想法(想)此起彼伏,像個(gè)五六歲的小男孩一樣鬧個(gè)不停;念念遷流不?。ㄐ校?,前赴后繼;其背后的“識(shí)”也總在夢(mèng)中像個(gè)畫(huà)師一樣,勾勒出五彩的夢(mèng)境。在灑家看來(lái),人生最苦就在這五陰熾盛了。因?yàn)?,每次工作中遇到了大bug,身體都會(huì)被搞得疲憊不堪,內(nèi)心誠(chéng)惶誠(chéng)恐,腦袋里想法一個(gè)接著一個(gè),想閉目休息一下吧,念頭還總是一個(gè)接一個(gè)地不斷蹦出來(lái),攪擾得不得安寧,真真叫一個(gè)苦??!

1

魯迅先生說(shuō)過(guò),“人生最苦痛的是夢(mèng)醒了無(wú)路可以走。做夢(mèng)的人是幸福的,倘沒(méi)有看出可走的路,最要緊的是不要去驚醒他?!蔽以谧右箷r(shí)分悄然醒來(lái),一時(shí)竟不知身在何處。重慶的夜異常寂靜,月色如洗,爬過(guò)窗臺(tái),傾瀉了一地,在朦朧的月光中,好像罩著一層輕紗,溫柔地?fù)嵛恐鷩塘艘惶旌蟪脸寥胨拇蟮?。我躺在賓館的床上,腦袋空空,心中一片茫然,反復(fù)咀嚼著魯迅先生的這句話。折騰一天,好不容易睡著,本該好好休息了,偏偏五陰熾盛起來(lái),攪了清夢(mèng)不說(shuō),偏偏“夢(mèng)醒了無(wú)路可以走”,豈非是先生所言“人生最苦痛的”?

自從接了這個(gè)BCM的活,兩度寒暑,時(shí)間不長(zhǎng)不短,卻也光顧重慶多次了。調(diào)試、測(cè)試、路試、試產(chǎn)、量產(chǎn),一步步走來(lái),步步驚心。自上回修改路試出現(xiàn)的問(wèn)題之后,已經(jīng)過(guò)去一年有余了,灑家做的這款BCM也終于量產(chǎn)裝車了。都說(shuō)好事多磨,這不,裝車數(shù)量過(guò)了千臺(tái),卻偏偏又出了問(wèn)題!

問(wèn)題的表現(xiàn)形式倒也干脆,就是開(kāi)了幾天車之后,不知道為了什么,再打轉(zhuǎn)向燈時(shí)就會(huì)出現(xiàn)倍頻閃爍的情況,但是它來(lái)得也快去得也瀟灑,停車鎖門(mén)關(guān)窗辦點(diǎn)事之后,再次行車期間,這個(gè)故障就又莫名其妙地消失了。奇也怪了個(gè)哉!

正常情況下,點(diǎn)火開(kāi)關(guān)處于ON檔,車燈組合開(kāi)關(guān)撥到轉(zhuǎn)向位置,轉(zhuǎn)向燈就按照固定頻率閃爍起來(lái),亮了又滅,滅了又亮,仿佛無(wú)聲地訴說(shuō)著塵世的輪回。倍頻閃爍倒也不是毫無(wú)來(lái)由,空穴來(lái)風(fēng),BCM在轉(zhuǎn)向燈閃爍期間檢測(cè)各個(gè)轉(zhuǎn)向燈的工作電流,如果檢測(cè)出“掉燈”故障,就將轉(zhuǎn)向燈以正常閃爍頻率的兩倍閃爍。不消說(shuō),肯定是誤檢測(cè)出了掉燈故障,才會(huì)觸發(fā)“倍頻”閃爍的??墒?,轉(zhuǎn)向燈開(kāi)關(guān)檢測(cè)和轉(zhuǎn)向燈電流檢測(cè)的時(shí)序是固定的,現(xiàn)在的程序設(shè)計(jì)保證了只有在轉(zhuǎn)向燈閃爍的點(diǎn)亮期間才會(huì)檢測(cè)轉(zhuǎn)向燈電流,不可能出現(xiàn)轉(zhuǎn)向燈滅掉期間檢測(cè)轉(zhuǎn)向燈電流的情形,所以,按理不會(huì)出現(xiàn)“誤檢測(cè)”掉燈故障。我又翻了翻代碼,確認(rèn)了這個(gè)問(wèn)題。

轉(zhuǎn)向燈開(kāi)關(guān)信號(hào)來(lái)自LIN總線上的組合開(kāi)關(guān)節(jié)點(diǎn),根據(jù)LIN報(bào)文長(zhǎng)度和波特率可以計(jì)算得出,檢測(cè)出有效轉(zhuǎn)向燈開(kāi)關(guān)信號(hào)的時(shí)刻大概都是在(60 *n)+ 6ms的位置,而B(niǎo)CM同時(shí)以50ms為周期循環(huán)進(jìn)行轉(zhuǎn)向燈的電流檢測(cè),先根據(jù)轉(zhuǎn)向燈的亮滅狀態(tài)設(shè)置ADC檢測(cè)通道,在轉(zhuǎn)向燈亮?xí)r使能相應(yīng)端口的ADC檢測(cè),考慮到驅(qū)動(dòng)芯片的電流回饋引腳需要一定的準(zhǔn)備時(shí)間,因此在設(shè)置了ADC檢測(cè)通道之后,間隔2ms后進(jìn)行實(shí)際轉(zhuǎn)換,檢測(cè)時(shí)間大概都是在(50 * m)+2ms的位置,顯然,只要(50 * m)時(shí)刻轉(zhuǎn)向燈是點(diǎn)亮狀態(tài),(50 * m)+2ms也是點(diǎn)亮狀態(tài)。

基于這個(gè)“無(wú)懈可擊”的判斷,我過(guò)早地做出了這次故障和時(shí)序無(wú)關(guān)的結(jié)論,當(dāng)然也造成了我“夢(mèng)醒了無(wú)路可以走”的苦痛。

2

自個(gè)兒研發(fā)期間沒(méi)有測(cè)出來(lái)這個(gè)問(wèn)題,路試人員也不明所以,顯然,“不是國(guó)軍無(wú)能,而是共軍太狡猾?!边@次出了事被揪過(guò)來(lái),戰(zhàn)戰(zhàn)兢兢地鼓搗半天,我同樣沒(méi)有復(fù)現(xiàn)出這個(gè)故障來(lái)。

車廠技術(shù)人員是個(gè)老相識(shí)了,長(zhǎng)著一對(duì)像小孩子一樣的招風(fēng)大耳朵,忽閃著兩只因?yàn)槟贻p而顯得格外有神的眼睛,站在兩步開(kāi)外,看著我在那里忙得焦頭爛額,觀摩許久,便把雙手插在口袋里,悠悠地說(shuō):“光華居士,看來(lái)你的人品格外好,你一來(lái),你家的BCM就老實(shí)了。”

“咳,咳,”聽(tīng)著他充滿善意的戲謔,心虛的我竟然不知所措起來(lái)。“也許吧。”

“吃飯去吧,請(qǐng)你吃重慶小面!”這位仁兄倒是一副好心情??粗菑垱](méi)心沒(méi)肺的笑臉,心中就像壓了一塊石頭的我多少也坦然了些,便跟在他那矯健的步伐后面,亦步亦趨地去了。

傍晚的飯店亂哄哄的,夾雜著嘈雜的說(shuō)話聲和哧溜哧溜的吃飯聲的空氣中,飄蕩著一股淡淡的牛肉湯味道和濃濃的辣椒氣味。找地坐定,這位仁兄便打開(kāi)了話匣子,“我從庫(kù)房里提出這臺(tái)故障車以后也測(cè)試了一下,剛開(kāi)始也沒(méi)有發(fā)現(xiàn)轉(zhuǎn)向燈快閃的故障,中間出現(xiàn)過(guò)幾回,再后來(lái)又消失了??磥?lái),想測(cè)出來(lái)故障還得靠運(yùn)氣?!彼腴_(kāi)玩笑似地說(shuō)。

測(cè)了小半天仍然不得要領(lǐng)的我一邊無(wú)精打采地吃著面,一邊不經(jīng)意地問(wèn)道?!爸澳切┕收宪囀怯脩魷y(cè)出來(lái)的還是你們自個(gè)測(cè)出來(lái)的?”

“我們自己測(cè)出來(lái)的,用戶還沒(méi)有反饋過(guò)這個(gè)問(wèn)題??赡苁且?yàn)檫@個(gè)故障是偶發(fā)性的,即使出現(xiàn)了,用戶也不一定能注意得到,而且出現(xiàn)過(guò)之后又會(huì)莫名其妙消失,所以也沒(méi)當(dāng)成回事。”在被熱騰騰的面條蒸汽模糊了的臉龐上,他那兩片肥肥的亮油油的嘴唇格外引人注目。

‘為什么沒(méi)早點(diǎn)測(cè)出來(lái)?’我心里不禁嘀咕道,全然忘記了這雷本該自己來(lái)背。“故障消失是發(fā)生在車輛休眠又喚醒之后?”我突然想起來(lái)自己這小半天一直是開(kāi)著門(mén),車輛都沒(méi)有進(jìn)過(guò)低功耗狀態(tài)。

“對(duì)對(duì)對(duì),還真是這樣,出現(xiàn)故障之后,總是消除不掉,鎖了車,過(guò)了一段時(shí)間又回來(lái),故障就消失了?!彼氏乱粔K牛肉,又急又快地回答我。

幾根面條歪歪扭扭地躺在碗中,綠油油的香菜若有若無(wú)地點(diǎn)綴在清湯里,看著面前的清湯寡水,我也心思澄明起來(lái),肯定是低功耗改變了轉(zhuǎn)向燈開(kāi)關(guān)檢測(cè)和轉(zhuǎn)向燈電流檢測(cè)的時(shí)序,使得設(shè)置ADC通道時(shí)轉(zhuǎn)向燈還是亮的,但是2ms后就已經(jīng)是滅的了,對(duì),肯定是這樣,我模模糊糊地回想著代碼。

彎彎的月牙好像跨過(guò)了一條看不出的界限,把夕陽(yáng)擠進(jìn)了山的那一邊,被微風(fēng)撕碎的幾片白云也換上了青灰色的衣裳。本著多年的經(jīng)驗(yàn),我已然可以確定低功耗對(duì)時(shí)序的改變,心情大好的我一抹嘴,站起身來(lái),掏出一張紅色大票,拍在桌子上,“我請(qǐng)客!”

3

回到賓館,打開(kāi)電腦,直奔低功耗處理程序,一切都了然了。

休眠程序?qū)嶋H上是一個(gè)睡眠-臨時(shí)喚醒-睡眠-臨時(shí)喚醒。。的循環(huán),睡眠24ms,臨時(shí)喚醒2ms,如果在臨時(shí)喚醒模式期間,喚醒條件有效,BCM退出休眠,否則,再次進(jìn)入休眠,如此往復(fù)。

臨時(shí)喚醒期間,所有軟件定時(shí)器共用的計(jì)時(shí)基準(zhǔn)Timer_ticked也在累加,它每次硬件定時(shí)器中斷都會(huì)累加1,累加到255后再回到0。顯然,假設(shè)退出休眠時(shí),轉(zhuǎn)向燈電流檢測(cè)定時(shí)器已經(jīng)計(jì)滿,而轉(zhuǎn)向燈開(kāi)關(guān)檢測(cè)定時(shí)器還未計(jì)滿,比如在56ms的位置,退出休眠后轉(zhuǎn)向燈電流檢測(cè)定時(shí)器便會(huì)因?yàn)橛?jì)滿清零,而喪失了和轉(zhuǎn)向燈開(kāi)關(guān)檢測(cè)定時(shí)器的同步,它們之間錯(cuò)位的幅度為6ms。結(jié)果就造成可能出現(xiàn)轉(zhuǎn)向燈開(kāi)關(guān)檢測(cè)程序在設(shè)置ADC通道時(shí)轉(zhuǎn)向燈處于點(diǎn)亮狀態(tài),而2ms后轉(zhuǎn)向燈滅掉的狀態(tài),這就會(huì)導(dǎo)致“誤檢測(cè)”出掉燈故障,從而出現(xiàn)無(wú)故倍頻閃爍的情況。

問(wèn)題找到了,修改也很簡(jiǎn)單,在ADC轉(zhuǎn)換中斷服務(wù)程序中,添加對(duì)轉(zhuǎn)向燈亮滅狀態(tài)的判斷。只有在轉(zhuǎn)向燈亮?xí)r,才將ADC結(jié)果寄存器中的值賦值給存放轉(zhuǎn)向燈反饋電流的變量,如此這般即可。

第二天,陽(yáng)光和煦,春風(fēng)送暖,問(wèn)題解決地及時(shí)而且準(zhǔn)確,給車廠技術(shù)人員解釋一番,提交了整改報(bào)告后,他們也就高高舉起,輕輕落下,放我們一馬了,只需要把庫(kù)房里的庫(kù)存都刷新程序就可以了。那么多件,一件件地刷程序是個(gè)不小的體力活,但是,不罰款,也不影響正常裝車,這就應(yīng)該燒高香了不是?要啥自行車?。?/p>

后記

嵌入式系統(tǒng)的正常運(yùn)轉(zhuǎn),在于各個(gè)模塊的密切配合,除了在空間(體現(xiàn)為RAM空間中的信號(hào)量、事件、全局變量等)上共通有無(wú)之外,還需要在時(shí)間上準(zhǔn)確而無(wú)誤。正所謂,時(shí)序就是嵌入式系統(tǒng)的脈搏,一點(diǎn)都錯(cuò)不得。



關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉