我雖然有幾年的硬件開(kāi)發(fā)經(jīng)驗,然而在這條路上依然是一個(gè)還沒(méi)有踏上社會(huì )的學(xué)生。項目經(jīng)驗和社會(huì )閱歷也恐怕一點(diǎn)不算豐富,所以凡想在此文中獲取高深的人生哲理與職業(yè)箴言者,那我懇請您趕緊不要看下去,如若不然,我恐怕要受到您的譏笑——此文僅獻給那些剛剛踏上硬件之路和還在徘徊的同學(xué)們,在此我簡(jiǎn)要的記錄了我的學(xué)習經(jīng)歷和其間自己所獲的一些心得,以幫助初學(xué)者少走彎路。 我深知對于一個(gè)初學(xué)者來(lái)說(shuō),身邊有一個(gè)能手把手相授的老師該是多么幸福的事情,老師一句不經(jīng)意的話(huà)可能我們初學(xué)者要花上幾天甚至是幾個(gè)月的時(shí)間去思考和驗證。遺憾的是,我們身邊并非總有這么一位老師。所幸的是而今網(wǎng)絡(luò )發(fā)達,這致使我們不得不經(jīng)常求助于網(wǎng)絡(luò ),網(wǎng)絡(luò )上豐富的個(gè)人經(jīng)驗是非常值得借鑒的,我們能從一些文章中悟出一些東西,為我所用,或者從中感受精神動(dòng)力。 借此機會(huì )我想介紹一下我曾經(jīng)的工作團隊,因為他們對我影響極大。團隊有四個(gè)人,其一是擁有11年工作經(jīng)驗且已擁有自己專(zhuān)利的高級工程師(我習慣叫他二導,他是我為什么在團隊的原因),一個(gè)是擁有5年經(jīng)驗、熱心腸的工程師,還有兩個(gè)分別是電源和視頻方面的專(zhuān)家和元老級人物。耳濡目染,自己漸漸的對硬件發(fā)生了濃厚的興趣。從單片機,FPGA、SOPC硬件的搭建以及軟件編程,以及現在正在努力研究的ARM,我是憑著(zhù)無(wú)限的熱情來(lái)做的。 但熱情不是唯一的原因,另一個(gè)原因是試驗室提供了便捷的學(xué)習環(huán)境。這里有現成的winbond 51單片機、有偉福仿真器、advanced labtool 48uxp萬(wàn)能編程器,一臺12萬(wàn)的示波器,自己買(mǎi)了個(gè)萬(wàn)能板。學(xué)習階段時(shí),找本書(shū)就能在上邊進(jìn)行試驗了。從簡(jiǎn)單的led閃爍、數碼管顯示、pwm到中斷、串口通信(單片機與單片機通信,單片機與pc通信)、I2Ceeprom讀寫(xiě)、A/D轉換、溫度的測量等。當時(shí)令我神魂顛倒的是每一個(gè)試驗經(jīng)過(guò)資料的查找、程序的編寫(xiě)以及調試、再到后來(lái)問(wèn)題的解決,那份成就感與喜悅之情,相信只有經(jīng)歷過(guò)的人才能夠體會(huì )。正是有這份熱情和愛(ài)好,我常常在實(shí)驗室呆上十二、三小時(shí),通常是晚飯在食堂吃了后直接到驗室,晚上9點(diǎn)半回宿舍。雖說(shuō)那時(shí)候沒(méi)有做過(guò)什么大項目,但是這每一個(gè)小小的實(shí)驗都是我知識積累過(guò)程中的點(diǎn)滴,有了這積累,之后我才能涉足更大的項目。 剛進(jìn)實(shí)驗室的時(shí)候,二導就給了我一塊開(kāi)發(fā)版,是Altera公司的nios ep1c20 cyclone系列開(kāi)發(fā)板,當時(shí)是以大學(xué)計劃的名義買(mǎi)的,5000元人民幣。于是就開(kāi)始了我的FPGA學(xué)習之路。之前學(xué)習過(guò)verilog,只停留在純粹的理論階段,編幾個(gè)小小的程序,用quartus-ii自帶的仿真軟件進(jìn)行一下仿真就ok了。 用仿真軟件進(jìn)行仿真,往往能夠得出你所想要的結果,但是一旦下載到芯片里邊運行,問(wèn)題就會(huì )接踵而至。萬(wàn)事開(kāi)頭難,我做的第一個(gè)實(shí)驗是點(diǎn)亮led,自己編寫(xiě)程序(幾行而已)、編譯、引腳分配、仿真、然后就用jtag下載線(xiàn)連接開(kāi)發(fā)板和pc,將sof文件下載到芯片,F在想起來(lái)這是多么簡(jiǎn)單的幾個(gè)步驟,但是對于當時(shí)的我來(lái)說(shuō),花費了相當的時(shí)間和精力來(lái)查找資料和埋頭反復實(shí)驗。特別是引腳的分配,文檔上只說(shuō)需要這么做,那為什么要這么做呢?當時(shí)沒(méi)有過(guò)多的想法,只想看到實(shí)驗的結果,有了結果我就有了無(wú)限的成就感和高漲的熱情,所以當經(jīng)過(guò)努力,第一個(gè)FPGA實(shí)驗里的led終于按照意圖動(dòng)作的時(shí)候,那種激動(dòng)與當初學(xué)習單片機時(shí)得以實(shí)現led閃爍的情形如出一轍。 我做實(shí)驗的一個(gè)慣例同時(shí)也是一個(gè)經(jīng)驗就是邊做實(shí)驗邊看書(shū),在實(shí)驗中發(fā)現問(wèn)題,遇到不懂的問(wèn)題或者原理在查找相關(guān)的文檔。我習慣動(dòng)手,如果讓我坐在實(shí)驗室看上1天的純理論書(shū)籍,而不讓動(dòng)手試驗,我想我的腦袋肯定會(huì )爆炸,正因為沒(méi)有這樣看過(guò)書(shū),所以這腦袋也一直健在。到后來(lái)學(xué)習ucos嵌入式操作系統我也采用了這個(gè)方法,我把它叫做“階梯成就感”(實(shí)在是寫(xiě)這篇文章的時(shí)候突然覺(jué)得這個(gè)詞語(yǔ)非常貼切,臨時(shí)杜撰的)。抱著(zhù)這種熱情,后來(lái)一點(diǎn)一點(diǎn)地深入學(xué)習FPGA,一些常規邏輯電路的設計,包括邏輯門(mén)電路、數據選擇器、編譯碼器、加減乘除運算器、移位器,到后來(lái)的稍微復雜的電路設計,如FIFO、數字跑表、頻率計、狀態(tài)機、交通等的控制、卡式電話(huà)計費系統以及UART等。 這些試驗當時(shí)我都是采用的verilog語(yǔ)言實(shí)現的。初接觸FPGA時(shí)本想學(xué)VHDL,那時(shí)的同學(xué)都用verilog,為了與他們討論問(wèn)題的方便,就改學(xué)verilog了。一學(xué)不打緊,慢慢發(fā)現自己深深地愛(ài)上了verilog,對于我來(lái)說(shuō),它無(wú)疑更適合我。這也是我要推薦的一個(gè)經(jīng)驗,那就是多看看你周?chē)娜擞玫氖鞘裁垂ぞ,他們用的工具往往不是你最喜歡的或者不是當前最廣泛最流行的,但你若要和他們交流討論問(wèn)題,那還是遷就一下,和別人所用工具一樣,交流起來(lái)也會(huì )順暢方便。到實(shí)驗室后,因為實(shí)驗室的員工都用偉福的仿真器,所以軟件當然還是用偉福提供的。偉福的軟件我認為不怎么好,只支持匯編,比起大名鼎鼎的keil c51遜了一大截,但除非你想等到自己有問(wèn)題不會(huì )的時(shí)候周邊竟沒(méi)有人幫助你,不然在前期還是選擇偉福的軟件方便溝通。再后來(lái),經(jīng)過(guò)自己的摸索和向身邊的工程師們請教,偉福用很熟悉了,匯編也有了自己的一套,這時(shí)候我開(kāi)始在偉福里邊嵌入keil,用c語(yǔ)言來(lái)寫(xiě)程序,但調試的時(shí)候用偉福軟件還是有缺陷,比如不能夠單步執行等。所以再后來(lái)我就下載了keil c51軟件,從此以后便正式地在keil的開(kāi)發(fā)界面下寫(xiě)程序了。當然仿真的時(shí)候也可以在keil環(huán)境下用偉福仿真器,我想偉福在制造自己產(chǎn)品的時(shí)候就已經(jīng)考慮到這點(diǎn)了,他們的一些產(chǎn)品肯定要考慮兼容主流軟件keil的。用了keil C51后就不想用偉福編譯軟件了,同樣的用了c寫(xiě)程序后,就不想用匯編了。但是匯編是每一個(gè)硬件研發(fā)工程師們必備的,匯編有c不可企及之處,但有時(shí)候還非用匯編不可。匯編的運行效率高,寫(xiě)起來(lái)很是煩瑣,煩瑣規煩瑣,在某些特定的時(shí)刻,匯編還是發(fā)揮了它不可替代的作用。比如在將usoc移植到單片機的時(shí)候,與處理器相關(guān)的程序還真是必須用匯編來(lái)完成的。 再后來(lái),學(xué)習sopc。從最小系統硬件平臺的搭建,到簡(jiǎn)單的led閃爍程序的編寫(xiě),到sof文件在芯片上跑起來(lái),看著(zhù)led的亮與滅,心中熱情澎湃。每一次接觸新知識都有一種發(fā)自?xún)刃牡募?dòng),每一次接觸的新東西我都從最簡(jiǎn)單的led閃爍開(kāi)始,從單片機到FPGA到sopc再到ucos,每天一個(gè)小小的進(jìn)步能讓我燃起對工作的熱情,只要有這每天小小的看得見(jiàn)的“階梯成就感”,就能激發(fā)我對更多知識的追求。在此期間本人比較欣賞Altera公司推出的可編程片上系統即sopc,它解放了我們搭建硬件系統的煩瑣,僅僅需要按照需求在系統里邊加上自己的IP核和一些必須的外設。Altera公司或者其他的第三方公司已經(jīng)為我們提供了性能和功能很完善的IP核,我們所要做的只是將這些IP核加入到我們的系統里完成我們需要的功能。硬件系統完成后,需要在A(yíng)ltera公司提供的nios IDE環(huán)境下對硬件系統進(jìn)行軟件編程,在這里,完全用c語(yǔ)言來(lái)完成所需要的功能。與前邊學(xué)習單片機、FPGA一樣,第一個(gè)實(shí)驗還是led閃爍,然后慢慢的轉向一些比較復雜的功能設計上去,也無(wú)非是實(shí)現以前用verilog實(shí)現過(guò)的一些功能。兩者的區別是:一種完全用verilog語(yǔ)言來(lái)實(shí)現全部功能;一種需要先用sopc builder搭建硬件系統,然后在nios ide中進(jìn)行軟件的編程。這兩種方法都能夠實(shí)現需要的功能,但是后者更方便快捷,因為在這種方法里,我們使用的是“拿來(lái)主義”,IP核已經(jīng)實(shí)現了我們的功能,要做的僅僅是去利用它而已。 再后來(lái)學(xué)習ucos嵌入式操作系統,主要是運用在FPGA里面。nios已經(jīng)為使用者移植好了,不需要修改任何文件。在nios用戶(hù)界面里進(jìn)行一些相應的設置就可以使用了。Altera公司為我們提供的模板里邊有幾個(gè)很好的例子,任務(wù)管理、信號量、郵箱傳遞、事件標志、時(shí)間管理等提供了很好的模板,我們需要做的是認真的閱讀,研究它,必要的話(huà)對模板進(jìn)行一些改寫(xiě)來(lái)完成自己的功能,這是模仿的更高境界了,把他的一些東西進(jìn)行吸收轉化成為自己的東西,我想這是一個(gè)硬件愛(ài)好者和初學(xué)者非常樂(lè )于做的事情。 在進(jìn)行FPGA學(xué)習的時(shí)候,我遇到過(guò)問(wèn)題停滯不前,試驗沒(méi)有進(jìn)展,心情沮喪的時(shí)候。那時(shí)對底層硬件一無(wú)所知,連對基本的原理圖也看不太懂,更別說(shuō)程序在開(kāi)發(fā)板上是怎么運行的了。再到后來(lái)進(jìn)行nios開(kāi)發(fā)的時(shí)候,這種沮喪感與日俱增,每天感受不到一點(diǎn)進(jìn)步,真是很漫長(cháng)難熬的日子。一次,我和辦公室的一個(gè)工程師聊天,談到了我的困惑,他建議我先學(xué)習單片機,自己搭建硬件平臺,從最小系統做起。這個(gè)工程師古道熱腸,學(xué)習方面的問(wèn)題他總是很耐心地幫助解答,讓我受益匪淺,我很慶幸能夠在這種環(huán)境當中學(xué)習。還有我的導師,他是一個(gè)擁有近30年硬件開(kāi)發(fā)經(jīng)驗的資深研究員,開(kāi)始工作的時(shí)候我什么都不懂,但總喜歡往導師辦公室跑,喜歡和他瞎聊。他為人和藹可親,容易接近,和他交流的時(shí)候總能得到一些職業(yè)和人生方面的忠告,這些忠告將伴隨著(zhù)我一生。到后來(lái),事情逐漸有了轉機,我也慢慢適應了這種心情,調整好了心態(tài),F在想起來(lái),慶幸自己并沒(méi)有絕望,沒(méi)有對自己熱愛(ài)的硬件失去信心。我想說(shuō)的還是那句老話(huà):遇到問(wèn)題的時(shí)候,當我們感覺(jué)事情沒(méi)法進(jìn)展下去的時(shí)候,不妨換一種方式,與周邊的人聊聊,或許會(huì )有改變。人生總是有很多坎坷,我們的學(xué)習職業(yè)生涯也是如此。在這個(gè)時(shí)候若能看看任正非寫(xiě)給華為員工的一封信《要快樂(lè )的度過(guò)充滿(mǎn)困難的一生》,或者去看看李嘉誠寫(xiě)給青年們的《Are you ready》,在那里你可以學(xué)到謙虛、勇氣、智慧、毅力,我想這會(huì )增添我們積極生活下去的勇氣。當確定了一個(gè)目標,我們需要鼓足勇氣,滿(mǎn)腔熱情地去擁抱它,遇到困難、阻撓時(shí)一定不要獨自等待,多和人交流吧,一切從溝通開(kāi)始! 本文泛泛而談,必然淺薄,若是能夠給初學(xué)者帶來(lái)哪怕是一丁點(diǎn)好的影響,能夠提供一丁點(diǎn)的幫助,那我將感到無(wú)限的欣慰。最后送給我們初學(xué)者一句話(huà),以共勉,這也是《圣經(jīng)》中馬太福音里的一句話(huà):凡有的,還要加給他叫他多余;沒(méi)有的,連他所有的也要奪過(guò)來(lái)。 |