从零学习嵌入式
從零學(xué)習(xí)嵌入式
作為一個非科班出身,目前從事嵌入式軟件編程的小菜鳥,本博客(專欄)將記錄并分享自己從零開始學(xué)習(xí)嵌入式的經(jīng)歷。包括但不限于技術(shù)分享類博文、代碼分享類博文、編程感悟類博文以及學(xué)習(xí)性博文。
也許有人問了,你寫的東西有什么價值呢?我會說,有沒有價值不知道,但是如果能夠記錄自己在學(xué)習(xí)以及工作中針對嵌入式編程所遇到的問題,并且能夠給出一個系統(tǒng)的解決方案,我相信對自己還是有用的。
從零學(xué)習(xí)嵌入式,將從真正的零開始,把自己從一個門外漢到現(xiàn)在的所學(xué)所感分享出來,希望有人看,希望能夠幫到別人。
一、 跨專業(yè)找工作
在學(xué)校的時候?qū)W的是機械專業(yè),當(dāng)然大學(xué)課程會有一些和程序以及電路相關(guān)的,但是,和大多數(shù)的同學(xué)們一樣,大學(xué)課程只是為了求個及格,并不了解真正的編程含義,甚至可以說,連編程的門都沒有進。后來機緣巧合讀了研究生,學(xué)的也非編程,但是會用到一些數(shù)據(jù)處理的程序,有時候的一些小的算法需要自己編寫。研究生期間用的是MATLAB和LabVIEW,相信工科的同學(xué)們都知道這兩個軟件,他有著強大的數(shù)據(jù)處理和運算能力,但是,不管是語法還是編程思想,MATLAB的編程自己并不感興趣,因為我在這個平臺上做的最多的就是寥寥幾行的數(shù)據(jù)處理語句,大多數(shù)的時間停留在做實驗和獲取實驗數(shù)據(jù)上,所以,不管是本科還是研究生,自己對嵌入式的理解幾乎為零,更別提對C語言的理解,僅僅停留在C語言必須要有一個main()作為起始語句這個層面。
研究生畢業(yè)找工作時,同學(xué)們許多都找了對口的工作,有的去了國企,有的去了航天院,站在人生的十字路口,我也面臨著抉擇。
機械行業(yè)的枯燥讓我不想從事相關(guān)的工作,國企央企的加班和工作氛圍也讓我有些抗拒,其實那時候最想去的是外企,雖然自己的英語不能說很好,但是至少六級過了,當(dāng)時自己幻想的自己還是去一家外企。可是找了幾家外企發(fā)現(xiàn)自己的能力達不到別人家的要求,最后作罷。
當(dāng)時給自己定的方向是,第一不找機械相關(guān)工作,第二找和編程相關(guān)工作,雖然自己當(dāng)時的編程能力水平可以說不高,但是自己還是一門心思想往這個行業(yè)鉆。后來機緣巧合投了一家做嵌入式軟件開發(fā)的公司,面試的時候并沒有針對技術(shù)做很強的面試,自己竟然順利通過,而且公司給的待遇也很好,自己糾結(jié)了幾天,最后欣然簽約。畢業(yè)去了這家公司,隨后便開始了一個門外漢在一家公司一遍學(xué)習(xí)一邊做項目一邊受鄙視的苦逼工作生涯。
一句話,跨專業(yè)找工作有風(fēng)險。要能抗壓,也要能受鄙視。
二、 C語言初入門
現(xiàn)在我在用Markdown編輯器寫博文,如果自己沒有從事編程行業(yè),或許自己現(xiàn)在正坐在辦公室了加著班,用著Solidworks在畫著3D零件圖,自己或許永遠也不會知道有Markdown這種編輯器可以使用,而且如此方便。
剛工作第一天,老同事扔給我一個項目工程,讓我熟悉。花了半天的時間安裝開發(fā)環(huán)境。記得當(dāng)時同事問我,你電腦上有XX IDE么,我腦袋一蒙,IDE什么意思,但是自己沒有好意思問,怕露怯。隨口說了一句沒有。他說那等會我給你發(fā)一個,順便把工程發(fā)給你你先熟悉一下。
做回自己工位,打開百度,第一件事輸入”IDE什么意思”。
集成開發(fā)環(huán)境(IDE,Integrated Development Environment )是用于提供程序開發(fā)環(huán)境的應(yīng)用程序,一般包括代碼編輯器、編譯器、調(diào)試器和圖形用戶界面等工具。集成了代碼編寫功能、分析功能、編譯功能、調(diào)試功能等一體化的開發(fā)軟件服務(wù)套。所有具備這一特性的軟件或者軟件套(組)都可以叫集成開發(fā)環(huán)境。如微軟的Visual Studio系列,Borland的C++ Builder、Delphi系列等。該程序可以獨立運行,也可以和其它程序并用。IDE多被用于開發(fā)HTML應(yīng)用軟件。例如,許多人在設(shè)計網(wǎng)站時使用IDE(如HomeSite、DreamWeaver等),因為很多項任務(wù)會自動生成。
看到這,心里舒了一口氣,原來就是開發(fā)程序的軟件啊,這把我嚇了一跳,要不要這么欺負(fù)新人?
可見自己當(dāng)時對于嵌入式的理解,完全為零。這之后,每次聽到同事們說起一個新的名詞,自己都會默默地記下來,然后找個時間去問度娘。多虧了百度,讓我慢慢的明白了什么是內(nèi)存泄漏、仲裁機制、上拉電阻、開漏輸出、大小端存儲、堆、棧等等等等的專有名詞,自己也慢慢的有信心和同事們討論代碼及其運行機理。這是后話。
打開項目工程的第一件事,自己便是瀏覽代碼,天哪,這是天書啊!這都是啥意思?
花了半個小時,找到了main(),可是為啥別的文件中也有個main()函數(shù),不是說一個工程中只能有一個main()的么?
看到 (void*)這種代碼,自己便開始懷疑自己大學(xué)學(xué)沒學(xué)過C語言。
看到 recive->buf這種代碼,自己開始懷疑自己選擇嵌入式有沒有錯。
看到#pargam location = 0x00001000這種代碼,自己開始懷疑人生。
對著電腦工程,苦逼學(xué)習(xí)了半個月,期間不停地問同事,指針什么意思,環(huán)形緩沖啥意思。剛開始同事很耐心的講解,后來同事不耐煩了,自己去去查吧!
好,查就查,誰怕誰。
一邊學(xué)習(xí)項目背景,一邊學(xué)習(xí)C語言知識,一邊查資料。
就這樣,對嵌入式一竅不懂的我,跌跌撞撞奔著嵌入式的門走了過去,雖然已經(jīng)現(xiàn)在也不敢說自己已經(jīng)入門,但是自己感覺已經(jīng)比之前更有信心,面對不懂得東西也更加從容。
對了,從畢業(yè)到現(xiàn)在,跌跌撞撞一年了。所以自己打算開通CSDN的博客,記錄自己學(xué)習(xí)嵌入式的經(jīng)歷。
算起來,從剛開始到現(xiàn)在,自己接觸到的項目中,第一個是做純應(yīng)用程序的編寫,實際上一小塊代碼,并不難,難得是項目背景的原理。對我影響最大的是后來學(xué)習(xí)并維護一款國產(chǎn)8位單片機的過程,以及在該單片機上編寫B(tài)ootLoader用于升級的經(jīng)歷,因為感覺正是這個過程,使自己真正觸碰到了嵌入式的門檻,也正是因為有了這個經(jīng)歷,讓我在后來的切換ARM 內(nèi)核編寫B(tài)ootLoader時特別有信心,而且事實證明,自己有信心是正確的。
從零學(xué)習(xí)嵌入式這個專欄,自己打算根據(jù)自己這一年的項目經(jīng)歷以及學(xué)習(xí)到的知識,從以下幾個方面慢慢講起。當(dāng)然,自己畢竟經(jīng)驗和知識有限,所寫內(nèi)容不可避免出現(xiàn)紕漏,還望發(fā)現(xiàn)的童鞋積極指正,我們一起進步。
從零學(xué)習(xí)嵌入式(目錄)
本專欄主要包括以下知識點。
- 結(jié)構(gòu)體與聯(lián)合體
- 指針與內(nèi)存地址
-函數(shù)指針及其應(yīng)用
-指針傳遞 - 預(yù)編譯及相關(guān)代碼
-#Pargam 語句
-#define 語句 - 定時器
- 寄存器
- 堆棧
-芯片內(nèi)存分配機制
-堆區(qū)和棧區(qū) - 單片機組成原理
-CPU
-外設(shè)
-串口通信
-645協(xié)議
-485總線 - Bootloader升級原理
- BootLoader代碼段分享
暫時想到這么多,以后會根據(jù)自己遇到的實際情況追加新的內(nèi)容。
總結(jié)
- 上一篇: 复盘模型_如何运用MT4软件进行复盘,提
- 下一篇: android内存及内存溢出分析