- 嵌入式學(xué)習心得體會(huì ) 推薦度:
- 相關(guān)推薦
嵌入式學(xué)習的心得體會(huì )
導語(yǔ):嵌入式是指以應用為中心,以計算機為基礎,并且軟硬件可裁剪,適用于對功能、可靠性、成本、體積和功耗有嚴格要求的專(zhuān)用計算機系統。下面是小編給大家整理的嵌入式學(xué)習的心得體會(huì ),希望能給你帶來(lái)幫助!
本人本科學(xué)的是電子信息工程專(zhuān)業(yè),其實(shí)這個(gè)專(zhuān)業(yè)和嵌入式?jīng)]有多大的關(guān)系,要說(shuō)有關(guān)系就是簡(jiǎn)單的講了下C語(yǔ)言語(yǔ)法,學(xué)完之后還不知道什么是C語(yǔ)言,只記住了char,int,long等占幾個(gè)字節,if, while,for循環(huán)什么的,感覺(jué)也就能算一些小學(xué)就會(huì )的題目,全國計算機二級C語(yǔ)言也就糊涂的過(guò)了。我這個(gè)專(zhuān)業(yè)沒(méi)學(xué)過(guò)C++,一開(kāi)始不知道什么是面向對象,這可能會(huì )讓人笑話(huà)了。不過(guò)這說(shuō)的是實(shí)話(huà),本科的時(shí)候,學(xué)院安排的課程大部分偏硬件部分,動(dòng)手機會(huì )比較多,自然而然比較喜歡硬件方面。
在大二的時(shí)候就聽(tīng)學(xué)長(cháng)說(shuō),單片機很難學(xué),那時(shí)候經(jīng)學(xué)長(cháng)介紹,淘寶買(mǎi)了本郭天祥老師出的書(shū)《51單片機C語(yǔ)言教程》,一開(kāi)始還真是不怎么懂,感覺(jué)有點(diǎn)像是看天書(shū),然后硬著(zhù)頭皮去看,當我把51的結構看完了,就不像一開(kāi)始那樣一頭霧水了,自己在紙上把51的結構圖默畫(huà)一遍,然后再把各個(gè)寄存器功能寫(xiě)一下,各個(gè)功能口的結構粗略畫(huà)了下,然后覺(jué)得51整體已在我心中了,雖然沒(méi)有什么作用,但是至少懂得這門(mén)課要怎么去學(xué)習。其實(shí)有些時(shí)候不是這個(gè)東西你不會(huì ),而是在不會(huì )的時(shí)候自己先告訴自己這個(gè)太難了,自己先放棄了。
在大三的時(shí)候,第一學(xué)期課比較少,我就經(jīng)常待在圖書(shū)館,會(huì )去蠻看些專(zhuān)業(yè)相關(guān)的書(shū)籍,現在想想,那時(shí)候也是機緣巧合下,看到了一本書(shū)《從51到ARM》,講述的是從51系列單片機的一般知識出發(fā),將arm處理器和51系列單片機進(jìn)行對比,引導讀者去理解和學(xué)習arm處理器的知識。那個(gè)時(shí)候也有考慮到以后就業(yè)的問(wèn)題,就想到一件事情,如果去應聘工作的話(huà),每個(gè)工科院校電子信息類(lèi)的畢業(yè)生都會(huì )異口同聲地說(shuō):我會(huì )51系列單片機。當他說(shuō)這句話(huà)的時(shí)候,他和別人是站在同一起跑線(xiàn)上的?晌覀兺耆锌赡芎蛣e人不站在同一起跑線(xiàn)上。正是這本書(shū)給我開(kāi)啟了另外一扇大門(mén),讓我初步了解了嵌入式。后來(lái)去報考全國計算機等級考試三級教程——嵌入式系統開(kāi)發(fā)技術(shù),在圖書(shū)館奮斗了兩個(gè)月,最后取得優(yōu)秀的成績(jì),也讓我進(jìn)一步了解嵌入式系統。
在大四的時(shí)候,我們有嵌入式的選修課,不過(guò)當時(shí)因為考研的緣故,就沒(méi)有去上過(guò)這門(mén)課,好可惜呀!但是,在選擇讀研研究方向的時(shí)候我還是毅然選擇了嵌入式方向,我知道這將成為我未來(lái)三年研究的方向。這學(xué)期(研一下學(xué)期),很開(kāi)心能夠再次接觸嵌入式系統這門(mén)課程,對于導師教的這門(mén)課程,我覺(jué)得自己上課還是蠻認真聽(tīng)講的,當然也被師在臺上那講得頭頭是道,溫文儒雅的風(fēng)姿所吸引。對于沒(méi)有學(xué)過(guò)微機8086的我,有些時(shí)候,老師用微機與嵌入式的對比讓我頭腦沒(méi)有相關(guān)概念...
首先,我對嵌入式在概念上有了一個(gè)比較精確的了解。嵌入式是指以應用為中心,以計算機為基礎,并且軟硬件可裁剪,適用于對功能、可靠性、成本、體積和功耗有嚴格要求的專(zhuān)用計算機系統。它由硬件平臺和系統軟件組成。硬件平臺指嵌入式處理器和與之通過(guò)接口連接的外圍硬件平臺。系統軟件是指實(shí)時(shí)操作系統和用戶(hù)應用軟件。
談到硬件部分,我首先想到的是嵌入式處理器那些外圍功能模塊。對于這部分的學(xué)習,我當初花了好長(cháng)時(shí)間看《深入淺出ARM7——LPC2400》這本書(shū),現在想想覺(jué)得自己學(xué)習方法沒(méi)用對,完全沒(méi)有那個(gè)必要,自己卻花了大把時(shí)間在看這些寄存器引腳的使用,因為單純的看過(guò)之后還是很容易忘的,之后在進(jìn)行實(shí)驗的時(shí)候還是翻書(shū)來(lái)查就證明了這一點(diǎn)。不過(guò)一些最基本的模塊,例如通用輸入/輸出口(GPIO),通用異步收發(fā)器(UART),向量中斷控制器(VIC),外部中斷輸入和定時(shí)器/計數器還是需要看書(shū)認真去記住那些常用的引腳功能。對于CPU異常這部分,我一開(kāi)始以為異常就是中斷,因為處理程序流程設計是相似的,都是請求處理器打斷正常的程序執行流程,進(jìn)入特定程序的一種機制。當時(shí)還對老師提出的一個(gè)看法有點(diǎn)疑義,51可以處理中斷嵌套而ARM處理器卻不能?我當時(shí)腦子里面就在想:中斷不都是有硬件設備產(chǎn)生的,那按常理來(lái)講ARM處理器也可以處理的呀。后來(lái)在認真查書(shū),發(fā)現CPU異常有7種:復位,數據中止,中斷,快中斷,預取中止,未定義,軟件中斷。而異常向量會(huì )使CPU轉入異常入口地址執行程序,開(kāi)始了異常處理。同理的話(huà),中斷向量使CPU轉入中斷入口地址執行程序,開(kāi)始了中斷處理。即當發(fā)生IRQ中斷時(shí),程序返回地址被存入該IRQ中斷模式下的LR,如果繼續發(fā)生IRQ中斷,那第二次的中斷返回地址也還是被存入該IRQ中斷模式下的LR中,那先前發(fā)生中斷時(shí)候存入的程序返回地址將被覆蓋掉,導致不能返回正確的位置。在我解決這個(gè)問(wèn)題的期間,每次睡前思維準會(huì )定格在這問(wèn)題上,久久不能繞出來(lái),其實(shí)有時(shí)候查書(shū)還是最好的解決方案,因為網(wǎng)絡(luò )資源只能提供給我們部分的參考資料。
對于A(yíng)RM匯編語(yǔ)言這部分的學(xué)習,我認為是需要重視的,學(xué)匯編不是說(shuō)用這語(yǔ)言做多牛逼的事情, 問(wèn)題的關(guān)鍵在于, 學(xué)透了匯編會(huì )使你真正理解計算機。另外一方面,只要以后在嵌入式工作中你遲早會(huì )在某個(gè)陰暗的角落里遇到匯編!安还苣愠姓J不承認, 現在的CPU沒(méi)有直接跑高級語(yǔ)言的, 哪怕是虛擬機也都是類(lèi)似匯編的指令集.當遇到崩潰分析, 性能優(yōu)化甚至編譯器抽風(fēng)等等的時(shí)候, 匯編是你最后一根救命稻草(這句話(huà)是福來(lái)師兄講的)!睘榇怂o了我們一份資料,周立功lpc21xx/lpc22xx系列ARM7啟動(dòng)代碼分析,主要講述的是startup.s文件的分析,看了下才發(fā)現老師上課講的那個(gè)啟動(dòng)代碼分析很多不理解之處這里都有詳細的介紹,這分析太精辟了。
學(xué) ARM7這么久,我認為從硬件上講,一方面就是學(xué)習接口電路設計,另一方面就是學(xué)習匯編和C語(yǔ)言的板級編程。如果從軟件上講,就是要學(xué)習基于A(yíng)RM處理器的操作系統層面 的驅動(dòng)和移植。這些對于我們初學(xué)者來(lái)說(shuō)必須明確,要么從硬件著(zhù)手開(kāi)始學(xué),要么從操作系統的熟悉到應用開(kāi)始學(xué),但不管學(xué)什么,只要不是純的操作系統級,硬件的寄存器類(lèi)的東西還是要能看懂的,基于板級的匯編和C編程還是要會(huì )的。
μC/OS-II 是一種基于優(yōu)先級的搶占式多任務(wù)實(shí)時(shí)操作系統,包含了實(shí)時(shí)內核、任務(wù)管理、時(shí)間管理、任務(wù)間通信同步(信號量,郵箱,消息隊列)和內存管理等功能。它可以使各個(gè)任務(wù)獨立工作,互不干涉,很容易實(shí)現準時(shí)而且無(wú)誤執行,使實(shí)時(shí)應用程序的設計和擴展變得容易,使應用程序的設計過(guò)程大為減化。μC /OS-II是一個(gè)完整的、可移植、可固化、可裁剪的占先式實(shí)時(shí)多任務(wù)內核。μC/OS-II絕大部分的代碼是用ANSI的C語(yǔ)言編寫(xiě)的,包含一小部分匯編代碼,使之可供不同架構的微處理器使用。
μC/OS-II可以大致分成內核結構、任務(wù)管理、時(shí)間管理、任務(wù)之間通信與同步4個(gè)部分。內核結構是操作系統的處理核心,包括操作系統初始化、操作系統運行、中斷進(jìn)出的前導、時(shí)鐘節拍、任務(wù)調度、事件處理等多部分。任務(wù)管理部分中的內容都是與任務(wù)的操作密切相關(guān)的。包括任務(wù)的建立、刪除、掛起、恢復等等。因為μC/OS-II是以任務(wù)為基本單位調度的,所以這部分內容也相當重要。μC/OS-II中的最小時(shí)鐘單位是timetick(時(shí)鐘節拍),任務(wù)延時(shí)等操作是在時(shí)間管理這部分完成的。任務(wù)之間通信與同步為事件處理部分,包括信號量、郵箱、郵箱隊列、事件標志等部分;主要用于任務(wù)間的互相聯(lián)系和對臨界資源的訪(fǎng)問(wèn)。μC/OS-Ⅱ操作系統是在main()中建立的,首先要系統初始化,OSInit(),初始化系統所有的變量和數據結構。然后進(jìn)行任務(wù)的創(chuàng )建,OSTaskCreate();之后進(jìn)行多任務(wù)的啟動(dòng),OSStart()。在進(jìn)行任務(wù)的并行處理的時(shí)候,一個(gè)任務(wù)的程序是順序執行的,而不同任務(wù)的程序卻是并行執行的。從應用程序的觀(guān)點(diǎn)來(lái)看,此處的并行處理只是一個(gè)假象。而實(shí)際上它是通過(guò)實(shí)時(shí)操作系統的內核控制任務(wù)之間的切換來(lái)實(shí)現的,也就是任務(wù)調度啦。
μCOS-Ⅱ總是運行進(jìn)入就緒態(tài)任務(wù)中優(yōu)先級最高的那一個(gè)。當創(chuàng )建新任務(wù)時(shí),或當前任務(wù)調用一些可能把自己掛起的系統函數(如OSMBoxPend)時(shí),內核就要進(jìn)行任務(wù)切換。在上述的場(chǎng)合,任務(wù)級的調度是由函數OSSched()完成的。
在一個(gè)多任務(wù)的應用工程中,任務(wù)之間并不是完全獨立的,它們存在一些需相互配合的處理,這些相互配合是靠任務(wù)間的通訊或同步,信號量、郵箱、消息隊列可以實(shí)現這種任務(wù)與任務(wù),任務(wù)與中斷服務(wù)函數間的通訊與同步。
郵箱可以使一個(gè)任務(wù)或者中斷服務(wù)子程序向另一個(gè)任務(wù)發(fā)送一個(gè)指針型的變量。而信號量不可以,其只能發(fā)送信號量。消息隊列可以使一個(gè)任務(wù)或者中斷服務(wù)子程序向另一個(gè)任務(wù)發(fā)送以指針?lè )绞蕉x的變量。因具體的應用有所不同,每個(gè)指針指向的數據結構變量也有所不同,實(shí)際上,我們可以將消息隊列看作多個(gè)郵箱組成的數組,只是它們共用一個(gè)等待任務(wù)列表。
我們實(shí)驗所用的ARM開(kāi)發(fā)工具是ADS1.2。ARMADS全稱(chēng)為ARM Developer Suite,是ARM公司推出的新一代ARM集成開(kāi)發(fā)工具,F在A(yíng)DS的最新版本是1.2,支持軟件調試及JTAG硬件仿真調試、支持匯編、C語(yǔ)言、C++源程序,具有編譯效率高、系統庫功能強等特點(diǎn)。在安裝ADS1.2的時(shí)候出現過(guò)小問(wèn)題,當時(shí)我的電腦是64位的,安裝完之后顯示不了,后來(lái)百度查找到原因,竟然是文件夾放錯地方,應該放在Program Files(x86)這個(gè)文件夾中。后來(lái)有同學(xué)問(wèn)我這方面的問(wèn)題,但是發(fā)現他們的ADS1.2安裝不了的原因是因為L(cháng)icence弄錯了。在打開(kāi)CodeWarrior for ARM Developer Suite的時(shí)候,一定要記得選DebugInChipRAM,否則Make都出現很多error,而且那些幾乎都是未定義函數的錯誤。之后就進(jìn)行Debug,調試成功之后會(huì )跳出AXD的界面,選擇Options里面的ConfigureTarget,再添加H-JTAG的文件,之后點(diǎn)擊GO,程序會(huì )跳出匯編語(yǔ)言的界面,再點(diǎn)擊下就跳到C語(yǔ)言程序入口地址,之后再點(diǎn)擊下GO,程序就開(kāi)始跑起來(lái)。前面所述的這些步驟是理想情況下程序自身沒(méi)有發(fā)生錯誤,當然在調試過(guò)程中,還是有很多硬件上的問(wèn)題,一方面是有些開(kāi)發(fā)板可能用久了,用JTAG并口連接的時(shí)候接觸不良,很容易自動(dòng)掉線(xiàn),常出現未連接設備的的Error,還有一方面是跑程序過(guò)程常會(huì )出現兼容性的問(wèn)題,導致程序AXD調試時(shí)候會(huì )出現卡在某個(gè)部分一直進(jìn)入死循環(huán),這個(gè)后來(lái)是解決了,但是偶爾還是會(huì )出現這個(gè)BUG。
通過(guò)這學(xué)期對嵌入式的學(xué)習,我發(fā)現自己尚未掌握的知識點(diǎn)還是蠻多的,尤其是對μC/OS-II的移植方面,我只是理論上粗略了解,沒(méi)有經(jīng)過(guò)實(shí)驗的操作。還有對存儲器加速模塊(MAM)這方面不夠了解,主要一方面當初在做消息隊列采集實(shí)驗(KeySem_SampdataQeue),這個(gè)模塊被代替掉,不需要使用它,所以后來(lái)也沒(méi)有去掌握相關(guān)知識點(diǎn)。對于任務(wù)就緒算法這部分,我只是上課的時(shí)候聽(tīng)“懂”了,課后自己再看完全懵了。對于CAN總線(xiàn)調試的部分,老師上課沒(méi)有講到這部分的介紹與應用,但是后來(lái)通過(guò)自己對實(shí)驗室師兄們所做的課題初步了解,發(fā)現我自己有必要去弄懂它的構造和原理。
“看書(shū)不要希望一次就會(huì ),一次就明白是什么意思,也不要死記硬背,看不明白也沒(méi)關(guān)系,以后遇到了知道去哪里去找就可以了,以后遇到的多了,也就記住了,遇到的少的,忘記也就忘記了!币廊挥浀卯敵醪欢趺唇鉀Q某個(gè)問(wèn)題的時(shí)候請教李碩師兄,師兄對我說(shuō)的這番話(huà)。自己在μC/OS-II這部分內容掙扎了好久,現在想想,覺(jué)得當初不應該一上來(lái)就直接閱讀內核源代碼,看了一些自己把頭撞破也想不明白的事,這樣直接正面打擊我學(xué)習嵌入式的積極性。學(xué)習啊,還是得要循序漸進(jìn)。如果你想學(xué)習嵌入式一定要有塊學(xué)習板?丛俣嗟囊曨l,看再多的書(shū),也不如自己動(dòng)手試一下,看著(zhù)很簡(jiǎn)單的東西,做起來(lái)就可能遇到很多的問(wèn)題,遇到問(wèn)題找到原因,解決問(wèn)題,只有這樣才能學(xué)到東西。記得我第一次仿寫(xiě)led的驅動(dòng),想自己試一下,可是自己一試,就出了好多的問(wèn)題,那個(gè)led弄了我一天才把led燈點(diǎn)亮。所以不要眼高手低。
對于初學(xué)者,有一點(diǎn)小建議,我們拿到一個(gè)開(kāi)發(fā)板,很興奮也很激動(dòng),想法自然也很多,想用開(kāi)發(fā)板實(shí)現自己的這個(gè)想法,實(shí)現那個(gè)想法,然后又不知道從何下手,然后就去論壇中發(fā)一個(gè)貼,最后等著(zhù)別人去回復,當見(jiàn)沒(méi)人回復就開(kāi)始抱怨。這種做法是不可取的,有想法是好的,我們要實(shí)現自己的想法也是有前提的,首先,我們對這部分知識了解嗎?如果不了解就去google一下(最好別用百度,不太好用),了解了一些,也就大概知道要怎么做了。如果再遇到問(wèn)題,再去發(fā)貼問(wèn),這樣也顯得咱們有水平。比如自己連串口是什么都不太清楚呢,就問(wèn)串口通信怎么做啊,就是人家把代碼給咱,咱也不明白是怎么回事啊。見(jiàn)多識廣,熟能生巧。多看代碼,要從代碼中讀出代碼的意思來(lái)。自己平時(shí)也要多寫(xiě)代碼,多練習(這一點(diǎn)我做的不好,寫(xiě)的少)。
最后,我想說(shuō)的是嵌入式系統的學(xué)習和研究一旦我們達到了一定的水平后,其實(shí)很簡(jiǎn)單,就是如何去看CPU和相關(guān)芯片的Datasheet!
【嵌入式學(xué)習的心得體會(huì )】相關(guān)文章:
嵌入式學(xué)習心得體會(huì )(通用8篇)04-25
嵌入式就業(yè)前景06-29
嵌入式的就業(yè)前景07-04
嵌入式實(shí)習報告02-25
嵌入式技術(shù)就業(yè)前景06-29
嵌入式行業(yè)的就業(yè)前景07-01
學(xué)嵌入式就業(yè)前景06-26
北京嵌入式就業(yè)前景06-27
嵌入式就業(yè)前景好嗎06-26