來源:學習web前端 發(fā)布時間:2019-03-30 17:10:29 閱讀量:1623
回想起這個bug,仍然讓我有些痛苦。作為一個程序員,在發(fā)現(xiàn)bug時,你學會了首先在自己代碼中找問題,或許在測試一萬次之后,你會把問題歸咎于編譯器。只有在這所有的都不起作用之后,你才會把問題歸咎于硬件。
這是我遭遇一個硬件bug的故事。
拋開別的不說,我曾為《Crash Bandicoot》寫存儲卡(讀寫)代碼。對于一個自大的游戲程序員,這就像是在公園里散步一樣輕松愉快,我認為只要幾天就寫完了。我中止調(diào)試六個禮拜。在此期間我做一些其他的事情,但我一直回來處理這個bug——幾天內(nèi)每天幾個小時。這個bug實在煩人。
那個工程師給我打電話了,他用著他的爛英語,我用著我更爛的日語,我們爭論一會。我最后說:“我給你一個30行的測試程序,讓你在動手柄的時候能夠 出現(xiàn)這問題。”他答應了。他向我保證,這是浪費時間,而他正在一個新項目上很忙,但因為我們是Sony很重要的開發(fā)者,他會試的。
第二天晚上(我們在洛杉磯,而他在東京,所以對于我來說是晚上而他是到了第二天),他給我打電話,不好意思的向我道歉。這是個硬件問題。
我還是沒有完全搞清楚問題到底在哪,但是我的印象中,從Sony總部的反饋聽到的是,如果將可編程計時器設置到足夠高的時鐘頻率,會影響到主板上時 鐘晶振附近的一些東西。這些東西之一就是存儲卡的波特率控制器,同時也設置手柄的波特率。我不是搞硬件的,所以對于細節(jié)我相當模糊。
但是主旨是主板上兩個獨立部分的串擾,以及手柄接口和存儲卡接口數(shù)據(jù)發(fā)送的結合在1kHz的時鐘頻率下會導致丟位,從而數(shù)據(jù)丟失,以致卡損壞。
這是我全部編程生涯中,唯一一次因為量子力學debug的問題。