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