信心、毅力、勇氣三者具備,則天下沒有做不成的事。從aiku總結的這三點可以看的出來,成功是需要付出的。任何人任何事都離不開你內心最原本的那份自信。堅持做下去就會離成功越來越近。
談一談aiku學習嵌入式的那些年吧!
那些年,我們一起來學嵌入式。有人 用魯迅的名篇形容大學四年:大一《彷徨》,大二《吶喊》,大三《傷逝》,大四《朝花夕拾》。想想,還真是這樣!
2005年剛上大一,我開始接觸51單片機,自己畫板自己做板,接著又嵌入式arm。但是那時候很彷徨、迷茫,都是書本大理論, 學得一頭霧水。還是硬著頭皮啃下去。
幸好,大二跟隨電子設計室的師兄學習嵌入式實際操作,剛好學院火熱開展電子設計大賽,這是一個很好的學習契機。於是,我和幾個哥們組隊, 每天披星戴月泡在實驗室,從構思、設計、編程到展演,步步摸索,從院、校、市,過五關斬六將,最後獲得省一等獎。小小的成功,這也是夢想最初的吶喊吧。夥伴們共同探討,志同道合還是挺振奮人心!
大三,學院考研風氣還是挺濃厚。可惜是我英語不太好,連四級都沒過,某次還被英語老師說:英語四級都沒過,就先別考慮考研。她的話給我當頭一棒,更是暗下決心,令其刮目相看!複習近一年多, 過著“起的比雞早,睡得比夠晚”的苦逼考研生活。那段時間, 每次疲憊不堪時,總以恩格斯的“沒有哪一次的痛苦,不是以人類的進步為補償”激勵自己。苦盡甘來,考上啦!離畢業還有一定空擋時間。我就想做過那么多項目,為何不將經驗總結?“朝花夕拾,雁過留聲”嘛,我就重點將比賽的各個項目歸納整理,這也是我在論壇里共享研究生三年項目資料的一部分。
2009年,攻讀研究生,加入導師的“創新嵌入式實驗室”,和師兄幾個參與導師的嵌入式項目。我主要負責虛擬平台匯流排設備驅動開發、音頻驅動開發以及bootloarder模組開發。
工作內容涉及到Linux應用程式開發、LinuxTCP/IP協定棧的改動、Linux核心驅動模組的開發等等。現正編寫【嵌入式項目實戰經典視頻教程】,利用周末,在YY課堂上,講解《嵌入式入門開發及實戰項目開發》。嵌入式開發的學習路上,我始終堅信天道酬勤,一個人的成功與否,取決於業餘時間的開發利用。
分享一下學習linux或者是ARM時aiku有哪些收穫?
aiku:
非常高興能有這個機會與大家一起交流一些經驗,談一些我在電子設計以及做嵌入式項目開發方面的感受,希望我們能夠共同進步。首先,我感謝我們的隊友!
我認為,積極地參與嵌入式項目實戰,不僅可以充分的體會到自己動手實踐的樂趣,獲得哪怕是前進一小步時候的那種成功的喜悅,還有以下的幾點收穫:
•(1)有利於我們學習能力的提高。這裡所說的學習能力包括獲取資料的能力、理解前人思路的能力、系統設計能力、動手能力、分析排除故障能力、表達能力等很多方面。
•(2)有利於我們團隊精神的培養。不管在學校還是社會實際的工作中,我們一般都要與人合作共同完成某一項目,這就非常需要團隊精神,而這一點在課堂常規教學中得到的鍛鍊是很有限的。嵌入式項目開發要求人必須互相信任、互相配合、分工合作。在順境時小組成員要相互提醒保持冷靜,逆境時要相互鼓勵共度難關,出現問題時不能相互埋怨。這些與學校裡面的課堂教學強調獨立性是有明顯區別的。
•(3)有利於我們應變能力的提高以及思維能力的提高。在做項目的過程中要求我們在規定時間內完成規定的項目,時間急迫會說出現各種意想不到的結果,所以我們必須在儘可能短的時間內解決問題,這就需要在平時的訓練中提高應變能力。
那么,如何來準備成為嵌入式實戰項目高手呢?我認為,最好有一個前輩領著你一起學習,一起搞項目。這樣你遇到問題你就可以有人教你,進步飛快! 其次,你可以使用一套有價值的教程領你進入linux世界!
給大家簡單介紹一下學習linux的側重點有哪些呢?
很多朋友在學習arm+linux都很迷茫,他們都在問,作為一個新人,怎樣學習嵌入式Linux或者如何學習嵌入式等問題這些問題被問過太多次,很多都可在這裡找到答案, 自學嵌入式最大的障礙是什麼?就是有問題沒有地方提問,從而打擊了學習的積極性。
作為一名嵌入式【創科之龍】團隊的aiku來說,我想我可以做一些嘮叨甚至可以說一下一些建議和意見,希望我的分享能給他們以啟發。嵌入式的入門門檻稍微高一點,但是再高的城牆也是小磚頭築起來的,所以沒有必要因為門檻高就覺得很困難,一步一個腳印,貴在堅持就可以了,當然,嵌入式學習是一個漫長的過程,如果你的興趣不在於嵌入式,而只是為了某些目的而學習,那學習對你來說就是一件枯燥的事情。
搞過ARM,其實有C語言基礎,學起來就輕鬆很多,驅動,其實也不難,因為對於電子的學生來說。對硬體有一些了解,寫驅動是不難的。驅動,有一個固定的模型,都差不多的。其實我們常見的驅動,LINUX核心裡面都有的了。這些暫時從簡單開始,沒有必要研究太深入。
大家都知道學習講究方法,那么學習嵌入式系統可以分為哪幾個階段?
我個人認為可以分為4層,硬體層、驅動層、作業系統層和套用層。
•1、硬體層,是整個嵌入式系統的根本,如果你們現在單片機及接口這塊很熟悉,並且能用C和彙編語言來編程的話,從嵌入式系統的硬體層走起來相對容易,硬體層也是驅動層的基礎,一個優秀的驅動工程師是要能夠看懂硬體的電路圖和自行完成簡單的硬體邏輯設計的,同時還要對作業系統核心及其調度性相當的熟悉的。但硬體平台是基礎,它的增值還需要要靠軟體。
•我個人覺得硬體層比較適合於,電子、通信、自動化、機電一體、信息工程類專業的人來搞,需要掌握的專業基礎知識大概有單片機原理及接口技術、微機原理及接口技術、C語言。
•2、驅動層,這部分比較難,驅動工程師不僅要能看懂電路圖還要能對作業系統核心十分的精通,以便其所寫的驅動程式在系統調用時,不會獨占作業系統時間片,而導至其它任務不能動行,不懂作業系統核心架構和實時調度性,沒有良好的驅動編寫風格,按大多數書上所說添加的驅動的方式,很多人都能做到,但可能連個初級的驅動工程師的水平都達不到,這樣所寫的驅動在套用調用時就如同windows下我們打開一個程式運行後,再打開一個程式時,要不就是中斷以前的程式,要不就是等上一會才能運行後來打開的程式。想做個好的驅動人員沒有三、四年功底,作業系統核心不研究上幾編,不是太容易成功的,但其工資在嵌入式系統四層中可是最高的。
•我個人覺得驅動層比較適合於電子、通信、自動化、機電一體、信息工程類專業尤其是計算機偏體系結構類專業的人來搞,除硬體層所具備的基礎學科外,還要對數據結構與算法、作業系統原理、編譯原理都要了解。驅動開發方面,建議先從簡單的入手,比如串口/並口/LED/矩陣鍵盤/IIC等,難一點再做PCI/USB等其他的。
•3、作業系統層,對於作業系統層目前可能只能說是簡單的移植,而很少有人來自已寫作業系統,或者寫出缺胳膊少腿的作業系統來,這部分工作大都由驅動工程師來完成。作業系統是負責系統任務的調試、磁碟和檔案的管理,而嵌入式系統的實時性十分重要。據說,XP作業系統是微軟投入300人用兩年時間才搞定的,總時工時是600人年,因此這部分工作相對來講沒有太大意義。
•4、套用層,相對來講較為容易的,如果會在windows下如何進行編程接口函式調用,到作業系統下只是編譯和開發環境有相應的變化而已。如果涉及Jave方面的編程也是如此的。嵌入式系統中涉及算法的由專業算法的人來處理的,不必歸結到嵌入式系統範疇內。
目前為止,我了解驅動開發的待遇都是非常高的,本科出來工作5-6年,一般待遇都10k左右!如果我們初學者想從事android手機驅動開發,本科出來5-6年一般都會有15k月薪,研究生2-3經驗那么也有20k。
所以 我建議大家先把字元設備驅動學好,後面把平台匯流排驅動學好,接下來就可以接手android的手機驅動開發或者android驅動開發。
我們【創科之龍】幾個隊友,做大大小小的項目應該不下100個嵌入式的項目,在開發嵌入式的項目的過程中讓我們最有成就感的就是:積累豐富的項目經驗。
在做嵌入式項目中,最大的艱難就是眼看要交貨了,現在項目遇到技術瓶頸,解決好多天甚至一個月了,都沒有進展。遇到這樣後,我一般都先網上查查,是不是有前輩有遇到跟我一樣的問題,如果有,那當然好解決,如果沒有,那么我接下來要冷靜分析整個項目過程的思路,到底哪裡出問題?為什麼會出現這個問題?為什麼會導致這樣問題?是什麼原因導致這樣的問題~?然後和隊友的一起談論一下項目整個狀況。因為每個人的思維都不一樣,也許別人的思維就是可以解決我們現在遇到的問題,因此 我還是要強調個人的力量是有限的,團隊的力量是無窮的!
不管學習linux驅動還是學習android驅動開發,它們的門檻都是比較高的,所以為什麼說工作幾年的android驅動工程師動不動就年薪10w以上的原因。
因此,學習android的驅動最好的學習方法要找對人學,要找對資料學,最重要要找到目標來學。
後記:很多人總說時間不夠,沒有時間去做想做的事情,這種時候你有沒有靜下心來思考過你是否真的有用心去做呢?時間就是海綿,擠一擠就有了。為了我們的青春無悔,珍惜時間,你會享受更好的生活。