于振南~我的大學 單片機到嵌入式編程

于振南~我的大學 單片機到嵌入式編程

前言:

樓主是湖北人,大學畢業6年了,回想起自己的大學,影響尤為深的莫過於 郭天祥和余振南了,正是這兩個人牛逼的經歷和學習教程,讓我大學過得稍微有點方向,不渾渾噩噩,現如今2018年了,回想起2010年時候的情景,莫大的感慨和感激。也希望後者大學能夠認真學習做學問 ,不要枉費了大學美好時光,雖然我自己也沒做好。

如果在大學,需要學習的是技術;那麼畢業後需要學習的就是金融。這是我到2018年年初才最終悟到的,花了我28年的時間。如下為個人原創博文,雖然主題是買房,但是更多的是對金融深度的宏觀分析和對貧窮深刻的認知,無論你是否為湖北人都值得看一下。IT技術+金融,才是一個IT 人應該具備的綜合素質。

貨幣戰爭:2018年適合在武漢買房嗎?(原創完整版)?

zhuanlan.zhihu.com圖標

正文:

大學下學期一個冬天,我開始自學單片機,慢慢進入痴迷的狀態。 期末將至,學習的熱忱更加高漲。我打算把我的假期投入到單片機的學習中去。

全身心地投入到單片機的世界裡,每天被一個個調試中的難題搞得焦頭爛額,水平是在一次次解決問題的過程中提高的。同時對於編程語言的學習也進入了狂熱狀態,有時在吃飯的時候也會想一些編程上的問題,或是掏出本子看看別人寫的常式。在別人看來,我是一個木訥的人,整天就知道想事情,不太多說話,而我卻生活在自己的生活之中,有自己的思想,感覺每天都能學到很多東西,這也是為以後的實戰作了一個知識上的儲備。

水平在慢慢的提高,然而如果只靠自己一個人的能力不會有大的長進。我現在只是覺得事情真的有一個機遇的問題。那天我正在看計算機方面的資料,盛中華看到後很驚訝,他沒想到六系會有人在自學單片機,算是志同道合,就開始一起學習。水平從此開始有了很大的提高,也告別了單槍匹馬的日子。

又過了一段時間,我從同學口中聽說了ACM一詞,當時我還以為是什麼演算法。後來才知道是「國際大學生程序設計大賽」,當天晚上我們找來系裡編程不錯的幾個同學,一共是六個人,開始商量參加ACM大賽。ACM是大學生程序設計的頂級賽事,從此我們開始成為一個團隊,在老師的指導下開始登陸各大學的ACM網站,大量地練題,為的是第一次參加ACM中國賽區的比賽得到好的成績。

為了進一步提高編程的水平,那個暑假我們沒有回家,一個教室,一塊黑板,幾台筆記本,搭建起了一個臨時的ACM實驗室。大家為一道道的題目冥思苦想,又在享受著解題後的那種快樂。後來比賽的日子近了,我們在中國ACM三大賽區都報了名,緊接著就是一輪輪的比賽。比賽的形式是網路比賽,由於我們自己還沒有實驗室,所以比賽場地又是一個問題。

這個時候就要說到我們的SUNWISE實驗室,這裡算是我們的家了,全校有一技之長的人都來過這個實驗室。也因為這個實驗室和ACM我們六個人才能一直團結在一起,直到今天。SUNWISE是一個協會,但又不同於其它協會,在工程訓練中心和我們的共同建設之下,它成為一個綜合性,跨學科,獨一無二的組織。軟體,網路,機械,電子等幾個部,讓大家共同學習,共同進步。

這個實驗室讓我認識了很多人,每個系都有我的朋友,感覺我不再孤單,有一大幫人來和我一起學習,我也會無私地把我的學習成果給大家,讓大家一起研究,一起進步。

大三上學期正值全國大學生電子設計大賽,這又是一次機遇,讓我認識了郭天祥,一個很有魄力的人。

電子大賽是要一連比賽四天四夜的,所以有的選手乾脆拿了被子來,在實驗室吃住。我相信我們能努力到最後的。

他們倆(郭天祥,杜勉珂)負責電路設計和控制,我負責人機界面設計。在設計中需要雙單片機來實現對液晶顯示器,鍵盤,印表機的驅動,還要負責與後面電路部分的數據通信(最重要的部分)。四天四夜的連續戰鬥,我們一直保持高昂的鬥志。我連續近百個小時盯著電腦屏幕,編寫我最龐大的驅動程序。永遠忘不了的是,在後面電路與人機介面進行介面時,通信出現了故障,這意味著兩個部分不能連到一起。後台主控單元不能正常工作,原因不知出在什麼地方。我真正地感覺到,比賽不只是技術的較量,更是一場心理戰,當出現問題的時候,應該用怎樣的心態來面對這一切呢。我常掛在嘴邊的一句話是「在平靜的心態下,都不一定能做出來,如果心急的話,就更不可能做出來了!!」我想我的這些經驗不僅適用於比賽,在以後的人生道路上也是同樣受用的。

比賽結束我們的作品要拿到哈工大測試,也許也有運氣的因素,我們測試的時候,一開機輸出了幾個數據,核心部分就莫名其妙地被燒毀了,只留下了一盤殘局。

其實成敗只是一時,經驗卻是受用終身的。

經過了四天的奮鬥,走出了全國大學生電子設計大賽之後,和一起比賽的許多同學都成為了朋友,現在還有所交往。也許我給大家的印象就是愛幹活,肯吃苦,所以馬上又進入了另一個比賽之中(「梟龍杯」空中機器人大賽),開始開發飛行器控制系統。每天泡在21號樓的4樓實驗室,有幾台電腦和一把躺椅作伴,生活單調,不過也很充實,每天都是在發現問題、分析問題、解決問題。我覺得人在實戰之中才能長大,只有在遇到問題的時候才真正知道知識的可貴。

又是一個個白天,黑夜……

經過一次次地調試,飛行器日漸成熟,經常驅車跑到很遠的地方去試飛,為了遠離市區,我們借用了軍方的靶場來試飛,看著飛行器在天空翱翔,飛出各種動作的時候,我們為它而由衷的高興,這裡面有多少人的心血啊。同時也認識了軍方的一些人,也多次受到他們的招待,感覺就是軍方的招待員真的很有意思,呵呵。

比賽日益臨近,我們開始最後的調試,還記得那是臨行前一天的晚上,老師和教練把所有的東西裝箱,我知道對整套系統最後的考驗來臨了。希望它能發揮正常。

在成都比了幾天,那天捷報傳來,我們的心中激動不已,幾個月的努力終於得了回報,我更加堅信那句話「真心付出,必有所得!」,這也將成為我繼續前進的動力。

其實,那個時候我真的很想隨比賽一同出去,想的是可以去看看女友,我能安心調試也有她的因素,但因為人數和經費的限制沒有去成,只有郭天祥一個人隨老師和教練同去。他去看了他女友,也代我向女友問了好,也替我買了禮物給她。

我現在只感覺我把時間大部分放到了比賽和研究上,卻冷落了她,真的欠她很多。我能做的只有定期的給她打打電話,問候一下。有的時候被事情搞得很煩,而在電話裡面對她的時候我還是會平心靜氣,那段時間心裡真的是很矛盾,生活也變得很糟糕。現在心裡的事情很多很亂,牽扯的事由也很多,心情也煩亂,在和她的談話中,會流露出些許,也許是我變了吧。

我感覺有一句話說的很對,那就是"能力越大,責任越大!"做完了飛行器,我回到了系裡,又回到了我的ACM集體。

這個時候ACM已不僅在我們之間流行,它如一陣微風,輕拂著我們的校園。一條條寫著「Program your world!!!」的紅色橫幅,映入眼帘,讓ACM大賽開始成為人們口中談論的話題。

經過了半年多的準備,在ACM競賽自動裁判系統在我們手下應運而生之際,在學校的支持下,我們盼望的HEU CPC(哈爾濱工程大學程序設計競賽)終於拉開了帷幕。我和我的隊友作為ACM的主力隊員也參加了這次的比賽。在宣布比賽開始的那一刻,我彷彿又找到了在中國賽區比賽時的那種感覺,憑著昔日解題的經驗,從簡單的小題入手,在不到兩個小時的時間裡我們連破數題,一直位於諸隊之首。在接下來的三個小時里我們聯手攻克剩下的難題,又解出兩題。而在我們要上交最後一題時,自動裁判系統系統宣布比賽結束,我落後了幾秒鐘,最後只能位居第二。

ACM真的是實力和策略的較量,這裡面蘊涵了很多人生的道理,我所領悟到的最重要的就是「肯拼才會贏」!!

我們仍會像從前一樣,團結在一起,為了ACM能夠走得更遠而努力。到目前為止,我們舉辦了系賽、校賽,在不久的將來我們會讓ACM走向全省、全國,乃至世界,當然這也需要幾代人的共同努力。

這一連串的比賽下來,我的確有些疲憊了。可這時正值兩年一度的全國大學生嵌入式系統大賽(Intel杯,Intel公司主辦)。為了系裡,我還是參加了。

我在想,做自己愛做的東西是一件很高興的事情,但如果在這些事情上加了」任務」兩個字的話,自己肩上的擔子就變得更重了。比賽就是這樣一件事,如同一場殘酷的遊戲,誰笑到最後,誰就笑得最好,遊戲結局的時候,那種空氣是很讓人窒息的。尤其是到最後的關鍵時刻,成功與失敗就在這一刻揭曉,感覺身上的擔子真的是很重啊。

時間依然在不停飛逝,過去已成歷史,末來仍是末知,我能把握的只有現在,讓我作一個無悔的自我。

于振南

哈爾濱工程大學計算機科學與技術學院

火車緩緩駛離了哈爾濱站,我們一行開始了奔赴上海的征程……

在經過了歷時半年的不懈努力後,7月12日,進行了Intel杯作品的最後聯合調試,在確認所有模塊及中央控制系統工作正常後,整套系統正式裝箱,準備13日和我們一同向著此次嵌入式大賽的賽場----上海交大出發。

在出發前的半個月的時間裡我幾乎沒有離開過21號樓,白天和隊友一同在實驗室進行模塊設計和系統測試,晚上常常是在一個小屋裡分析白天記錄下來的各種問題,尋找解決的方法。

哈爾濱夏季的夜晚是最愜意的,四周一片靜寂。沒有白天的那種嘈雜的環境,沒有困擾不休的那些瑣事,也沒有糾纏不清的那層人際關係。彷彿我正處在另一個時空,一切時間任由我來支配。這個時候我喜歡把音樂打開,這樣就不會覺得睏倦,也能讓我思路更清晰。這樣的夜晚時間過得很快,常常是在不知不覺之中,窗外就已經泛出了魚肚皮。這時才會想起該休息了,才會拼幾個凳子為床,然後很快就進入了夢鄉。

現在想起那一個個夜晚還很神往,緊張而又自由,尤其還有音樂,雖辛苦卻是一種享受。我失去她以後,一直是這樣獨處,唯有那些靜夜洗去心中的憂思,卻成就了一種鬥志。

12號晚上我回到了寢室,半個月沒有回來,我估計室友已經把我忘記了。

13號上午清點了所有的物品,包括作品、備件、工具等等。在與領導道別之後,隨同八系的另一支代表隊驅車來到了哈爾濱站,12:20正點奔赴上海。

一天多的時間在火車上渡過……

14日晚七點我們終於到達了上海。因為老師與上海方面的同事早有聯繫,所以我們一下火車,就坐上了汽車,直向閔行區駛去。只聽人說上海很大,直到現在走進了這座城市才真正感覺到它規模之大。車行兩個多小時,大約九點的時候,終於到了閔行區。車駛入上海交大校園,一路打聽最後來到了招待所,卻被告知15日起才能辦理相關手續。於是,我們只好在學校附近找了一家旅館,暫住了下來。

其實一路我並不擔心飲食起居,我擔心的是這一路顛簸,我們的作品能否承受的住,這也是對作品的穩定性的一大考驗。在八系的時候,我記得付教授曾經說過:「在學校調試出來的功能在現場不一定好使,在學校沒有調試出來的功能到了現場更不可能實現。」這句話說明了學生作品的穩定性還需要提高,因此在研製和調試的過程中,我一再強調系統穩定性。舉一個比較細節的例子,也比較誇張,在一個子系統的電路板上,為了防止焊接的可靠性,每一條導線都設有三個焊點,這樣就可以把導線牢牢地固定在相應位置,就算故意拽都拽不開,可謂用心良苦。這樣的一些措施在一定程度上保障了系統的穩定性,所以各個模塊到現在為止,儘管已經經歷了多次演示和測試,仍然可以正常工作。

我走進了旅館就迫不及待地拿出各個模塊進行簡單地測試。隊友說先休息,明天再幹活。我還是支持先測試一下,這樣我才能安心睡覺。最重要的是數據鏈路,這也是我最關心的一個部分,因為它是最容易出問題的。整個系統完全是通過GSM無線網路(就是我們平時用的簡訊網路)進行聯接的,由於哈爾濱和上海的地域差異,GSM網路的情況也不盡相同。於是我拉出天線,打開電源,在信號指示燈急促閃爍了幾下之後,開始進入緩慢閃爍的狀態,這初步說明模塊已經登陸了當地的GSM網路。模塊初始化完畢之後,開始自檢,如果成功會通過簡訊向我的手機報告。這時,我手機的簡訊鈴聲響了,接到的內容是「System Start!!!」,這說明模塊一切正常。我這才鬆了一口氣,安心地休息,準備明天對整個系統的測試和維護。

上海的夜晚很悶熱,空氣里水分比較多,在上海的第一個晚上就這樣過去了……

我們還在睡夢之中,老師敲響了我們的房門,我一看錶已經七點半了,於是急忙起床,洗漱完畢之後,隨同大家一起吃過了早飯,就坐車再次來到交大。交大把我們安排在東31號宿舍樓,於是我們馬上驅車來到了這裡。一陣忙活之後,我們所在的宿舍頓時成為了一個臨時的實驗室。

接下來就是進行正式的現場調試了。主要的調試內容包括流媒體伺服器、遠程無線視頻、中央控制平台、車輛防盜模塊、人身跟蹤模塊、家庭信息終端(後三個模塊均由我設計和研製,因此由我來負責調試)。

現場測試遇到的第一個問題就是,獲取上海交大的校園的GPS全球定位信息,這樣才能在中央控制平台的電子地圖上準確進行位置標定。要校準一個座標系統,起碼要知道知道三個GPS座標,為了更加準確,就需要實際測量當地的地理座標。這個重任就落在了我的身上。首先在校園地圖上標記了四個待測點,然後我就一手拿著地圖,一手捧著自製的GPS測量儀,開始按照地圖尋找這四個待測點。這活並不輕鬆,也絕非是在校園裡散步。交大的校園之大我算是領教到了,由於天公不作美,天氣陰沉沉的,嚴重影響了GPS信號的強度,跑了一下午,才標定了三個點。

功夫不負有心人,第四個待測點的GPS座標終於測了,沒過多久,中央控制平台的座標正確校準了,並已能標定我們的準確位置了。 第一天的調試工作到此為止,總體上還算順利。

對於第二天的測試我們進行了分工,我專門調試三個模塊,他們負責其它部分的測試。

由於三個模塊都採用了新型CPU,所以不論測試還是更改內部程序都很方便。另外,為了便於現場調試,我在設計的時候都預留了調試介面,從而使進度加快了許多。最後卻遇到了一個很棘手的問題,那就是人身跟蹤模塊的電池內部智能控制電路對電池自身進行了保護,功率無法輸出,需要用高壓進行激活。我利用專用智能充電器對它進行了長時間的充電,終於解決了這個問題。緊接著,一個問題又來了,車輛防盜模塊為了判斷車輛狀態,需要有一個座標差值計算,這與實際座標有關,於是我重操舊業,在樓下拿著GPS測量儀來回的走,來標定100米對應的GPS座標差值是多少。

接下來的兩天,主要是對系統的維護和對答辯材料的準備,比賽不光要看作品作得怎樣,還要看答辯的水平。

19日上午正式輪到我們了,我們提前把作品布置好,等待九點正式入場。由於系統需要實際的GPS座標,但現場的屏蔽效果太明顯,導致GPS信號強度極弱。於是,在現場老師的帶領下,我爬上了天台,把GSP天線吸附於最高的金屬物,這樣能夠增強GPS信號強度。接通電源五分鐘後,模塊順利建立了與衛星的聯接,獲取了現場的GPS座標,並成功通過GSM網路將座標傳回了中央控制平台。在作完了這些工作之後,我急忙回到了演示現場,開始進行作品答辯。

接著就是最為重要的環節----現場演示。我把室內模塊電源打開,首先演示中央廣播功能,就是中央向家庭信息終端通過簡訊息發送廣播信息,在終端上進行顯示。當初這部分功能在研製的過程中遇到了很多難題,最大的難題就是簡訊編碼,只要編錯一位,簡訊就不可能發出去,或是錯誤的;其次就是對於接到的簡訊的解碼,由於我們的系統硬體不支持Unicode(國際通用編碼方式)編碼,而現行簡訊息的中文傳輸是基於Unicode的,所以我對現行簡訊編碼進行靈活的變動,也就是利用現行短消息為載體來傳送GB2312碼(漢字國標碼)。

在中央平台發出信息之後,終端上卻沒有顯示。經過評委同議,我們在演示現場進行了簡單的排錯,最終排除了故障。接著後面的各項測試都很順利,比賽現場的方位也進行了準確的標定。

在演示了最後一個測試項目之後,整個演示過程全部完成了,在大廳休息了片刻後,我們便乘車回到了住處。

我們為Intel杯極力奮鬥過,並成功地進行了演示。我們捫心自問,毫無慚愧。而對於賽場上的一些其它的力量的操控,我們卻無能為力。

我們又在上海暫住了兩天,南京步行街、黃浦江、東方明珠塔等等,這些以前傳說中的名字,現在就在我的眼前了。

我們買了22日的車票,有幾個同學回家或是有事所以回去的路上不能同行,我原本也想直接回哈爾濱,不想回家。但得知母親近日身體有所不適,於是還是決定在北京下車,回家看看。

在家呆了些日子,待母親身體有所好轉,我便早早回到了學校,料理比賽的一些善後工作。同時也開始承接幾個新的項目。

日子一天天地過去了,仍然是忙忙碌碌。現在剛開學不久,不論怎樣,時間還是不停地向前飛奔。

在Intel杯中我積累了更多的經驗,也學到了更多的知識,我更加成熟,作事也更加沉著,想得也更加全面。我將所學用到了此次五四科技作品展中,得到了一等獎的好成績,我想付出一定會有回報,我堅信這條真理。

我現在正在努力向更高層次邁進,爭取保送研究生,進一步提高自己的能力和水平,加深對計算機系統的研究。

現在我一心想學到更多的東西,讓我繼續努力,我們大家一起來努力,一起提高我們的創造力,一起走進嵌入式系統的大門,這裡有最美麗世界。

公示出來了,心中的石頭終於落地了......

個性化保研之路是通向研究生大門的又一溪徑。

可以說,高中是我人生的一大轉折。在這一時期,我的學習成績有了驟然飛躍,奇怪地是我竟然開始覺得老師上課的進程有些慢了,同一個問題要講好幾遍。(也許這種感覺有些狂妄了,我只是不再習慣於老師手把手地教授。)所以那個時候什麼東西都喜歡自學。每天只管學自己的,作業也從來沒有交過。卻感覺到知識真正裝進腦子裡了。也許由於長期的這種學習方式,我也慢慢養成了看似叛逆不羈的心理。

初入大學,面對匿大一個校園有些茫然,不知要學些什麼,於是回歸課堂,算是為以後奠定一個基礎。其實,大一的時候我是一個名符其實的磕睡蟲,每節課聽不到十分鐘就困得不行了。所以學習效率極低。當然那個時候不會考慮學到的知識有什麼實際用途,因為還不涉及找工作和作項目。但學習單純是為了考試,感覺生活很無聊。我知道我為何上課總覺得困,就是因為我對它不感興趣。於是,我開始著手學習一些自己喜歡的東西。

我借了一堆C++的書,打算苦學習C++。學了一陣子後,我才發現這種東西不是像理論課一樣,背過了就行的,要掌握它是需要長時間的實踐的。於是,我買了一張C++的安裝盤,因為那個時候我還沒有自己的電腦,所以一有時間我就去圖書館三樓的電子閱覽室找一台機器來練習。剛開始那裡的機器還是免費的,後來改成5角一個小時,因為有的時候我在那一坐就是一天,所以這個費用也是一筆不小的開銷。考慮到有必要給自已配一台電腦,只好向家裡要錢。大二上學期我有了自己的筆記本電腦,從此我的實踐能力有了極速地提高。

我的筆記本配置不是很高,但卻是我學習上的好幫手。它陪伴我經歷了眾多比賽,尤其是在作Intel杯的日子裡,在最後的關頭,跟隨我連續工作了五天。所以,建議學計算機的同學,如果不是單純為了遊戲,而是為了學習,最好早些配一台適合自己的電腦,對自己的進步是大有好處的。上課學到的知識和實際技能有很大的距離,這就是導致很多人學習雖然很好,但在實踐能力上卻非常欠缺。學習好也許只說明一個人作事執著認真,但有時候光有這種精神是不行的。在工程訓練的時候我指導過一個同學作電子鐘,其實所涉及的東西都是學過的,但她就是作不出來。主要是她只迷信書本上的東西,不知靈活運用。不會自己查資料,不會自己寫程序,我想BAIDU她一定會用,C語言她一定學過,但還是不會作,這是什麼原因呢?所以告誡同學們,學習非常重要,但實踐更重要,因為我們不是為理論而活,養活我們的是實實在在的技術。(其實實踐和學習並不矛盾,我雖喜歡實踐但我也很重成績,希望大家不要走極端,只要實踐不講學習也是不對的。)

其實學習C++是一個很漫長的過程,我現在仍然在學習它,只因為它真的是博大精深。後來我又喜歡上了網路(絕非是網遊!),開始學習相關的技術,比如ASP.NET、JAVASCRIPT等。其實C++也有網路部分的編程,所以和這些東西是相通的,最後這些知識技能就融匯在一起,成為一個整體(我現在就正在作一個比較大的項目,就用到C++網路部分的一些東西,我想我如果沒有前期的學習,項目的這部分工作我作起來是有困難的。)。另外,我還學習了一些零碎的東西,只是因為片刻的興趣。我想大家有的時候會有一些小的抱負或小的興趣,比如立志學習JAVA、CPU等。但估計大多數人都是三分熱情,堅持不了多久。所以說,學習其實很簡單,難點在於堅持不解。

對於嵌入式系統(手機就是典型的嵌入式產品)的熱衷原於當初的一個念頭,只是無意間聽人在談論單片機,於是我開始對它產生了興趣。也許這只是我眾多小興趣中的一個,只想淺淺地了解一下,但以後的一系列事情讓我決定把大學剩餘的時間全放在它上面。先是電子大賽國賽,然後是梟龍杯、英特爾杯。尤其是後兩個比賽,讓我花了足足一年半的時間,在這一年半里我每天都泡在這些東西上,而且一直保持狂熱,每天都處在發現問題、分析問題、解決問題的狀態。我開始習慣了這種生活,非常艱苦,卻樂此不疲。大多數時候我失去了時間的概念,四五點睡覺是很平常的事,就是到現在我仍然是很晚才睡,所以有的時候我在懷疑我是不是處於某種病態之中,感覺生活方式變了。

有很多人說我的思維方式和別人不一樣,也被同學稱為我們班的一大怪人。也許這就是所謂的「個性化」,我不知道「個性化」這個詞是褒義還是貶義。只是有一種脫離群眾,有別於其它人的感覺。

個性化保研從遞交申請到結果公示歷時約一個月的時間。由於今年的政策的不斷改動,所以這期間有很多波折。首先是保送比例從原來的10%改為15%,這樣一來個性化保研的名額就能更多一些,再就是把文體生和管理類學生從個性化里去掉了,這樣個性化的所有名額就全部是科技人才了。但到答辯的時候,我卻發現原定的50個名額竟然沒有報滿,只有45個人。原本認為這45個人都可以保送,但直到今天公示才知道有9個人被刷掉了,只保送了36個人。看來個性化保研的原則是寧缺勿濫,個人實力的評定是很嚴格的,同時也很殘酷。

我現在已經決定跟系裡一位資歷很深的老師,在研究生的兩年里繼續嵌入式系統的研究。我現在最大的夢想是參加一次挑戰杯,我希望能遇到興趣相投的同伴,一同實現這一夢想。(Intel杯時的同伴有的去了別的學校,有的不再研究嵌入式系統,所以我要結識更多技術上的朋友)。

在大學的學習對我水平提高起很大作用的因素還有就是給外面公司作項目。也許大多數同學還沒有這樣的經歷。與校外的一些公司簽定項目合同,在規定的時間內開發出公司要求的東西,一般在項目中所用到的器件由公司來提供,並會提供一定的項目開發資金,在項目成功結束後當然會得到自己就得的報酬。現在我正在為大慶一家石油公司作項目(基於GPRS網路遠程環境監測系統),難度很大,但對自己是一個絕對的鍛煉。以前也作過一些項目,但不像這次這樣龐大,在這次的項目第一次用到ARM(這種CPU在手機用得比較多),標誌著技術又上了一個台階。一共要歷時2個月的時間,現在已經過去1個月,GPRS網路鏈路和伺服器端數據編解碼都已完工。這裡有一個最大的難點,就是攝像頭,用來獲取監測點的實時圖像。同時有很多細節,讓我非常頭疼。不過把這個項目作完後,我這個學期的學費估計就差不多了。

在我的大學裡我實現了很多夢想,但我卻遠離了我的最愛,如果給我一個重新選擇的機會,我仍然會選擇像我現在的這種大學生活。現在沒有了她,全我仍會把我的道路走到最後,也許這條道路會非常艱難,但我堅信在那盡頭會有無比的輝煌,我也堅信最後她還是會回到我的身邊,她是最好的。

我現在感覺在大學裡,處處是機遇,關鍵在於我們能不能抓住它。自己的一個小小的興趣,如果不斷堅持,可能會改變人生的道路。不要讓自己一閃念的靈感輕易溜走,抓住它,也許它就是新生活大門的鑰匙。

記住作任何事情都不要輕易放棄,放棄它,失去的也許不只是它。

初到北京幾天,按照預先計劃,去北京Intel公司進行面試。

北京Intel公司位於中科院計算所附近。一下午先乘輕軌,又換坐汽車,到達Intel公司已是傍晚時分。我進入融科中心,直接來到了八樓----Intel辦公地點及實驗室的所在。

在前台登記完畢,隨後貼上了專門的標識,在工作人員的帶領下我走進了Intel。首先參觀了硬體測試實驗室。剛進入其中,心中不禁一顫,這才是真正的硬體實驗室。實驗台上放滿了用以進行測試的儀器及電路板,這一幕是我在學校實驗室所沒見到過的。最吸引我的是那幾塊Xilinx的個頭很大的FPGA晶元,當時我心中在說「太帥了」。後來經過詢問才知道,他們在用FPGA來測試Cache。

我被安置在一個較小的屋子裡,不一會兒兩名Intel的工程師走了進來,落座之後,正式的面試便開始了。

「請你講述一下你Intel杯作品的具體情況」

於是,我開始對作品中的各個部件進行詳盡的剖析。不停在書寫板上圈圈點點,為得是讓他們能夠聽得更明白。從控制器、電路、數據鏈路、感測器到操作系統等等,我力圖講到精練易懂。其實我心中一直在擔心一件事情,就是他們會在我講述的過程中,在電路方面問出一些過於專業或是要求進行量化的問題,還有就是問一些FPGA方面的問題。因為我知道在Intel公司里大多數時候都是在作電路,FPGA使用得很頻繁。而這些工程師在這裡工作起碼也有五六年,所以他們是這方面的權威了。這樣的話,就如同雞蛋碰石頭。

果然,他們開始發問了。

「你這個系統中控制器外部時鐘多少?控制器有多少引腳?」

「24MHz,44P」

「你知道我們這裡頻率上到1GHz是什麼樣子的嗎?我們這裡有的晶元是1000多個引腳,你覺和44腳有什麼本質上的區別嗎?」

我知道他有可能會問這樣的問題,前面的第一個問題就是個引子。頻率上到那種頻率後在信號完整性會出現問題,這裡用到的晶元顯然比我用的晶元規模要大的多。我想我不能正面去回答這個問題,否則他們一定還會順藤摸瓜問出更細的問題。我要把話題再拉回到Intel杯作品上來。

「關於時鐘頻率,在我們的作品中,核心CPU的頻率是800MHz,我們在作核心部分的時候就是從板級開始作的。關於晶元引腳的問題,這裡的晶元和作品中的控制器根本不是一個概念的東西,如果在作品中用1000多個腳的晶元來作控制,顯然不合適。」

……

一翻翻地提問,我又一次次地作出回答,到後來,問題開始回到他們的本行了,很多是關於FPGA的,這些並非我的強項,我只能儘力作答。

幾個小時過去了,他們最後問道:

「你想來這裡研究哪一方面?」

「ARM」

「呵,Intel沒有ARM了,Xscale已經賣掉了。」

「FPGA」其實我對FPGA也不是很熟悉,這裡彷彿一種投其所好的意味了。

「好的,就這樣吧。」

在Intel公司的面試就這樣結束了,工作人員把我送上了電梯,送我出了融科大廈。我獨自走了一段路程,此時天色已經較晚。回頭看看高高懸於空中的Intel的標誌,霓虹閃爍。這就是中關村的夜景了,中國最具IT味道的地方。再往前走一段,是AMD的辦公大廈,標誌同樣高懸在上。心中想,他們誰將是處理器的霸主呢?呵,我似乎有點多管閑事了,我不禁自嘲。

奮鬥

次日,接到Intel的電話:

「我們這裡有一題目,就是將原來用C寫的演算法,轉成硬體描述語言,不知你有沒有興趣?」

「也就是演算法的硬實現吧,我很感興趣。」以前想過硬實現方面的問題,沒想到竟與Intel的題目不謀而合。

「那好,現在我們會發一道題目到你郵箱里,如果你能在一個星期內完成,我們將進一步規劃你實習的事宜。」

「好的,謝謝您。」

很快,我的信箱里就收到了一封新的郵件。

在題目中,包含了上千行的C++代碼,描述了一個用於統計計算的演算法。其實剛拿到代碼,我頭就有點暈,不知道它具體實現的是什麼功能。不過不管它的功能如何,按照題目的要求,都要保證在轉為硬體描述語言後要使輸出相同的結果。所以我第一步要作的是先把代碼編譯一遍,看一下輸出。

在它的源代碼文件夾下有一個makefile,這就需要在linux下進行編譯。我找了一台裝有linux的計算機,對代碼進行了成功編譯。但當我把它運行起來的時候,我不盡吃了一驚,也感覺莫名奇妙----它竟然沒有任何輸出。我離開了座位,開始踱來踱去思考這個問題。可以是當我再次看屏幕的時候,發現了一行「run ok!」,隨後是幾個數據。我的天!這個程序運行了足足有三分鐘啊。區區一千多行代碼竟然運行了這麼長時間。我的第一感覺是,這個演算法一定很複雜,運算量一定很大,看來Intel是在故意為難我。

這樣足足一個星期的奮鬥開始了……

第一步是把現在的用C++寫成的演算法鑽研透,能夠作到真正掌握它,知道它每一個細節。所以我花了整整一天的時候來研讀演算法。程序中除了與演算法相關的內容,還有一些是調用linux系統的一些API,來實現對程序運行時的監控,用來模擬硬體模擬。這些代碼是與演算法無關的,因此可以把它們剔除。

剩下代碼有很大一部分在描述一個數學模型,剛開始看那可是一頭霧水。其實我最發怵看別人的代碼,有一種自己的思想受制於人的感覺,多半時候都看不下去。但現在代碼就擺在面前,還是要硬著頭皮看。我想,我要想把這個演算法看懂,我首先要把這個模型搞清楚。於是決定上網google一下。

Google…. Google…. Google….

呵,還不錯,搜到了兩個資料,雖然是E文的,但還算是自然語言。仔細研讀了一個上午,終於算是有了個眉目。

這回再回到那一堆代碼里,感覺才不那麼抽象了。一看又是大半天,總算對它八九不離十了。

我才明白它為什麼要run那麼長時間了,也才領悟到為什麼要進行演算法的硬實現了。程序的功能是進行一種統計性的運算,設定一個動作重複400000000次,最終統計它各種情況出現的概率,這漫長的三分鐘就花在這個400000000次上了。而如果把這些耗時很多的演算法作成ASIC的晶元,那就將會從數量級上縮短運行的時間,最終實現所謂的HPC(高性能計算)。

要對現有代碼有很深刻的了解,我想我有必要把它親手改寫成純C的,並且保證輸出結果相同。這樣不僅能夠證明我已經掌握了該演算法,也從一定程度上說明最終轉為HDL的可行性,同時其實也降低了轉換的難度,從面向對象的C++到面向過程的C,再從面向過程的C到用於描述的HDL,此時我已經站在C的層次上了,我有信心完成從C到HDL的轉換。

我裝上了久違的ISE,還是ModelSim,這些軟體在Sunwise的時候都接觸到過,現在又拿來安裝,還算比較親切,不過還需要溫習一下。於是,又從網上baidu了一些相關資料,熟悉了半天的開發軟體,感覺ISE的環境確實比Altera的MAXPLUS和QUARTUS要好,還有就是重新見識到了Modelsim的強大。OK,欲善其事,先利其器!

其實從C++到C,再到熟悉IDE都算簡單,最難的部分在於HDL。對於VHDL,其實我也是個二把刀,原來學過的那點皮毛到現在已經剩不下什麼了。但對於基本語法和描述結構還在腦子裡。所以我打算來一個星火燎原,憑著這點僅剩的零星知識,編干編學,估計這樣的學習效果更好呢。

畢竟這裡不比在哈爾濱,紙質的資料有限,所以我又從網上下了些HDL的教程,就這樣看一段C的函數,查一查資料,編一些代碼。如此重複,幾百行代碼不到一天的時間已經轉換了80%了。其實,大部分和底層電路的關係不是很緊密,轉換的過程考慮得只是邏輯實現方式的轉變。

演算法的邏輯是80%,而剩下的20%是什麼呢?那不和硬體緊密相關了。也就是說,這20%的邏輯轉換過來,硬體上是不能直接實現的,這就需要一個折中的辦法了。用現有硬實通過一定的手段間接對這部分邏輯進行實現。

在C中,我們在進行數學計算時,會經常遇到浮點小點,也會經常遇到一些數學上的定義,如Sin、Cos等等,這個時候我們通常不會去自己實現這些函數,而是直接調用數學庫。對於庫內的具體實現我們是不關心的。但在HDL中是不能對浮點直接進行計算的,同時也不支持相應的庫函數,這就是一個最大的難題。這如同一座火焰山,讓我無法逾越,到最後實現我足足花費了三天的時間。

首先要攻克的第一個難題就是對演算法中的一些涉及三角計算的函數的實現。剛開始我的想法是採用麥克勞倫展開,然後取前四項之各,對三角函數進行逼近。但我轉眼又想,這樣作的計算量是很大的,因為展開式中會有一些階乘項和指數運算,也許我可以找到C的數學為的源代碼,那裡面或許會有更好的演算法。Windows里是不太可能了,還是到開源的linux里去找吧,經過千辛萬苦我終於找到了一些三角函數的源代碼,但打開一看,我就快吐血了----原來數學庫里的函數都是用彙編寫的,暈死!我還是回到原來的方法,我先用C對麥克勞倫展開進行實現,調試成功後再轉為HDL,然後在模擬中看函數的輸出波形,以保證函數的正確。

在C里調試,轉為HDL,模擬,看波形,再修改,模擬……這個過程重複了幾十遍,一個個的函數在模擬中通過,離最終整體的演算法實現又進了一步。

此時,最大的困難就是浮點運算了。如果要我設計出一整套浮點運算庫,這顯然不現實,因為我只有一天半的時間。於是,我需要去詢問Intel是否可以提供現成的浮點運算庫。上午我的E-Mail發了出去,同時在E-Mail裡面也附帶了我現階段的研究結果。下午的時候,收到了來自Intel的郵件,裡面首先對我的研究結果進行了肯定,另外對於浮點運算庫提供了支持。

他們提供了一個現成的德國人寫的浮點庫,專門為FPGA設計。我喜出望外,最大的難題迎刃而解了。呵……

這個庫很大,我要把它加到我的程序里來,我先要把它編譯成Library。也許是我的計算機太慢,足足花了一下午的時候,才把整個庫編譯出來。

接下來一晚上的時間,先對這個庫進行一個簡單的功能上的測試,看看它是否計算正確。一項項地進行測試:浮點的加、減、乘、除、方根等很多部件均通過測試,在完成了對庫的測試後,我又寫一個測試報告,上交給了Intel,並告知他們,那個演算法現在已經可以在FPGA上運行了。

到此,我才得到Intel的承諾,同意我進入其中實習了。

其實那些Intel的工程師真的是已經工作了五六年的老手了,我承認在經驗上確實不可同日而語。其實後來聽到了些消息,這道題在Intel內部作起來也是一個較大的工程,那些工程師也在吃驚我能如此快的完成。呵,這也為我增加了不少的信心,爭取進去之後能有更好的表現。

一天又一天......

思考,眺望,繼續......

在中關村已有近三個月,記得剛開始還會在樓里迷路,而現在這裡也變成了一塊熟地,出出入入也都變得很自然。只是有些地方我至今仍未能獨自進入,比如HWL(Hardware Lab)等,其實也可以理解,畢竟最昂貴的設備都在裡面,如要進入一般要有工程師的陪伴。想想當年,在學校作電子的時候,作電路隨心所欲,沒有半點章法,燒得晶元不計其數。晶元就是硅,就是沙子,估計那些晶元堆起來也能成一片沙灘了。最深刻的一次是在21號樓,電路短路,結果整層都跳了閘,還好沒造成什麼後果,汗啊。在這裡就不一樣了,上次經理給我介紹一個多層的板子,說是一個CPU的原型,是研發中心的工程師花了三年的時間作出來的,造價達到10萬美元。我頓時為之一驚,這板子是金的呀?!現在很少燒晶元和板子了,但還是怕有所閃失。好不容易買到的Vertex5,還是謹慎為好,所以出入硬體實驗室是有權制限制的。

感覺這裡的安全作得很到位,電腦上絕不允許安裝非法的軟體,否則會被系統檢測到,會不停地彈出提示要求將軟體卸載,我現在就忍受著這種煎熬。系統竟然把MSN認成是非法軟體,要知道在這裡不讓上QQ,YAHOO通等通訊軟體。如果我再把MSN卸了,我真就成了與世隔絕了。不光是我在受此煎熬,其它實習生也在時常抱怨。研發中心旁邊不遠就是Microsoft大樓,我不知道微軟的人看到Intel這樣處理MSN會是什麼表情。呵...但正所謂百密終有一疏,雖然上到經理,下到保潔員都有自己的ID卡,分為blue badge、green badge等。我就是個blue badge,實習生的ID都是藍色的,而不同顏色的ID許可權是不同的。但還是發生過外人乘機進入公司,盜取幾台筆記本的事故,關鍵不在於筆記本的硬體價值,而在於存於其中的重要資料,如果被盜的是高級主管的筆記本的話,估計損失就不可估量了。曾經在入職培訓的時候,主講不斷地重申「技術是Intel的生命,請大家嚴格遵守保密協議」。

再說說我的最愛----pantry(食品間),裡面有餅乾、飲料(有我最愛喝的紅茶,呵)、咖啡、茶葉等等。每天早上來到公司,把包往座位上一放,就先到pantry拿一罐紅茶,然後才會開始一天的工作。工作累了,乏了,也會來pantry坐一會,煮一杯咖啡,眺望一下遠方。我最喜歡晚上從這裡眺望,看到窗外的夜幕,看到一片的燈火輝煌,看到那城市的血液在不息流動,頓時感到心曠神怡,感覺自己站在中關村的最高處,一切盡收眼底。有的時候面對這夜幕下的繁華,也會不禁沉思。每一個人都是一個分子,每一輛車都是一個細胞,每一條街道都是一根血脈,每一座樓都是一個結點。剛進來的時候有人說,以後可以在這裡工作,就在這裡安家了。看著這一切,感覺都變得現實起來,以後要來充當這裡的一個分子,難道只滿足於一個分子?

還是pantry,那天有通知說,下個星期一開始pantry里要有水果了,而且每個星期都會有不同的種類。看到這一通知,腦子裡浮現出了誘人的水果的畫面,就開始盼啊(別笑話我沒出息,不光我一個人在盼)。星期一到了,pantry的冷飲櫃的下面那層多了一個大玻璃盆兒,可是裡面是空的。這裡作事情一向按計划行事的,可是水果哩?!回到位子,問旁邊的人,回答「水果啊,有啊,不過就幾個蘋果,被人搶沒了!」。唉,看來是我下手晚了。不過,還好,還好,紅茶是喝不完的,呵。

說點正事。我在這裡的題目是件頭疼的事情。sin(10.45)=?

這個問題小學生都能回答出來,一按計算器就出來了。但在我手裡卻作了整整兩個星期的時間。為什麼?因為要用電路來實現它。10.45是浮點,所以必須知道浮點的表示形式。要用向量的方式來表示它,而且還會涉及到規格化等很多細節。記得當初學計算機組成原理的時候浮點數這一部分我就沒學明白。還好,咱還不算笨,在網上找了幾篇關於IEEE-754的論文,才基本把它搞明白。浮點的表示形式很簡單,難點在於以向量形式表示的浮點的運算,浮點的加、減、乘、除、開方、取余等等。其實這裡面有些運算有現成的庫可以借用,但是拿到這個浮點庫之後,問題又來了,這個庫是否真的好用呢?計算準確度如何?精度如何?能否對無窮大,非數這些特殊情況進行處理?這些指標都是未知的。

所以拿出了一個星期的時間來對整套浮點庫進行嚴格測試,由於要對每一個運算部件進行大數據量測試,只有對所有數據的計算結果都與期望值吻合的時候才能說明此運算部件可以通過測試,否則就說明它有bug,需要對其進行改善。最終的測試結果令人比較滿意,這個浮點庫的各項功能測試全部通過。有了浮點庫的支持,以後的工作也就容易的多了,不過仍然有不少難點和細節需要解決。從小的部件作起,逐漸搭建起功能和結構更加複雜,規模更大的電路。這裡的指導老師一開始就說「到以後規模大起來以後,估計時序會變得很頭疼」,現在確實是這樣,錯綜複雜的時序有時候把腦子搞得迷迷糊糊,這個時候我就會把顯示器關上,把問題記錄在本子上,畫個圈,然後放下筆,到pantry去休息一下,看看電視,喝點東西,要不就是到外面轉轉,等頭腦清晰了才會回來。

其實一直都是一個人在這邊作,身邊的同事一般也都是在忙自己的事情,很少相互過問。自從第一天過來,就是這樣一天天的過著,如果沒有什麼討論或聚餐等活動,一天也說不了幾句話。每個月都會有新的實習生進來,他們也是通過幾輪面試,最終才進來的,就像幾個月前的我一樣。這裡的實習生有很多,不過一般主要是從清華、北大、北郵等這些學校招來的,剛開始的時候,我一說我是哈爾濱的,同事會很吃驚,因為很少有從其它學校過來的。

這天,又新來了一個實習生,和對待其它實習生一樣,中午經理把大家叫到一起,到樓下的餐廳吃飯,來表示對他的歡迎。吃飯的過程中我倆交談起來:

「同學,你叫....」

「張XX,北郵的,你呢?」

我自報家門。

「你哈爾濱的呀,我家就是哈爾濱的!」

大吃一驚。

「哈爾濱哪個學校?」

「工程的。」

「我去,我本科就是在那讀,校友啊!」

「世界真小呀,真是!」

於是我們聊得更起勁了,經理在一旁眼瞅著插不上話,呵。

談話中,得知他工程畢業後隻身到了上海,在那工作了一兩年的時間,由於不滿足於現有的工作,於是決定考研,但是受到了家裡的反對。可想而知,家裡要他有個穩定的工作就知足了。不過,最終他還是考上北郵的研究生。現在要畢業了,因為中途工作的原因,年齡比一般的學生偏大,為了以後的前途著想,需要一份實習的經歷。於是,他才把簡歷投到了這邊的Intel研發中心,幾經面試,同時也扛著學校的壓力,進來成為了一名實習生。

有時候在想,人與人的關係真的很微妙,有的時候原本素未平生的人一轉眼就會相遇在一起,剎那成為朋友;有的時候熟悉的人,也會一下子變成陌路。每個人有自己的圈子,生活就是在每個人的圈子裡跳入跳出,一切都在變化。結論就是:每個人都在為自己而奔命,都不易啊。呵,有點像在回答一道論證題。

每天從公司回到住處,都喜歡在外面走一走,想一想這一天所作的事情,看一看身邊路過的行人,聽一聽人們依然在不停忙碌的聲音。

戴上耳塞,挑幾首自己最喜歡的歌,嘴裡也會不時的哼唱幾句,這樣慢慢晃啊晃。

一天又一天,明天又是新的一天。

總結:

技術這個東西,錯過了,再想花時間精力去學就很難了,但是金融的話,卻可以利用業餘時間不斷的了解和認知。都說做實業不如做金融或者炒房,這是為什麼呢?下面是個人原創博文深度解析。

貨幣戰爭:2018年適合在武漢買房嗎?(原創完整版)?

zhuanlan.zhihu.com圖標


推薦閱讀:

TAG:單片機 | 51單片機 | 嵌入式開發 |