一位知名的喜劇演員曾經(jīng)創(chuàng)造了這句流行用語──“我很不喜歡這種感覺!”(I hate it when that happens!!!)。我其實(shí)完全能夠了解那種感受。每一次當(dāng)我不得不去破解、調(diào)試或改善“別人的設(shè)計(jì)”(Someone Else's Design;SED)時(shí),我相信自己都說了這句話。
有一天,我的老板給了我一個(gè)任務(wù),要我去弄清楚一個(gè)基于VMEBus的處理器接口機(jī)箱究竟是哪里出錯(cuò)了。由于這是在1990年代那個(gè)桌上型電腦獨(dú)大的“黑暗時(shí)代”(Dark Ages),這個(gè)接口機(jī)箱中有一款摩托羅拉68010微處理器,并采用匯編語言(而非C語言、JAVA或HTML)進(jìn)行編碼。我們所做的事就是將兩個(gè)6RU機(jī)架高、以線繞連接且基于7400邏輯電路的客制化接口機(jī)箱置入一個(gè)5RU高的VMEBus盒中,并使其維持與兩個(gè)HP1000 Fast Fortran處理器的連接。
這個(gè)接口機(jī)箱表面平滑:前方的觸控面板用于執(zhí)行處理器的狀態(tài)顯示,并顯示從接口所記錄到的數(shù)據(jù)信息等。但這個(gè)接口機(jī)箱原本面臨的問題十分吊詭──想想,你如何能將10磅的東西放在只能裝5磅的袋子里?從封裝、布線、后面板的連接器、電源以及冷卻器看來都很正常。但問題是,為了盡量地節(jié)省機(jī)架空間等,設(shè)計(jì)者采用了超越其能力所及的匯編語言進(jìn)行編碼。
原來的接口僅建置了‘L’模式。新的VMEBus設(shè)計(jì)則同時(shí)建置‘L’和‘S’模式,使復(fù)雜度增加了4倍。在‘L’模式下,每125微秒從144bit的數(shù)據(jù)框架下提取DF和NV位元,使L模式成功地完成建置。
然而,'S'模式是一種新的編碼方式。這種模式則是每四個(gè)193位元、125ms提供一個(gè)DF和NV位元。測試此模式后發(fā)現(xiàn)無法順利運(yùn)作。我懷疑問題就出在以匯編語言編碼的邏輯電路設(shè)置。我后來打了幾次電話詢問才知道當(dāng)初的設(shè)計(jì)者已經(jīng)離職了,現(xiàn)在已經(jīng)沒人可回答有關(guān)他所設(shè)計(jì)的任何問題。
我只好開始研究匯編語言代碼,發(fā)現(xiàn)設(shè)計(jì)者對于所做的一切都進(jìn)行了完整的建檔操作。但有關(guān)匯編語言所要解決的最大難題通常都跟“子程序”(subroutine)語言有關(guān)。如果你看到布滿'JSR'和'RTS'的代碼,你可就很難追蹤到邏輯建置了。很快地你就會(huì)發(fā)現(xiàn),子程序讀取操作也需要利用一些CPU周期來執(zhí)行。而這就是在編寫匯編語言時(shí)用于進(jìn)行控制的關(guān)鍵參數(shù)。而處理中斷服務(wù)程序(ISR)就更棘手了,因?yàn)橹灰獠恐袛嘁话l(fā)生,ISR即隨時(shí)啟動(dòng)執(zhí)行。
最后我終于發(fā)現(xiàn),大部分用于尋找DF和NV的邏輯是透過ISR內(nèi)部所執(zhí)行的,每512微秒執(zhí)行兩次ISR操作?,F(xiàn)在我?guī)缀蹙鸵鉀Q這個(gè)問題了。我找到了Motorola Assembler手冊,然后開始增加執(zhí)行ISR所需的CPU指令周期,接著就發(fā)現(xiàn)其中一個(gè)ISR無法在下一次中斷發(fā)生前完成指令操作,因而不斷地耗用CPU堆棧中的暫存器,直至存儲器耗盡后死機(jī)。
實(shí)際動(dòng)手進(jìn)行修復(fù)并不簡單。我花了一個(gè)多月的時(shí)間重新建置ISR,使ISR內(nèi)部僅執(zhí)行關(guān)鍵的指令集,并建立了一個(gè)可立即儲存中間計(jì)算值的方式,以便使這些值也可用于ISR外部。
這些修改終于完成且經(jīng)測試過了,而這款接口機(jī)箱在那之后還用了好多年。我自己也對這一點(diǎn)成績感到相當(dāng)自豪。
-
處理器
+關(guān)注
關(guān)注
68文章
19313瀏覽量
230057 -
工程師
+關(guān)注
關(guān)注
59文章
1571瀏覽量
68549
發(fā)布評論請先 登錄
相關(guān)推薦
評論