在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 汽車電子 > 牛人業(yè)話 > 頻繁中斷的ISR,執(zhí)行時(shí)間需要優(yōu)化

            頻繁中斷的ISR,執(zhí)行時(shí)間需要優(yōu)化

            作者:山坡羊 時(shí)間:2019-07-19 來源:電子產(chǎn)品世界 收藏

            花兒開,鳥兒叫,早起上班的路迢迢。風(fēng)兒吹,陽光照,為國工作的豪情萬丈高。

            本文引用地址:http://www.biyoush.com/article/201907/402884.htm

            1563518811969560.jpg

            那日,灑家虎虎生風(fēng)地走在上班的路上,正好碰上一位父親領(lǐng)著女兒去上幼兒園??吹贸鰜恚〖一飪旱钠鸫矚膺€沒有完全消散,耷拉著腦袋,慢騰騰地踢踏著。爸爸一邊急火火地拽著女兒的小胳膊往前趕,一邊跟她說著什么。

            灑家正待從這對(duì)父女倆身邊走過時(shí),正聽得爸爸彎著腰對(duì)女兒說:“不上幼兒園怎么上小學(xué)呀?”小丫頭片子奶聲奶氣地說不想上小學(xué)。爸爸不以為然地繼續(xù)說教著:“不上小學(xué)怎么上大學(xué)呀?”

            ‘恩?小學(xué)之后不該是初中嗎,還有高中吶!’我正在心里犯著嘀咕,一聲嘹亮的哭腔便劃破空氣,直沖耳膜而來。回頭一看,小家伙正一邊甩著胳膊打爸爸的屁股,一邊咧著大大的嘴巴哭著說:“我什么學(xué)都不想上??!”

            我初覺好笑,繼而感到有些悲哀??粗抢婊◣в甑臉幼?,一股惆悵在我心底潮起:你以為我愿意上班的嗎?

            1563518883797504.jpg

            1

            順利出差回來后第一天的上班生活悠閑而自在,可以東轉(zhuǎn)轉(zhuǎn)西逛逛,和這個(gè)同事打個(gè)閑茬,和那個(gè)同仁熱切但放松地討論技術(shù)。

            但是如果出差不順利,回來第一天的上班生活就沒有那么輕松美好了。在邂逅不愿上幼兒園的女娃娃那天,我正是這樣的狀態(tài)。

            這次出差的工作任務(wù)是到汽車廠進(jìn)行總線測試,筆者出發(fā)時(shí)懷著脹得鼓鼓的信心,帶著游山玩水的閑情逸致,回來時(shí)揣著灰溜溜的挫敗感,和不知如何是好的沮喪。

            幾個(gè)月前去測試時(shí),明明測得好好的,這一次,居然測試失敗了!

            測試報(bào)告中那幾個(gè)夾在綠色OK項(xiàng)目中間的NOK項(xiàng),發(fā)著悠悠的紅光,帶著冷冷的笑意,讓我的寒意從頭頂直接涼到了大地。

            1563518906588774.jpg

            點(diǎn)開這幾個(gè)NOK項(xiàng)的測試數(shù)據(jù),一行行標(biāo)記著報(bào)文收發(fā)時(shí)間、收發(fā)方向、ID、數(shù)據(jù)場的數(shù)據(jù)眼花繚亂地?fù)涿娑鴣?。根?jù)錯(cuò)誤提示,筆者產(chǎn)品發(fā)送報(bào)文的周期性沒有滿足要求。我拖著鼠標(biāo)從左拖到西,又從上拖到下,終于發(fā)現(xiàn),有一條以50ms為周期固定發(fā)送的報(bào)文,有那么一次,沒有及時(shí)地發(fā)出來。

            各種思路向我的腦海涌來,灑家穩(wěn)了穩(wěn)心神,首先把懷疑的目光放到了代碼的一致性上面。如果兩個(gè)版本的代碼不一致,把代碼改回去就還有測試通過的希望!!

            許是這幾個(gè)月來不小心改了代碼中的哪個(gè)模塊或哪個(gè)函數(shù)呢?

            我迫不及待地調(diào)出了幾個(gè)月前來做第一次測試時(shí)的代碼,用Beyond Compare對(duì)比工具和這次的測試代碼進(jìn)行了比對(duì)。

            除了這幾個(gè)月中添加的許多其它模塊的代碼,CAN通信代碼竟然是一致的。剛剛升起的一絲希望被無情地澆滅了。通信代碼一致意味著,是這幾個(gè)月來添加的不知道哪段代碼改變了這次的測試結(jié)果。

            麻煩大了!這幾個(gè)月來添了那么多代碼,鬼才知道到底是哪塊影響了倒霉的CAN通信。

            在汽車廠搞了一天,仍然不得要領(lǐng),測試MM也開始置我的美色于不顧,露出不耐煩的神色來,于是我只好灰溜溜地回了公司。

            2

            據(jù)說籃球和足球比賽有主場、客場之分,在自己的主場上,在一眾球迷的吶喊助威下,在家鄉(xiāng)父老的氣氛烘托下,球隊(duì)容易比出好的成績來。

            回到公司的我,雖然聽不到同事們的鼓掌聲,但是,回到自己熟悉的地盤,戰(zhàn)斗力也直線上升。

            我戴上耳機(jī),耳旁響起舒緩的輕音樂,在仿佛與世隔絕的靜謐中,我小心地觀察著那幾個(gè)測試NOK項(xiàng)的測試數(shù)據(jù)。

            很快,這些數(shù)據(jù)的特征浮現(xiàn)在灑家的面前。

            在這幾項(xiàng)測試中,測試軟件發(fā)送了大量優(yōu)先級(jí)或高或低的無關(guān)報(bào)文,相比之下,之前的測試中也發(fā)送了大量報(bào)文,但是都是產(chǎn)品用得到的報(bào)文。

            不同之處找到了,問題的原因自然也就很容易找到了。為了幫助讀者理解,筆者先簡單介紹一下CAN報(bào)文接收的處理程序:

            總線上接收到報(bào)文時(shí),被觸發(fā)報(bào)文接收中斷。

            進(jìn)入ISR程序后,會(huì)拿接收到的報(bào)文ID和產(chǎn)品規(guī)范所定義的需要解析的ID依次進(jìn)行比較。

            經(jīng)過若干次比較后,如果接收?qǐng)?bào)文ID和需要解析的ID一致,把報(bào)文存入接收緩沖區(qū),發(fā)送“接收到新報(bào)文”信號(hào)。如果不一致,表明接收到的是無關(guān)報(bào)文,直接丟棄報(bào)文。

            在灑家這個(gè)產(chǎn)品中,需要解析大約20條報(bào)文。為了簡單,筆者按照ID從小到大的順序進(jìn)行比較。顯然,無關(guān)報(bào)文需要進(jìn)行20次比較,最終被MCU丟棄掉,相關(guān)報(bào)文進(jìn)行比較的平均次數(shù)則為10次。實(shí)際上,測試軟件給出的那幾個(gè)OK項(xiàng)測試中,最多的比較次數(shù)也沒有超過10次。

            寫到這里,問題的原因呼之欲出了!在大量高頻次報(bào)文的沖擊下,MCU一直忙于進(jìn)行ID的比較匹配。無關(guān)報(bào)文的沖擊力量尤甚,因?yàn)镸CU進(jìn)入報(bào)文接收ISR后,每次都要進(jìn)行多達(dá)20次比較!!

            1563518972148102.jpg

            深諳摩爾定律的看官也許笑了,現(xiàn)在MCU性能這么高,20次比較算逑?!

            3

            筆者喜歡拿數(shù)據(jù)說話,這回咱就用初中數(shù)學(xué)知識(shí)掰扯掰扯。

            CAN報(bào)文的數(shù)據(jù)幀由7個(gè)不同的位場組成:幀起始、仲裁場、控制場、數(shù)據(jù)場、CRC場、應(yīng)答場、幀結(jié)尾。

            其中,幀起始標(biāo)志數(shù)據(jù)幀和遠(yuǎn)程幀的起始,由一個(gè)單獨(dú)的“顯性”位組成。仲裁場包括識(shí)別符和遠(yuǎn)程發(fā)送請(qǐng)求位(RTR)。識(shí)別符的長度為11位。控制場由6個(gè)位組成,包括數(shù)據(jù)長度代碼和兩個(gè)將來作為擴(kuò)展用的保留位。數(shù)據(jù)場由數(shù)據(jù)幀中的發(fā)送數(shù)據(jù)組成。它可以為0~8 個(gè)字節(jié)。CRC場包括CRC序列(CRC SEQUENCE),其后是CRC界定符(CRC DELIMITER)。CRC序列為15位,CRC界定符包含一個(gè)單獨(dú)的“隱性”位 。應(yīng)答場長度為2個(gè)位,包含應(yīng)答間隙(ACK SLOT)和應(yīng)答界定符(ACK DELIMITER)。幀結(jié)尾由一標(biāo)志序列界定。這個(gè)標(biāo)志序列由7 個(gè)“隱性”位組成。

            所以一個(gè)8字節(jié)的數(shù)據(jù)幀的位數(shù)為1(幀起始)+ 12(仲裁場)+ 6(控制場)+ 64(數(shù)據(jù)場)+ 16(CRC場)+ 2(應(yīng)答場)+ 7(幀結(jié)尾)= 108位。

            報(bào)文之間存在幀間空間INTERFRAME SPACE。幀間包括間歇場、總線空閑的位場。間歇場包括3 個(gè)“隱性”的位。

            所以,一個(gè)8字節(jié)的數(shù)據(jù)幀至少需要(108+3+1)* bitrate的時(shí)長,對(duì)于125kbps,需要0.896ms。對(duì)于500kbps,需要0.224ms。

            不巧的是,筆者的產(chǎn)品需要面臨的就是500kbps通訊速率的總線通信。

            那么問題來了,0.224ms來一次中斷,每次中斷執(zhí)行20次數(shù)據(jù)比較,你說MCU累不累?

            累,MCU累得都快冒煙了!

            0001.jpg

            劍客的最高境界是人劍合一,人就是劍,劍就是人。灑家遠(yuǎn)沒有到碼農(nóng)的最高境界,但也高山仰止,知道要善待MCU,才能最終達(dá)到人機(jī)合一。

            看著累得偶爾愣了神忘了發(fā)送報(bào)文的MCU,筆者在心疼又無奈的淚眼朦朧中苦苦思索著,怎么給MCU減減負(fù)呢?

            4

            這里要做的工作一言以蔽之,就是針對(duì)頻繁中斷的ISR,優(yōu)化它的執(zhí)行時(shí)間,卸掉MCU的負(fù)擔(dān)。

            看著那20個(gè)需要進(jìn)行比較的報(bào)文ID,灑家眉頭一皺,計(jì)上心來。

            CAN報(bào)文ID是11位,頭三位的取值為0-7,相當(dāng)于將CAN報(bào)文ID的取值區(qū)間劃分成了八段,分別是0-0xff、0x100-0x1ff、0x200-0x2ff。。。0x700-0x7ff。

            如果將CAN報(bào)文ID右移八位,得到頭三位取值,就可以知道這個(gè)報(bào)文ID處于這八段取值區(qū)間的哪一段,然后再到這個(gè)段內(nèi)進(jìn)行比較,比較次數(shù)不就下降很多了嗎?

            比如說,產(chǎn)品需要解析的0x700-0x7ff段的ID有0x701、0x7df兩個(gè)報(bào)文,接收到一個(gè)0x745的無關(guān)報(bào)文時(shí),之前的比較次數(shù)是20次,現(xiàn)在是執(zhí)行一次8位移位,然后進(jìn)行2次比較。

            只需要執(zhí)行一次移位運(yùn)算,比較次數(shù)從20次陡然下降到了2次??!

            我被這種效率的提升幅度驚呆了。只是一個(gè)非常簡單的方法,就得到了這么好的效果!

            帶著修改后的代碼,懷著一絲忐忑九分坦蕩,灑家又直奔汽車廠測試去了。

            測試通過后,測試MM向我投來贊許的目光,我回之以笑意,心中實(shí)則感慨萬千。

            時(shí)間是世界上最為倔強(qiáng)的東西,它一往無前,絕不回頭。但是魯迅先生說:時(shí)間就像海綿里的水,擠一擠總會(huì)有的。

            MCU的能力也是如此,只要你懷著一顆精益求精的心,好好地設(shè)計(jì)代碼,比如對(duì)于頻繁中斷的ISR,執(zhí)行時(shí)間仔細(xì)優(yōu)化,就能很好地駕馭它,發(fā)揮它的潛力。

            套用魯迅先生的話,就是:

            MCU的性能就是海綿里的水,擠一擠總會(huì)有的!



            關(guān)鍵詞: 汽車總線測試 CAN通信 MCU

            評(píng)論


            相關(guān)推薦

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

            關(guān)閉