一個(gè)從應用層到IC層的嵌入式牛人學(xué)習經(jīng)歷
在后面的兩年里我給自己定下了幾個(gè)目標:
本文引用地址:http://dyxdggzs.com/article/215670.htm一.努力做好本職工作,在工作上得到公司和同事們的認同;
二.努力學(xué)習IC硬件設計知識,多向同事請教,并利用一切機會(huì )多實(shí)踐;
三.實(shí)現我的實(shí)時(shí)操作系統的主要部分,完成TCP/IP協(xié)議棧模塊,并免費發(fā)布源代碼;
四.和我女朋友結婚并買(mǎi)一套小房子,這是最重要的,因為我明白事業(yè)是可以重來(lái)的,但是珍貴的感情很難失而復得。
在這里提一下我現在開(kāi)發(fā)的操作系統,它是一個(gè)實(shí)時(shí)嵌入式系統,目前支持以下特性:
a.支持時(shí)間片輪轉調度和基于優(yōu)先級調度,最多64個(gè)優(yōu)先級;
b.搶占式實(shí)時(shí)內核;
c.為了便于移植,主體用標準C實(shí)現;
d.匯編代碼非常少,不到100行;
e.支持任務(wù)管理,各任務(wù)有獨立的堆棧;
f.進(jìn)程同步和通信目前完成了Semaphore,Message Queue正在調試;
g.實(shí)現了定時(shí)系統調用;
h.可以在windows上仿真調試
我還打算下一步實(shí)現優(yōu)先級反轉保護,Event Flag,Data Pipe,內存管理(以前實(shí)現過(guò))、驅動(dòng)接口等。
在這之后我還會(huì )努力完善它,比如加入文件系統,協(xié)議棧、調試接口等。希望朋友們提出自己的意見(jiàn)和建議,在此不勝感激!
后記:
就像有的朋友說(shuō)的,我的經(jīng)歷或許會(huì )給一些朋友產(chǎn)生誤導,在這里我必須說(shuō)明一下。我來(lái)上海以前學(xué)習過(guò)于拼命,常常晚上只睡3個(gè)多小時(shí),我身高1米71,那時(shí)只有108斤(我現在130多),家人也說(shuō)我這樣拼命活不過(guò)60歲,但是當時(shí)的我太固執,我對他們說(shuō)只要能實(shí)現理想活50歲我就夠了。那時(shí)的拼命使我的身體受到了影響,有一次早上突然腰肌劇痛難忍,痛的我倒在床上站不起來(lái)。雖然我現在已經(jīng)比較注意,但有時(shí)候還會(huì )隱隱作痛。后來(lái)在女朋友說(shuō)服了我,來(lái)上海以后我不再如此。我經(jīng)常引用父親的一句話(huà)“身體是革命的本錢(qián)”。
而且我也發(fā)現拼命不是辦法,我可以熬一兩個(gè)通宵,最多的一次我連續工作了三天三夜,但是我半個(gè)月都沒(méi)有恢復過(guò)來(lái),這樣是不是得不償失?學(xué)習工作應該是一個(gè)長(cháng)期的過(guò)程,像馬拉松而不是百米沖刺。我現在非常注意調整學(xué)習和工作的強度,我要保證每天盡量有相對充沛的精力,一些年輕的朋友覺(jué)得自己也應該拼命努力,這讓我多少有些擔心,如果我的故事能讓你在學(xué)習工作上多一點(diǎn)興趣,我會(huì )感到很開(kāi)心,但如果誤導了某些朋友,讓你做一些不值得的付出,我會(huì )感到很內疚。
技術(shù)沒(méi)有貴賤只分,我以前換行業(yè)是因為自己的興趣所致,而不是對哪個(gè)行業(yè)有什么偏見(jiàn)。我希望我的經(jīng)歷不要給朋友一個(gè)錯誤的導向,覺(jué)得我始終向更高的技術(shù)發(fā)展。其實(shí)各行各業(yè)做到頂尖都是很困難的。話(huà)又說(shuō)回來(lái)雖然技術(shù)沒(méi)有貴賤,但是門(mén)檻是有高低的,無(wú)論如,做IC的門(mén)檻要比做網(wǎng)頁(yè)的高,這一點(diǎn)無(wú)可否認。國家各種人才都是需要的,但是作為個(gè)人奮發(fā)向上的想法還是應該有的,努力在自己喜歡的行業(yè)上做的更好,而不應該停留在比較膚淺的層次上。
我是一個(gè)自己覺(jué)得比較有自知之明的人,或許我最大的優(yōu)點(diǎn)就是知道自己有很多缺點(diǎn):)。我的故事中很多的曲折和錯誤都是由我的缺點(diǎn)造成的,希望大家用審慎的眼光看待我的經(jīng)歷,不要被我的“花言巧語(yǔ)”所迷惑。我學(xué)習有些隨心所欲,這給我帶來(lái)了無(wú)盡的麻煩,也大大阻礙的我的發(fā)展。記得我小時(shí)候成績(jì)比較出色,但是后來(lái)學(xué)習嚴重偏科,導致我中學(xué)成績(jì)一再滑坡,也沒(méi)有考上什么好的學(xué)校,小時(shí)候的一個(gè)朋友,當時(shí)的成績(jì)和我相仿,但是沒(méi)有我這個(gè)缺點(diǎn),她上了清華,后來(lái)在去了美國深造,在一個(gè)著(zhù)名導師手下研究理論科學(xué),這未嘗不是一條更好的出路。另外我的學(xué)習方法也是在不斷改善中的,過(guò)去的學(xué)習過(guò)于講究數量和時(shí)間,那樣學(xué)習既苦而已效率不高,現在我非常注意學(xué)習的效率和技巧,這樣才是學(xué)習的捷徑(當然不是指投機取巧),比如說(shuō)學(xué)一相對陌生的技術(shù),如果有條件,不妨問(wèn)一問(wèn)有經(jīng)驗的人,不需要問(wèn)很多,往往他不經(jīng)意的幾句話(huà)會(huì )給你非常大的幫助,甚至超過(guò)你看一個(gè)星期的書(shū)。帶著(zhù)這樣的思想再去學(xué)習你會(huì )節省很多時(shí)間,這樣何樂(lè )不為呢?這些年中我學(xué)了不少的東西,由于開(kāi)始非常盲目,所以學(xué)的東西雜亂無(wú)章,現在回想起來(lái)讓我啼笑皆非,我把大量的時(shí)間浪費在一些沒(méi)有必要深入了解的知識上,畢竟一個(gè)人的精力是有限度的。很多朋友很我一樣都背過(guò)五筆字形,的確它且個(gè)不錯的輸入法,但是對一個(gè)研發(fā)人員它絕對不值得你去背,你的時(shí)間應該花在有價(jià)?的地方。我這樣的事情還做過(guò)很多,我背過(guò)CCED、WPS的命令和快捷鍵,在dBase基本退出歷史舞臺后我還花了很多時(shí)間去學(xué)習它的使用。所以我的學(xué)習在前期缺乏規劃,沒(méi)有明確的短期目的、中期目標,只有一個(gè)虛無(wú)飄渺的長(cháng)期的理想。這就像做設計一樣,好的設計是從需求抽象到代碼有很多過(guò)程,而不能得到了需求就立刻開(kāi)始開(kāi)始編碼。
當然這么些年的學(xué)習和工作多多少少有些收獲,下面我說(shuō)說(shuō)我的一些學(xué)習的心得,這些方法未必正確,我也在不斷探索和改進(jìn)中。我的學(xué)習和工作有相對明確的目標,我不會(huì )一時(shí)心動(dòng)而去學(xué)習某一技術(shù),在下決定之前我會(huì )考慮很多,包括長(cháng)期的發(fā)展,個(gè)人路線(xiàn)的規劃,需要付出的代價(jià)、可能遇到的困難及解決的辦法等等,在決定后還會(huì )制定更加明確的計劃,包括短期、中期和長(cháng)期的,身邊可以利用到的資源(包括好的書(shū)籍、資料、軟硬件環(huán)境,也包括有經(jīng)驗的朋友或者師長(cháng)),以及每一個(gè)階段是怎么過(guò)渡到高一階段的計劃,往往在一個(gè)學(xué)習階段一旦上路后會(huì )走的相對順利,但是跨階段通常比較麻煩,比如從學(xué)習基礎知識轉到實(shí)踐。另外我買(mǎi)書(shū)也有自己的方法,現在世面上高質(zhì)量的書(shū)遠不如低質(zhì)量書(shū)多,對于一個(gè)陌生的技術(shù),往往在第一次買(mǎi)書(shū)會(huì )選擇錯誤,即使買(mǎi)到一本好書(shū)但是它的方向也未必適合你,所以我通常會(huì )先在網(wǎng)上查找一些該技術(shù)的介紹,有了一點(diǎn)點(diǎn)概念后再去買(mǎi)一本比較薄、相對便宜并且內容相對泛泛而談的書(shū),這是國內作者最善于寫(xiě)的書(shū):),再把它瀏覽一遍后我就會(huì )基本明白這門(mén)技術(shù)的要點(diǎn),后面買(mǎi)書(shū)和制定計劃就會(huì )明確的多。否則一開(kāi)始就想找本好書(shū)往往比較困難,而且買(mǎi)回來(lái)后努力學(xué)習,有時(shí)候學(xué)了一半才發(fā)現是本低質(zhì)量的書(shū)或者是相對過(guò)時(shí)技術(shù),讓人非常懊惱。另外讓有經(jīng)驗的人幫你介紹,通常也是一個(gè)不錯的選擇。
有些朋友想學(xué)通信、嵌入式開(kāi)發(fā),但總覺(jué)得自己沒(méi)有軟硬件環(huán)境,我就按我的了解給大家介紹一下怎么建立這樣的環(huán)境,當然我了解的只是我學(xué)習和工作的方向。通信我做的是數據網(wǎng)方面的工作,包括TCP/IP、二三層交換、對接入網(wǎng)、H.323和軟交換也有一點(diǎn)認識。這些軟硬件環(huán)境都是可以在PC上構建的。你甚至可以在一個(gè)沒(méi)有網(wǎng)卡的PC上建立一個(gè)包含多個(gè)路由器、接入服務(wù)器、VoIP網(wǎng)關(guān)、網(wǎng)守、主機等的仿真網(wǎng)絡(luò )環(huán)境,而且與實(shí)際的網(wǎng)絡(luò )相當接近,當然這需要你有清晰的網(wǎng)絡(luò )概念和一定的網(wǎng)絡(luò )知識,我一直在努力開(kāi)發(fā)一套軟件將這個(gè)過(guò)程簡(jiǎn)化,目前試驗已經(jīng)做完,我可能會(huì )將它融入我的操作系統外圍擴展軟件中。這樣的方法我無(wú)法用簡(jiǎn)單的語(yǔ)句講的很清楚,我可以說(shuō)一下大概的思想,就是在PC上實(shí)現仿真網(wǎng)卡,(知道Windows怎么在沒(méi)有網(wǎng)卡的機器實(shí)現虛擬網(wǎng)卡技術(shù)的朋友都應該會(huì )明白),然后每一個(gè)仿真網(wǎng)卡對應一個(gè)虛擬設備,如路由器或者主機。你也可以借助第三方工具完成部分工作,如VmWare等。我現在就是利用一個(gè)仿真網(wǎng)卡做自己的開(kāi)發(fā)的。
至于嵌入式開(kāi)發(fā)環(huán)境更加容易實(shí)現,PC就是一個(gè)非常大的硬件平臺,現有的嵌入式操作系統通常都支持X86,你可以在上面做開(kāi)發(fā),通過(guò)軟盤(pán)Boot或者使用虛擬機裝載,我用VxWorks做了試驗,在一臺PC上跑Windows和VxWorks兩個(gè)系統。另外Windows上的兼容DOS的16位仿真X86環(huán)境也為很多操作系統提供了絕佳的試驗環(huán)境,我的操作系統在Windows上就是這樣實(shí)現的。Linux在嵌入式中應用也比較廣泛,它在網(wǎng)上有大量的資料,而且也相對比較容易實(shí)踐。同時(shí)很多完善的嵌入式開(kāi)發(fā)環(huán)境支持軟件仿真,如Tornado、WinCE等
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)c語(yǔ)言相關(guān)文章:c語(yǔ)言教程
c++相關(guān)文章:c++教程
tcp/ip相關(guān)文章:tcp/ip是什么
評論