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