Major Member
|
技術是相輔相成的,當我的硬體有了一定的進步后,我的軟體設計也有了很大的提升,我可以從更深層次理解問題,我做的接入伺服器CPU是Motorola PowerPC860,熟悉的朋友都知道860 QMC與軟體的批量數據傳輸通常採用BD表的模式,硬體人員做驅動的時候習慣採用固定BD表,每接收或發送數據都將數據從BD表拷貝到用戶Buffer,或從用戶Buffer拷貝到BD表,由於理解的比較深入,我自己重新實現了這個過程,採用動態BD表的模式,驅動從一個網口接收數據,提交給我的軟體進行三層交換,直至從另外的界面發送出去,沒有進行一次拷貝。這樣的設計大大提升了性能,使系統的指標接近理論值。軟硬體的結合使我的設計水準上了一個台階。 我現下寫的這個作業系統,編譯后我把程式反編譯成彙編,找出其中不優化的代碼,然後在C程式中進行調整。舉個例子,很多CPU沒有專門的乘法指令,這個大家應該都知道,在這種CPU上進行一個乘法操作常常會花費大量的指令週期,有的朋友會說這個我知道,我會盡量避免採用×號,但是事情往往不是那么簡單,你知道C語言中數組的下標操作是怎么實現的嗎?仔細看看反彙編的代碼你就會明白,同樣是透過下標的定位操作,C編譯器會有時候會產生位移指令,但有時候會用乘法實現,兩者效率往往是天壤之別,所以明白這些問題你才能將系統性能提升到極致。
話說遠一點,我由衷的希望在軟體上做的比較深入的朋友們有機會學學硬體以及其它相關知識,尤其是做底層開發和嵌入式設計的。這對軟體技術的提升有非常大的幫助,否則很多事情你只知道該這樣但不會明白為什麼該這樣。我這個觀點在我現下的IC公司Project Manager那裡也得到了驗証。他告訴我們公司現下的802.11晶片產品的軟體經理原本是做該晶片硬體設計的,某某某原本是做軟體的,現下在做IC,類似的例子還有很多,只是在國內這樣的風氣不是非常流行。
我有一些心得體會與大家分享,只有當我干好本職工作后,我才會學習與工 作關係不大的技術,這樣公司的上司才不至於反感,在入門階段的問題我通常不去問那些資深人士,而是問一些資歷比較淺的朋友,比如剛畢業不久的學生,因為他們往往會跟你詳細的講解,而資深人士通常覺得你的問題太簡單,所以回答的也很簡單,我又不好意思多問。等技術上了一定的層次后我才會問他們,他們也能給你比較深入的回答。另外,有些朋友說我機會比較好,他們也希望能從事新的工作可惜沒有機會,我聽了只有苦笑,我的機會了解的人都應該知道,我沒有出生在什麼IT世家︰)也沒有誰一路提拔我,所有的路都是自己走出來的,我母親去世比較早,我的后母(我叫她阿姨)看著我努力過來的,一次她看我大年30還在寫程式,她說像我這樣努力木頭都能學出來。
我的最終目的是IC而不是 PCB,所以我下一步的準備開始學習IC設計的知識。公司的同事沒有懂IC設計的,后面的路又要靠自己了,我買了不少相關的書,在網上也查了很多的資料,我花了大量的時間去學習VHDL,並且用軟體進行了一些簡單的設計和仿真(沒有設計ASIC,只是針對FPGA),隨著學習的深入,我漸漸明白了IC設計 的基本流程,同時也明白了這條路的艱辛。這個時候我已經做好了跳槽的準備,我向一家業界又一定知名度的IC設計公司投了簡歷,並透過了漫長的面試(4個多小時)。其他的一切我都比較滿意,唯獨薪資差強人意,我也明白原因,因為我是這個行業的新人,我沒有經驗,我再一次將自己清零了。公司頭家問我6000多 一個月能不能接受,我知道他也是照章辦事。想想我通信行業的朋友們,基本上都是年薪10萬以上,月薪過萬的也比比皆是,朋友們也幫我介紹了不少待遇不錯的公司,我該怎么選擇,當時我很猶豫,我熱愛我的事業,我向往我的追求,但我也是一個普通的人,我也需要養家糊口,我也想早一點買房買車。生活給我出了一道難題。
愛因斯坦在63歲時說過“一個人沒有在 30歲以前達成科學上的最大成就,那他永遠都不會有。”這句話給了我很大的壓力和震動,我馬上就26歲了,離30只有四年時間,我必須抓緊這幾年寶貴的時間,努力達到我技術上的最尖峰。為了這個理想,為了能離自己的夢更近一些,我選擇了這家IC公司,我明白自己的薪資和公司剛進來的碩士研究生相差無幾,但為了今后的發展只能忍受,一切又得重新開始。換行業是一個非常痛苦的過程,尤其從一個春風得意的位置換到一個陌生的崗位,感覺象從溫暖的被子裡鑽出來跳 進冰水中,讓人難以接受。在原來那家通信公司,我是唯一兩年時間漲了五次工資的員工,公司和同事都給了我極大的認可,工作上也常常被委以重任。但現下這一 切都成了過去,在新的公司我只是一個新人,沒有人知道也沒有人在意我過去的成績。我決定重新開始,我把自己看作新畢業的學生,我要用自己的努力得到公司的 認可。進入新的行業是非常痛苦的,我告訴自己必須忍受這一切,雖然外面有很多誘惑,但是既然作出了選擇我就不允許自己輕易放棄。
我現下已經在這家新公司上了一個多月的班,開始非常艱難,現下慢慢適應了。第一個月結束時,Team Leader找我談話,說我是新進員工中最優秀的一個,我心裡很欣慰,這也算對我努力的一個肯定吧。在這裡還要感謝我的女朋友,她給了我很大的支持和鼓舞,每次在我動搖的時候她都在鼓勵我,讓我堅持自己的理想,剛來上海是她讓我不要勉強去做MIS,這次也是她讓我頂住了月薪過萬的誘惑,沒有她我可能不會有今天的成績。現下的公司有自己的作業系統,自己的CPU、DSP和其它晶片,在這裡我能學到世界上最先進的技術,我們的設計開發不再完全倚賴別人的硬體和系統,這讓我很開心。我打算等工作步入正軌后,全力學習新的知識,實現我的理想。
在后面的兩年裡我給自己定下了幾個目標︰
一.努力做好本職工作,在工作上得到公司和同事們的認同;
二.努力學習IC硬體設計知識,多向同事請教,並利用一切機會多實踐;
三.實現我的實時作業系統的主要部分,完成TCP/IP協議棧模塊,並免費發布源代碼;
四.和我女朋友結婚並買一套小房子,這是最重要的,因為我明白事業是可以重來的,但是珍貴的感情很難失而複得。
在這裡提一下我現下開發的作業系統,它是一個實時嵌入式系統,目前支持以下特性︰
a.支持時間片輪轉調度和基于優先級調度,最多64個優先級;
b.搶占式實時內核;
c.為了便于移植,主體用標準C實現;
d.彙編代碼非常少,不到100行;
e.支持任務管理,各任務有獨立的堆棧;
f.進程同步和通信目前完成了Semaphore,Message Queue正在調試;
g.實現了定時系統調用;
h.可以在windows上仿真調試
我還打算下一步實現優先級反轉保護,Event Flag,Data Pipe,內存管理(以前實現過)、驅動界面等。 在這之后我還會努力完善它,比如加入文件系統,協議棧、調試界面等。
|