當前位置:商標查詢大全網 - 教育培訓 - 從C語言到fpga高手,我是怎樣煉成的?

從C語言到fpga高手,我是怎樣煉成的?

這幾天壹直在寫壹個實時操作系統內核,很成功。等我完成後,我會把它公之於眾,希望能為中國的it發展盡壹份力。最近看到很多同學朋友和我當年壹樣無所適從,所以寫下我的經歷鼓勵大家,希望能給剛入行的朋友壹點幫助。轉眼間,我已經在IT行業學習和工作了七年多。期間做過網頁,寫過MIS,寫過數據庫,做過應用程序,做過通訊軟件,做過硬件驅動,做過協議棧,現在又做過操作系統內核和IC的開發,走了很多彎路,吃過很多苦。

我上的是三流院校,即使壹個城市的大部分人都不知道。因為學校不好,靠學校的名氣是沒有希望找到好工作的。我所有的希望都寄托在自己的努力上。大壹開學前的假期開始學習。我記得我買的第壹本書是《計算機基礎DOS3.0》。不要害怕。其實當時已經普及了DOS6.22,但是我在書店看到了DOS4.0、5.0、6.0的書,以為是像英語壹樣的第四、第五、第六冊。我記得到處找DOS 60。還好開學前沒找到帕斯卡。那時候既沒有電腦,也沒有人可以咨詢。我連程序是什麽的概念都沒有,只能死記硬背代碼,然後寫在紙上。我大三才考了486。在此之前,我已經記不清在紙上寫過多少程序了。我只知道最長的壹篇寫在A4大小的草稿紙上,長達30多頁。我的C語言,英語,英語,英語,英語,英語和漢語。所以條件是可以克服的。希望我的經歷能給條件困難的同學壹些信心。第壹次上電腦是在姐夫的機房。心情無比激動,但壹上電腦,我就傻了眼。他們用的是英文版的Win3.1,我那點DOS知識被看的有鬼。不小心把Word弄了個滿屏,怎麽也找不回來了。當時真的很擔心。我以為機器被我弄壞了。第壹個C語言程序,也就是經典的HelloWorld,我調了好幾個星期,但是上電腦的機會很少。沒有書告訴我需要設置開發環境(TC2.0),壹開始我甚至不知道有編譯器。我甚至把寫好的程序的擴展名從。c到。exe,結果可想而知。大壹學完了C,X86匯編,數據結構和C++。因為所有的精力都花在了自學上,大壹的時候有四門課不及格。這就是三類學校的好處,掛了壹二十門課就畢業了。但是,離題太遠了,我這麽努力也不合格,可見我們國家的計算機教育是多麽的僵化。

高二的時候準備去學VC和BC。當時很難在他們之間做出選擇。後來選擇了VC,無非是為了書店的兩本書。VC便宜了6塊錢。我的努力在班裏是無與倫比的,沒日沒夜的學習,尤其是大三有了電腦之後。很多次,父親在深夜教育我,我絕望了。壹直覺得自己基礎差,記憶力差,條件差,覺得要多花點時間才能趕上別人。其實後來很多朋友都說我有學電腦的天賦,讓我哭笑不得。我用的是486,16m內存,1G硬盤。當時同學的配置是P166MMX。我花了壹晚上的時間安裝了壹個Windows NT4.0,花了近兩個小時編譯了壹個BC5.0向導生成的程序。我的顯示器是二手的,輻射很大。開機畫面閃閃發光,看起來很酷:有壹次程序寫得太久,我以為是白編輯背景變紫了,以為是顯示器壞了,然後發現眼睛不行了,但奇怪的是,今天視力還能維持在1.5,真的是奇跡。但就是那臺破機器陪伴了我兩年,教會了我VC,Delphi,SQLServer等等。後來機器被阿姨用來打字了。據她說,有壹天她正玩得開心,顯示器冒出壹股煙,裏面有火焰,然後就滅了。

大三假期,我找了壹個機會,在壹個計算機研究所實習。我做的是誌願者,而不是實習。兩個月壹分錢沒拿到。不過這兩個月對我的發展幫助很大,讓我更早的了解了社會。當然,剛去的時候什麽都不知道,在那裏熟悉了網絡,學會了Delphi和Oracle。因為工作認真,所以得到了很好的評價。在壹個長輩的推薦下,我開始和他們壹起做項目,讓我在大三大四有了自己的收入。大四的時候找了兩家MIS公司兼職。雖然錢不多,但是學生時代1,000多的收入已經很滿足了。終於用賺來的錢換了電腦。高三開始找工作。這個時候我已經有了很多工作經驗(當然現在想想還是很幼稚的)。我開始聽從父母的意願去那個研究所。我實習的部門也希望我能去,但不知道為什麽最後成了官僚單位。我很生氣,就去了壹家公司,在那裏兼職做MIS的組長。大三期間到畢業後壹年,我做過各種MIS,從煤氣,煙廠,公安,鐵路,餐飲到高校。我要努力工作,經常加班熬夜,從跟客戶談需求到設計、編碼、測試、交付。當時覺得很有成就感,覺得自己還不錯。現在想想真的很膚淺。

剛開始工作的同學很容易被誤導,各種開發工具讓人眼花繚亂,但也感覺受到公司的高度重視,但這樣的工作永遠是低級的開發者。別跟我說系統分析有多重要多難。妳以為和用戶談需求談設計就是系統分析設計嗎?國內有幾個公司能做到非常規範的?我是壹名ISO9000內部審計師,我在Rational公司接受了很多培訓,並獲得了四個證書。另壹家公司讓我做CMM。我聽說過很多關於這方面的事情,但是在中國許多事情已經發生了本質上的變化。壹個公司不需要通過ISO9000或CMM就可以標準化。現在在壹家有幾十年歷史的外企工作,裏面的管理是壹般國內企業無法企及的。作為壹個畢業沒多久就踏入社會的學生,短時間內掌握系統分析與設計幾乎是不可能的。面向對象和UML只是壹個工具,關鍵是人自己的思想。不代表熟悉C++和Rose就能做出好的設計。相反,如果妳素質高,用C可以寫出比其他人用C++更模塊化的程序。

進壹步說,國內軟件開發行業存在壹個怪圈,很多人認為VC > Delphi & gtVB,真的很搞笑。這些軟件都是我開發的。說白了都是工具,要根據應用的需求來選擇使用哪壹個,而不是哪壹個更優越。如果妳因為很有面子而選擇壹個開發工具,那只能說明妳很淺薄。如果是分層的,那麽這些工具就不是分層的,因為它們都使用壹些系統化的API。微軟的朋友不會因為妳記得他們有多少API或者類就覺得妳很棒。妳永遠是他們的客戶,他們看重的是妳口袋裏的錢。我也做過系統內核,打包過很多API。同樣,我也不會看重用這些API進行二次開發的客戶,除非他們能做出自己獨特的設計。

至於有些人認為c++ >;c那就更可笑了。妳不妨問問這件事。現在有幾個用C++寫的操作系統內核和幾個用C++寫的實時系統。當然,我不是說C++不好,只是現在的內核和實時系統中的C++無法和C競爭,至於C++,那就另當別論了。所以我的觀點不是妳用什麽工具和語言,而是妳做什麽。妳的設計體現了妳的技術水平。

這樣工作了壹年,感覺很壓抑。我做的大部分工作都是技術活,個人技術沒有太大提升也看不到方向。所以我決定離開這個城市,去上海尋求更好的發展,我打算放棄以前的MIS,轉到通信行業。

我不能在這裏不提到我的女朋友。我們是在來上海前六個月認識的。她大四的時候在我們公司實習,公司派她來給我寫文件。我們的關系發展很快。她告訴了我許多事情。她家曾經是改革開放的第壹批暴發戶。她媽媽愛打牌,輸了幾百萬,欠了很多債。她有男朋友,但對他沒感覺,就因為他給了她2萬多,後來還逼著她寫了4萬的借條。她男朋友背叛她,不止壹次打她。現在他逼她結婚或者讓她還錢。這個人還是大學老師!她媽媽花光了她爸爸給她的學費,因為她被拖欠,拿不到畢業證。她媽媽生病了,現在需要錢,我就拿出壹點積蓄跟朋友借了壹些,給她交了學費,給她媽媽治病(看病的錢我是後來才知道的,連我都不知道她媽媽是不是生病了,她也沒辦法)。這時候家裏人知道了什麽,堅決反對我和她在壹起。她原來的男朋友也想毀掉它。無奈之下,我們決定早點離開這個悲傷的城市,瞞著家人。由於時間倉促,我只準備了4000塊錢,她僅有的幾百塊錢也被她媽媽拿走了。我買了三張票,壹張中午的,兩張晚上的。中午,家人把我送上船,他們壹走,我就下了船。我和她乘夜航離開了和她壹起生活多年的城市,帶走的只是壹筆債務。我們這些沒去過上海的人,很固執,不願意去打擾同學朋友。我們到達上海時是晚上六點半。我們不知道去哪裏。我們找了壹家20元的酒店。這個房間甚至沒有窗戶。七月的天氣令人難以忍受,房間裏非常悶熱。第二天,我們開始租房子,因為我們身上沒帶多少錢。我們基本上是步行。我們花了壹周時間。不知道我們在浦東轉了多少圈,找到了壹套400元的房子,卻不知道上海交了半個月的三壓壹中介費。買了些鍋碗瓢盆,身上只有800塊錢,工作還沒著落。這800塊錢只好支持我們了。為了省錢,我們自己做飯,每天買菜只要兩元錢。她很喜歡(這可能是她大學經常挨餓的原因)。我實在不忍心看她現在省吃儉用。她前男友沒放過她。他經常打電話騷擾她,還來上海看她。他還說了很多威脅的話。她太善良了,說他以前幫過她,叫我不要分享他的常識。之後天天在家等面試通知。本來想找個MIS公司快速解決眼前的困難,但是她堅持讓我不要放棄理想。最後,好事多磨。我找到了壹家通信公司。雖然4000塊錢的工資趕不上MIS公司開出的價格,但在上海也足夠生存了。她也找到了工作。上班第壹天,她哭了。那是她第壹次來上海哭。我很難過,也很感動。

因為是壹個全新的行業,我把自己化整為零,學的VC,Delphi,數據庫都沒用。擺在我面前的是壹些我從未接觸過的知識,比如嵌入式,協議,信令。我知道我沒有出路,所以我努力學習。我把自己當成應屆畢業生,我很努力,也有收獲。半年後,我終於熟悉了工作,受到了公司的表彰,工資也提高了壹級。接下來的日子裏,我們省吃儉用,把欠朋友的1000多元還了,日子終於走上了正軌。這時候女朋友跟我說她想考研究生,我很支持,她就辭職在家學習。

另外,在這裏要感謝我的項目經理。他曾經是壹家大型通信公司的產品經理,對人很好。我從他身上學到了很多,他也給了我很多無私的幫助。他給了我足夠的空間和對我工作的信任。我記得公司安排我維護壹個接入服務器軟件。因為代碼量不算少(5萬行),資料文檔也不全,維護起來很費勁,所以想再做壹次。公司領導不是很支持,可能是覺得工作量太大,但還是大力支持我。私底下他讓我做,他擠時間做我的維護工作。在他的支持下,我花了半年時間完成了訪問服務器的軟件,實現了壹個比較完整的TCP/IP協議棧。在這裏我學到了嵌入式系統設計、驅動開發、TCP /IP和很多通信方面的知識。我用了壹年的時間,終於把自己從MIS開發轉到了通信行業,站穩了腳跟。我的開發大部分是直接操作硬件,不再拘泥於微軟的操作系統,VC,Delhpi等開發工具,終於看到了另壹片天空。

我喜歡刨根問底。隨著開發的深入,軟件開發與硬件的聯系越來越緊密,硬件知識的匱乏阻礙了我的發展。而且芯片技術基本掌握在國外公司手中,這對於系統級設計是壹個非常大的制約。壹個新產品出來,第壹筆利潤(往往也是利潤最豐厚的利潤)往往被英特爾、摩托羅拉等IC公司賺走,國內廠商只能喝上壹點湯。於是決心解決自己的硬件技術障礙,打算離開通信行業,進入IC設計相關領域。

當然,我明白,如果我對硬件知之甚少,沒有壹家IC公司會好心招壹個像我壹樣壹無所知的人來培訓。所以我必須努力打好基礎,學習壹些相關知識,為將來做準備。正好我開始從MIS轉到通信,看了很多通信方面的書,給壹個ISP做了壹個RADIUS計費分揀臺。在這種背景下,這家通信公司給了我這個機會。我所在的通信公司是系統設計師,有很多PCB布局硬件人員。平時我很註意向他們學習。因為是做軟件的,不好意思看公司裏的硬件資料,所以壹開始只能在家裏看。剛來上海工作,加班壹年,後來沒加。因為要擠出時間學習,壹般都是12左右睡覺,第二天五點半就早早上班,坐地鐵。當然,學習不會壹帆風順。有些真的不懂的問題,會積累起來問硬件人員。他們的幫助會讓我的學習進步快很多。因為我是在沒有任何人指導的情況下自學,壹半的時間都花在解決難題上,但這種問題往往能讓我從別人的壹句話中豁然開朗。我很慶幸自己有這樣的學習環境。接下來的壹年,我學會了看硬件原理圖,學會了簡單的硬件設計(模擬電路還有很大差距)。就是這麽回事。妳安安心心做軟件,別人總會覺得妳是個軟件開發者。開始學硬件,別人可能不認同。中興的壹個朋友也跟我說,壹個人不可能什麽都學。我明白這壹點,但我希望我能做得更好。但是,當妳對硬件很熟悉的時候,人們會認為妳既懂軟件又懂硬件,妳的同事也習慣了。這時候我就可以開誠布公的把硬件資料拿到公司去了,再也不會有人大驚小怪了。讓我感到自豪的是,我通過自己的努力做出了壹個IAD(軟交換終端設備)系統方案,包括軟硬件的選型和設計。這個方案得到了公司和同事的認可,讓我感到很欣慰。

技術是相輔相成的。當我的硬件有了壹定的進步,我的軟件設計也有了很大的提升。我能從更深的層面理解問題。我的接入服務器CPU是摩托羅拉PowerPC860。熟悉的朋友都知道,860 QMC和軟件之間的批量數據傳輸通常采用BD表,硬件人員開車時習慣使用固定的BD表。每次接收或發送數據時,我都將數據從BD表復制到用戶緩沖區,或者從用戶緩沖區復制到BD表。因為理解深刻,我自己重新實現了這個過程,用動態BD表驅動軟件從壹個網口接收數據,三級交換,直到從另壹個接口發出去,沒有副本。這種設計大大提高了性能,使系統的指標接近理論值。軟硬件結合,讓我的設計水平更上壹層樓。我現在寫的操作系統,編譯後把程序反編譯成匯編,找出沒有優化的代碼,然後在C程序中調整。例如,許多CPU沒有專門的乘法指令。眾所周知,在這個CPU上的壹次乘法運算往往要占用大量的指令周期。有些朋友會說我知道,我會盡量避免使用x符號,但事情往往沒有這麽簡單。妳知道如何用C語言實現數組的下標操作嗎?仔細看壹下反匯編的代碼,就會明白C編譯器有時候會通過下標定位操作生成位移指令,但有時候會通過乘法來實現。兩者的效率往往相差很大,了解這些問題妳就能把系統性能提升到極致。這些問題我就不多說了。有興趣的話,以後可以壹起討論。

說的更遠壹點,真心希望做過更深入軟件的朋友有機會學習硬件等相關知識,尤其是做底層開發和嵌入式設計的朋友。這對軟件技術的提升有很大的幫助,否則妳只知道怎麽做卻不明白為什麽。我的觀點也得到了我現在的IC公司項目經理的驗證。他告訴我們,我們公司現在的802.11芯片產品的軟件經理,以前是設計芯片的硬件,XXX以前是做軟件的,現在是做IC的。類似的例子還有很多,但是這種趨勢在中國並不是很流行。

我有壹些經驗分享給妳。我只有做好本職工作,才會去學和本職工作關系不大的技術,這樣公司老板才不會反感。在入門階段,我壹般不會問那些資深人士,而會問壹些資歷相對較淺的朋友,比如剛畢業的學生,因為他們經常會給妳詳細講解,而資深人士通常會覺得妳的問題太簡單,所以我也不好意思多問。我不會問他們,直到我達到了壹定的技術水平,他們才能給妳更深入的回答。另外有朋友說我機會更大,也希望能走上新的工作崗位。可惜我沒有機會。我只苦笑了壹下。知道我機會的人應該都知道,我不是出生在什麽IT家庭:)壹路沒有人提拔我。我媽去世早,我後媽(我叫她阿姨)看著我辛苦。有壹次她看到我30歲了還在寫程序。

我的最終目標是IC,不是PCB,所以接下來準備開始學習IC設計。公司同事不懂IC設計,後面的路就看他們自己了。買了很多相關的書,在網上查了很多資料。我花了很多時間學習VHDL,用軟件做了壹些簡單的設計和仿真(沒有ASIC設計,只針對FPGA)。隨著學習的深入,我逐漸明白了ic設計的基本流程和這壹路的艱辛。這個時候,我準備跳槽了。我向壹家在業內有壹定知名度的IC設計公司提交了壹份簡歷,通過了壹次漫長的面試(4個多小時)。其他的都很滿意,就是工資不滿意。我也明白原因,因為我是這個行業的新人,沒有經驗。我又壹次澄清了自己。公司老板問我能不能接受壹個月6000多,我知道他也是按規矩來的。想想我在通信行業的朋友。基本上他們年薪都在65438+萬以上,月薪過萬的比比皆是。朋友也給我介紹了很多待遇不錯的公司。我該如何選擇?當時我猶豫了。我熱愛我的事業,我渴望我的追求。但我也是壹個普通人。我也需要養家糊口。我也想早點買房買車。生活給了我壹道難題。

愛因斯坦在63歲時說:“壹個人永遠不會在30歲之前取得最偉大的科學成就。”這句話給了我很大的壓力和震撼。我馬上就26歲了,離我30歲只有四年了。我必須抓住這些寶貴的歲月,努力達到我技術的巔峰。為了這個理想,為了更接近我的夢想,我選擇了這家IC公司。我明白自己的工資和剛進來的研究生差不多,但為了以後的發展只能忍著,不得不從頭再來。換行業是壹個很痛苦的過程,尤其是從壹個順遂的崗位到壹個陌生的崗位。感覺就像從溫暖的被子裏爬出來,跳進冰水裏,無法接受。在原來的通信公司,我是唯壹壹個兩年漲薪5次的員工。我的公司和同事給了我很大的認可,我在工作中經常被委以重任。但現在都過去了。我只是新公司的新人。沒有人知道或關心我過去的成就。我決定重新開始。我把自己當成壹個剛畢業的學生,我會用自己的努力得到公司的認可。進入壹個新的行業是很痛苦的。我告訴自己,我必須忍受這壹切。雖然外面有很多誘惑,但既然做了選擇,就不會允許自己輕易放棄。

我已經在這家新公司工作壹個多月了。壹開始很難,但現在我已經習慣了。第壹個月末,組長找我談話,說我是新員工中最優秀的。我很高興,這是對我努力的肯定。在這裏也要感謝我的女朋友。她給了我很大的支持和鼓舞。每次我動搖的時候,她都鼓勵我堅持自己的理想。剛來上海的時候,她跟我說不要勉強做MIS。這壹次,她也讓我抵擋住了月入過萬的誘惑。沒有她,我可能不會有今天的成績。現在公司有自己的操作系統,自己的CPU,DSP等芯片。我可以在這裏學到世界上最先進的技術,我們的設計和開發不再完全依賴別人的硬件和系統,這讓我很開心。我打算在工作步入正軌的時候學習新知識,實現自己的夢想。在接下來的兩年裏,我給自己定了幾個目標:

努力做好本職工作,在工作中得到公司和同事的認可;

努力學習IC硬件設計的知識,多向同事請教,利用壹切機會多練習;

實現我的實時操作系統的主體部分,完成TCP/IP協議棧模塊並免費發布源代碼;

和女朋友結婚,買個小房子才是最重要的,因為我明白事業可以重新開始,但是珍貴的感情很難再要回來。

這裏我想提壹下我現在正在開發的操作系統,它是壹個實時嵌入式系統,目前支持:

A.時間片輪換調度和基於優先級的調度,最多64個優先級;

B.搶占式實時內核;

C.為了便於移植,主體用標準c實現;

D.匯編代碼很少,不到100行;

E.支持任務管理,每個任務都有獨立的棧;

F.目前已經完成進程同步和通信,正在調試消息隊列;

g .實現定時系統調用;

H.您可以在windows上模擬調試。

我還打算實現優先級反轉保護、事件標誌、數據管道、內存管理(之前已經實現)、驅動程序接口等。之後我會嘗試改進,比如添加文件系統,協議棧,調試接口。希望朋友們能提出自己的意見和建議,在此非常感謝!

就像有朋友說的,我的經歷可能會誤導壹些朋友,這裏必須說明壹下。來上海之前,我學習太努力了。晚上經常只睡三個多小時。我的身高是1米,71。當時我才108斤(我現在130多)。家裏人也說我不可能這麽辛苦的過60歲,只是我當時太固執了。我告訴他們,只要能實現理想的人生,50歲就夠了。當時,我的身體受到了艱苦工作的影響。有壹次早上,我突然腰肌劇痛,就倒在床上站不起來。雖然現在註意多了,但有時候還是隱隱作痛。後來女朋友勸我,我來上海後就不這麽幹了。我經常引用父親的話,也發現努力不是辦法。我可以熬壹兩個晚上。最多的時候,連續工作了三天三夜,半個月都沒恢復。這是不是得不償失?

學習和工作應該是壹個長期的過程,像馬拉松而不是百米沖刺。現在很註意調整學習和工作的強度。我想保證自己每天都有相對充沛的精力。有些年輕朋友覺得應該努力,這讓我有些擔心。如果我的故事能讓妳對學習和工作更感興趣,我會覺得很開心,但是如果我誤導了壹些朋友,讓妳做了壹些不值得做的事情,我會覺得很愧疚。