嵌入式學習心得體會(7篇)

學識都 人氣:2.43W

我們得到了一些心得體會以後,將其記錄在心得體會裏,讓自己銘記於心,這樣能夠培養人思考的習慣。那麼心得體會怎麼寫才能感染讀者呢?以下是小編精心整理的嵌入式學習心得體會,僅供參考,大家一起來看看吧。

嵌入式學習心得體會(7篇)

嵌入式學習心得體會1

一、如果非常多人都想做Linux,那麼就要對Linux要比較熟悉。這個熟悉不是說對內核,對代碼有多瞭解,而是至少要會基本的操作,非常難想象讓一個連編譯程式,編輯文本文件都非常困難的人去弄嵌入式的軟件吧。總之在進入嵌入式這個領域之前要對自己評估一下,看看自己是不是準備好了去學習嵌入式相關的東西。

二、要捨得花錢買研發板。公欲善其技,必先利其器。也就是說,理論上可能掌控了非常多,不過不去實踐,那隻能是紙上談兵,這樣是無法學好嵌入式的。弄個研發板自己擺弄擺弄,即使什麼都不懂,也能按照說明書把廠家給的程式下載到研發板上運行運行,先知其然,然後再通過具體的學習知其所以然,這樣能避免學習中的枯燥。目前市場上研發板的種類繁多,相同CPU的板子價格卻相差非常多,令非常多人都不知道怎麼選擇購買。我的看法是,儘量買大廠的產品。因爲在初學階段學習資料少是個非常頭疼的事,非常多時候都是無從下手,不知道怎麼去做,那麼隨研發板附送的資料就非常重要了。大廠技術比較強,附帶的程式都是能在板子上運行的,例如我買的優龍ST2410這個板子(不是廣告啊),光盤上帶了一個bootloader,個2.4.18的內核,更有一個cramfs,這些程式的原始碼都是廠家事先做好或修改好的,完全適用於初學者使用。而有些實力不行的小廠家的資料不齊全,我們學習的時候需要自己弄bootloader什麼的,那入門就非常難了。不過大廠的板子都非常貴,大家能根據預算來選擇適合自己的研發板,不過無論怎樣,在學習上投資都是值得的。

三、不要事無鉅細的學習,要有明確的目標。我最開始給自己制定的學習計劃是:學習arm體系結構->學習arm彙編->自己移植bootloader ->自己移植kernel ->做應用,不過不久就被我否決了,因爲這個過程實在是太枯燥太痛苦了,在學習資料少,沒人指導的情況下根本無法進展。於是我決定使用廠家的代碼來“玩”研發板,自己弄些應用上去。先是完全使用廠家給的bootloader,kernel,cramfs。之後發現cramfs中的一些控制Linux初始化的文件不符合我的需求,於是修改cramfs,刪除了QT,修改了網卡初始的IP地址,安裝到板子上能運行了之後就開始嘗試做一些應用,比如hello world這樣的程式。最後移植了一個mpg123到板子上。完萬能在不知道原理的情況下來使用板子的一些功能,等熟悉板子了再回頭學習其中的道理,這樣就容易一些。學習嵌入式就是這樣,根據問題來選擇學習的內容,否則會非常盲目,最後就失去信心了。

四、要有耐心。不能否認,在學習一門自己完全不瞭解的技術是非常煩人的。嵌入式的複雜在於他的交叉性。也就是說爲了研究某一個嵌入式的問題,你有可能得學習非常多其他的知識,比如操作系統,編譯,體系結構等等,那麼對於這種情況需要我們有足夠的耐心。我在交叉編譯mpg123的時候前幾次無論怎麼修改makefile都無法編譯成功,最後我發現我用的arm-linux-gcc是2.9版本的,比較老,於是我換成新的3.4.1版本,就ok了。

以上是我初學嵌入式所獲得的一些淺顯的經驗,基本都是基於軟件方面的,硬件的DIY我就不行了。希望我的經驗能給大家一些幫助。

剛剛和LUPA的嵌入式版主要了uboot的代碼,接下來的我想研究研究廠家的bootloader代碼然後移植一下uboot。

嵌入式學習心得體會2

這個題目很大,給人一種感覺我好像很成功,其實不然。實際上自己水平不高,甚至很低,但是做過了一些曲折的學習道路,同時把自己真實的學習歷程表達出來,希望對後來者有借鑑的意義,甚幸!工作三年、幾成廢人!

我XX年畢業於華中地區的一個理工科大學,專業是機械電子,我當時已經簽了一家內陸某個省級機關工作,家裏八輩是農民,並且很偏遠,能夠進入這樣的地方是祖墳有風水。但在畢業前夕有個進入it的機會,我本想進去的,家裏人極力反對,阻力可想而知。同時要交4000元的違約金,對我來說是天文數字。大學裏的費用很多是借的,幾乎將近一半的費用是在大學勤工儉學掙的,爲了省錢,高中一個學期回家一次,大學一年回去一次。並且我個人也有特殊的人生背景(悲景更確切),這裏不多說了,寫十篇也寫不完,同時偏離主題。這樣我就參加了工作。一張報紙一杯茶的日子,幾乎下班後有種很空虛和恐慌的感覺。在工作中雖然是與自己專業有點關係,但是很少。專業幾乎荒廢。我自己也思考,如果再不出去,自己將會成廢人,只好讓國家養了。兩年後決定出去,但是幾成廢人,誰要呢,只好到學校去鍍金。這是中國教育和社會的悲哀!

至於專業就改爲計算機方面,聽說好找工作,我說實話不是很對計算機特別感興趣,生存第一需要。不要笑我,哈哈!

考研成績出來,超過了國家線幾十分。那個方向要兩個,我第三,但是那年非碘,不面試就按分數來排,自然我落選了。其實給我面試機會也不一定要我,哈哈,自己幾斤幾兩很清楚。

最後調劑到另外一個學校,交錢,咬咬牙,交吧!現在仍然債臺高築!

進入學校前夕

爲什麼要把這段列出,看後就知道了。

單位有網絡,經常上網查些英語資料,在那裏唯獨英語沒有丟很多。於是我就在網上查資料,學什麼好呢,最後確定學嵌入式把,聽說跟硬件相對比較緊密!而我在大學裏多少學習了數字電路,單片機等,所以多少也有所利用,不會真的一無所知。當然在這之前也自學過數據結構,計算機組成原理等。c語言在大學就學了。哈哈這就是我的家底。

我知道自己的基礎差,於是我就拿操作系統,數據庫、數據結構、c++來看,機關有這個好處,空餘時間多,於是平常就看書,很痛苦,沒有人請教。

另外就上網到論壇上去,我就到各個專業的技術論壇,其實是電子論壇和嵌入式論壇。我幾乎沒有發帖,幾乎把幾個大型的出名的論壇的帖子翻遍了,雖然有很多重複的,我才知道嵌入式是個什麼東東。這些帖子對我以後的學習產生了極大的影響。

最關鍵兩點:

1、嵌入式是什麼?

2、嵌入式需要哪些知識?

知道了這兩點,好辦!我就開始規劃學習路線。計算機的基本理論不能丟,於是重點看組成原理,數據機構,操作系統、c++。同時論壇上了解到,實時操作系統ucos是一個很好的嵌入式操作系統,對初學者很好。於是我就買了一本書,但是代碼在電腦裏調不通,網上也有很多相同的問題,我就看書,分析代碼,一遍不行就兩遍,三遍,這樣纔看了入了門,才知道什麼是進程。原來看操作系統書時,根本就不知道進程是個什麼東西。

在這段時間掌握的東西不多,但是,對我以後的影響很大,我想起了大學時一個同學跟我說過了一句話:大學裏最重要的不是學到了什麼,最重要的是學會怎麼學!大概是這個意思。

進入我的避難所

對我來講,再次進入大學不再是大學,而是避難所。希望這次進入給我喘氣和養精蓄銳的機會和時間。我是這樣認爲和實踐的。

在學校我有三件事:上課,上圖書館,上網。

對於上課,學校開了很多課程,非常好,很多是名人名師講解,於是很多同學都想學,都去聽。我也考慮過,最後放棄。我是這樣認爲的,時間是有限的,什麼都想學,什麼都學不成。於是我把我自己學的課進行了分化,一般的課程通過就行,重要的一定好好學。我希望不要什麼爭論學習課程多和少的問題,這僅僅是我的看法。所以我的成績應該是很差的。分數低。好在後來的單位沒有要我的成績單,否則就慘了。

我個人感覺是上圖書館的效率比在寢室裏高多了,這是我的經驗。

嵌入式學習心得體會3

研究嵌入式系統已經有快兩年的時間了。很慶幸自己當初選擇了嵌入式系統作爲自己的研究和職業方向,可以說它是一種催化劑,讓我自身的修養和研究能力都有了很大的提高。

在嵌入式系統的大門前,我只能算是剛剛看到這個大門的臺階,但這段小小的距離讓我受益頗多,現將其中心得奉獻出來,歡迎高手前輩們指正,以供剛接觸的新人蔘考。

在寫之前,想先寫一句話,千萬不要以爲你是天才,所謂天才即勝別人N倍的人,如果你真認爲你是天才,請以天才的標準來要求自己,將自己付出和別人的比例以N:1來進行。

(1)學習與生活心態

很多朋友都是在剛步入大學校門開始接觸計算機或者其他。大學是一個很讓人迷茫頹廢的地方,可能你在高中躊躇滿志,但在大學的管理機制下卻心態漸糜。能夠在大學(大一)裏找到自己人生之志的同學有多少?目標要明確,不要得過且過,不要追逐熱門的東西。

不管在什麼時候,心裏都要有自己的信念和理想,不要被其他東西左右了自己。要從興趣和競爭出發,因爲這纔是你產生動力源的地方。學東西時,要讓自己先喜歡上它,要學會享受學習它的時間,喜歡喬XXX的都知道,喬老爺子最常說的一句就是要享受比賽的時間。

因爲只有你喜歡上了它,享受了它,纔不會被它所產生的壓力壓倒自己,不要產生一種厭惡的心理。而且心態要調整,不要一味的蠻學,死學,在沒有什麼興趣學的時候可以先玩幾天,在回過頭來,或者用其他的方式來轉換。要抱着一種十年方能磨一劍的心理,紮紮實實從基礎開始,不要爲高速開發的一些現象所迷惑,那些都只是軟件的功勞。

我個人認爲搞編程,英語和數學很重要,大家一定要時時的抓,至於怎麼抓那就是另外一回事了,當然其他的知識也要汲取,可以多接觸點天文,地理,人文方面的東西來補充自己。轉換的生活方式。要學會生活,在人的一生中,都會遇到一些很不開心的事,或者大大小小的意外,孫子兵法裏面一句大意就是說,戰場上要會將劣勢轉成優勢,即最大的劣勢很可能就是你的優勢所在。

一個打擊你可以把他變爲前進的動力,不必爲了一點挫折和捶胸頓足,不必爲了一點小事爭吵不休。空閒的時候可以躺下來看看天,你就會明白自強不息,厚德載物之理。(看到一些爲了失戀或者其他而墮落的人真的很難受和可惜)。

要給人以幫助。別人有困難時或者一些舉手之勞在自己解決範圍內的盡力幫之,這對自己不會損失什麼,相反在對方心裏能夠樹立你的形象和增加好感。記住,給人之恩時也是給你自己鋪路,這個世界不是靠你一個人可改變的。

(2)編程語言的選擇語言的爭論。

很多初學擇,老是在學習何種語言上舉棋不定,試問,中國牌子有幾個不被罵的,試問,世界上哪部影片沒人說他壞話的?術業有專攻,各司其職,每個語言的出現肯定都有自己價值和領域的範圍,不同的只是價值和領域的高級和大小。

就像高,矮,胖,瘦組成一個“型”。但是技術是進步的,這個進步也是在舊的基礎上。放心,技術再飛躍也不會今天奔I,明天扣肉的迅速,在學習的同時也要時時關注整個語言界的走勢(貌似哪個偉人說的與時俱進),保持一種同步曲線的前進。語言能幹什麼?能問這句話,很欣慰。

表明你是從基礎學起纔會問出這樣的話來。但換而言之你一開始對這門語言調查的信息不足。廟算者勝,對自己身邊的事物瞭解是非常重要的,這也能說明說你的教材或者教導你的人不夠充分。如果是我對新手交流,我會花足時間讓他明白這門語言是什麼,能幹什麼,整個體系等等。

這樣在學的時候,對同一條語句上的理解你可能跟別人就不一樣了,因爲你知道這門語言的體系架構,你可以從更多的特性角度去挖掘使用它。提高自己對語言閱讀能力。如何快速的進步?可以告訴你沒有一步登天的辦法,但是也可以告訴你如何讓你快速掌握你所學的技術。多讀他人代碼,多領悟他人思維,多給自己出難題,多幾種方法來解問題,多將語言的思想和身邊的事物聯繫起來。想想你是怎麼掌握普通話的,方法就不具體說了。

編程的思維。計算機是充滿誘惑的東西,很多人都說熱愛計算機,那只是它的表面,你熱愛的只是他的一種擴展性的東西。能學計算機我很高興,因爲計算機從某種意義上來說將空間的距離給消除掉了。這裏沒有流血,沒有犧牲。你可以以一種藝術家的思維來塑造它,可以以偵探的邏輯思維來解決它,可以以一種戰爭狂人的思維來摧毀它。

你可以將你的這種思維體現在代碼和整個佈局裏,不要驚異別人代碼思維的異風,你也有自己的思維風格,你也可以,你也可以用自己代碼讓別人驚異。記住你學東西時更多的要體會他的思維,比如數學,微積分,離散,無數的定理,你學完以後可能永遠都用不到,但是你可能有這種感覺,在你碰到某一問題時,這一問題的性質和你學到的東西很類似,但是中間就是差了一點東西,對了,這就是它思維上的一種運用,一種抽象,一種轉換。

嵌入式學習心得體會4

目前最常見的嵌入式LINUX方面,我認爲大概3個:

1、嵌入式LINUX上層的應用,包括QT的GUI開發

2、嵌入式的LINUX系統開發

3、嵌入式的驅動開發

學習嵌入式:

第一、C語言要掌握(硬件略懂),C語言是所有編程語言中的強者,單片機,DSP,類似ARM的種種芯片的編程都可以用C語言搞定,因爲它可移值性強,編譯效率高,運算速度快,便於實現理更復雜的的數據結構。上層應用和數據存儲,我推薦使用C++語言。

第二、學習一種嵌入式的處理器架構,個人推薦32位的處理器,像ARM,因爲嵌入式開發8位的處理器顯得有點低端,大多數只能用作簡單的工控.

第三、學習一種嵌入式操作系統,像LINUX,WINCE等都可以,LINUX更好。

ARM是一種微處理器,已遍及工業控制,消費類的電子產品,通信,網絡,無線等各類的產品基於ARM技術的微處理器已佔75%以上的市場份額,可見其技術已逐滲入到我們生活中的各個領域,像手機就是用ARM7 ARM9 ARM11的微處理器技術開發的。嵌入式系統最常見的ARM系列,ARM7,ARM9,ARM11,cortex-A8等。

我們都是曾經從大學裏走出來的迷茫羊羔,工作以後我才知道,在大學裏不是學到了什麼,而是學會怎麼去學,相信自己,理清自己的思路,根據自己的性格,剖析自我適合往哪方面發展。

嵌入式學習心得體會5

首先,我們學習的課本是嵌入式系統應用教程。我學習的體會是這樣的:開始時,由於是剛剛入門,對老師書的好多東西是好奇的,好多名詞也是新鮮的,不過不太懂什麼意思。但是慢慢的,瞭解的深入讓我有了更深的感觸和體會。

在嵌入式的學習過程中,讓我瞭解了什麼是嵌入式系統。它就是以應用爲中心,以計算機技術爲基礎,軟硬件可定製,適用於不同應用場合,對功能、可靠性、成本、體積、功耗有嚴格要求的計算機系統。他一般由嵌入式微處理器、外圍硬件設備、嵌入式操作系統、用戶應用程序四個部分組成,用於實現對其他設備的控制、監視或管理功能。嵌入式系統已經應用於科學研究、工業控制、軍事技術、交通通信、醫療衛生、消費娛樂等領域,人們日常使用的手機、PDA、汽車、智能家電、GPS等均是嵌入式系統的典型代表。

一開始我們就學習嵌入式的系統的基礎部分,那很簡單,就是一些定義或是介紹之類的。在進入第二章時,就開始學習了嵌入式開發過程中的主要操作系統——linux,在接下來的課程中,我發現嵌入式的學習過程還是蠻有趣的。在對linux的學習中,我們對它有了一點點的瞭解,接着就是學習一虛擬機的方式安裝linux。對我來說有趣的就是安裝的過程了,首先我們跟着老師的腳步走,學會了怎麼安裝,在自己動手進行對它的安裝,這個過程是簡單而有趣的。這樣的開始讓我對它充滿了興趣,也對以後的學習充滿了信心。

其次就是安裝好了之後,老師就更深一步的教我們應用了。在這是老師首先交給我們的是一些簡單的命令應用,Linux具有很豐富的命令,絕大多數命令具有大量的參數。

在學習命令的過程中,只要你認真的看着老師操作還有認真聽着他講,你就會發現有些命令的操作還是很簡單的,不過在操作的過程中,我也有遇到有些困難,會出現你按照書上學習的例子,將命令輸入終端時會出現你不想要的結果,也就是錯誤的結果。這是問問旁邊的同學或是懂的同學就可以解決了。

在對於這部分的學習中,讓我知道了命令對於嵌入式的重要性。它是linux的重要內容,linux中所有的功能都是通過命令執行。在實際應用中,爲了減少系統開銷,經常不使用圖形界面,此時,對系統的所有操作都需要以命令方式來執行。在嵌入式系統開發過程中,由於目標機的性能和配置比較低,因此,一般情況下目標機僅具有命令窗口而沒有圖形界面,對目標機的所有操作都通過命令來實現。

還有的那就是進一步學習與嵌入式系統開發相關的linux的服務,他們的啓動、設置等的操作和應用。而在學習之中,我們主要介紹的是嵌入式系統中開發工程使用的TFTP、Telent和NFS服務。第一個實現的事上機位與下機位之間文件的傳輸、無磁盤網絡的設備的啓動等功能;第二個實現的事遠程登錄功能;第三個實現的是網絡文件系統功能。

從以上的內容之中,並不難感受到我們的學習過程是由淺入深的,這對於我們的學習也有了較好的幫助。

當然,我們學習的不僅僅是這麼幾個內容,其中還有相關的實驗內容。在我們基礎的學習的過程之中,我有了這麼一點的感受,總的來說就是概念加專業名詞還有介紹加實驗。不過你絕對不能小看那些概念和介紹,它對我們有着很重要的指導作用哦!實驗那就更不用說了,它提高我們的動手能力,在實驗的過程中還能讓你更加理解書中的理念,這就是我學習嵌入式的感受。

嵌入式學習心得體會6

4月10號,爲期一個階段的Linux開發基礎培訓課程圓滿結束,回首這些天所留下的.點點滴滴,感觸深深,學習上知識點的積累,靈活運用的過程中感受到了Linux操作的快速高效性能,這也是我所追求的效率!

當初初涉培訓課程的第一門課程時,都說Linux操作很繁瑣複雜,心裏總有些顧忌,帶着種種不安與些許拼博的決心,開始了自我提升階段的“充電”,由徐海兵老師教授我們基礎課程的培訓,我們則像着小學生般認真的記着筆記,仔細聽着並學會如何去在實踐中運用所學的Linux下的各種強大的命令集。

在Unit 1中,徐老師詳細生動的爲我們講述了有關Linux的誕生、初成長以及輝煌的發展至今,今後應用範圍則愈來愈廣泛,講解了爲Linux這個偉大的OS做出巨大貢獻的一位位出色的、偉大的人物,他們那種學習鑽研的精神、鍥而不捨的信念、勇於把握住難得的機會,從小處着手,踏踏實實的創造出了對人類科技發展做出卓越貢獻的Linux(Unix)系統,他們的種種,都值得我們去深刻反省、刻苦學習、傳承並永遠發展下去。

查看ip地址和重啓網絡服務是我學的第一個命令: ifconfig eth0、ifconfig eth0 IP地址、service network restart。瞭解到遠程登錄軟件可用xmanager。

secureCRT是我們常用的,安裝好後利用其登錄到了Red hat Linux,需要知道Linux主機的ip 地址。徐老師爲我們介紹了重要內容:SHELL,即運行程序的程序,如echo $$SHELL可查看SHELL的環境變量是csh還是bash。指令pwd可查看當前所在路徑,passwd:更改Linux下的密碼,僅限root用戶有此權限,當然我們是利用虛擬機VMware程序來運行Linux OS的,懂得了如何設置虛擬機的網卡設置、暫停、恢復、全屏等。

簡單的學習後進入Unit 2,命令行的句法讓我懂得了用法規則,一系列的命令功能強大:

date 顯示當前年月時間星期之類的;

more指令與less重要但不常用;

cat用於查看短小的文件內容,常用!

mkdir命令用於在當前目錄下創建新的目錄;

ls 顯示當前目錄下所有文件;cd 更改文件路徑,如cd 、cd . 當前目錄;

rmdir 刪除空文件夾;

rm指令很強大,用於刪除空目錄及非空目錄下的指定或全部文件;

man 真男人,幫助手冊;

history指令用於顯示編寫過的命令集,以history 序號 可顯示序號所指命令;

echo回寫命令,很重要,我需要繼續學習;

exit 指從多重SHELL退出來。

嵌入式學習心得體會7

本人本科學的是電子信息工程專業,其實這個專業和嵌入式沒有多大的關係,要說有關係就是簡單的講了下C語言語法,學完之後還不知道什麼是C語言,只記住了char,int,long等佔幾個字節,if, while,for循環什麼的,感覺也就能算一些小學就會的題目,全國計算機二級C語言也就糊塗的過了。我這個專業沒學過C++,一開始不知道什麼是面向對象,這可能會讓人笑話了。不過這說的是實話,本科的時候,學院安排的課程大部分偏硬件部分,動手機會比較多,自然而然比較喜歡硬件方面。

在大二的時候就聽學長說,單片機很難學,那時候經學長介紹,淘寶買了本郭天祥老師出的書《51單片機C語言教程》,一開始還真是不怎麼懂,感覺有點像是看天書,然後硬着頭皮去看,當我把51的結構看完了,就不像一開始那樣一頭霧水了,自己在紙上把51的結構圖默畫一遍,然後再把各個寄存器功能寫一下,各個功能口的結構粗略畫了下,然後覺得51整體已在我心中了,雖然沒有什麼作用,但是至少懂得這門課要怎麼去學習。其實有些時候不是這個東西你不會,而是在不會的時候自己先告訴自己這個太難了,自己先放棄了。

在大三的時候,第一學期課比較少,我就經常待在圖書館,會去蠻看些專業相關的書籍,現在想想,那時候也是機緣巧合下,看到了一本書《從51到ARM》,講述的是從51系列單片機的一般知識出發,將arm處理器和51系列單片機進行對比,引導讀者去理解和學習arm處理器的知識。那個時候也有考慮到以後就業的問題,就想到一件事情,如果去應聘工作的話,每個工科院校電子信息類的畢業生都會異口同聲地說:我會51系列單片機。當他說這句話的時候,他和別人是站在同一起跑線上的。可我們完全有可能和別人不站在同一起跑線上。正是這本書給我開啓了另外一扇大門,讓我初步瞭解了嵌入式。後來去報考全國計算機等級考試三級教程——嵌入式系統開發技術,在圖書館奮鬥了兩個月,最後取得優秀的成績,也讓我進一步瞭解嵌入式系統。

在大四的時候,我們有嵌入式的選修課,不過當時因爲考研的緣故,就沒有去上過這門課,好可惜呀!但是,在選擇讀研研究方向的時候我還是毅然選擇了嵌入式方向,我知道這將成爲我未來三年研究的方向。這學期(研一下學期),很開心能夠再次接觸嵌入式系統這門課程,對於導師教的這門課程,我覺得自己上課還是蠻認真聽講的,當然也被師在臺上那講得頭頭是道,溫文儒雅的風姿所吸引。對於沒有學過微機8086的我,有些時候,老師用微機與嵌入式的對比讓我頭腦沒有相關概念...

首先,我對嵌入式在概念上有了一個比較精確的瞭解。嵌入式是指以應用爲中心,以計算機爲基礎,並且軟硬件可裁剪,適用於對功能、可靠性、成本、體積和功耗有嚴格要求的專用計算機系統。它由硬件平臺和系統軟件組成。硬件平臺指嵌入式處理器和與之通過接口連接的外圍硬件平臺。系統軟件是指實時操作系統和用戶應用軟件。

談到硬件部分,我首先想到的是嵌入式處理器那些外圍功能模塊。對於這部分的學習,我當初花了好長時間看《深入淺出ARM7——LPC2400》這本書,現在想想覺得自己學習方法沒用對,完全沒有那個必要,自己卻花了大把時間在看這些寄存器引腳的使用,因爲單純的看過之後還是很容易忘的,之後在進行實驗的時候還是翻書來查就證明了這一點。不過一些最基本的模塊,例如通用輸入/輸出口(GPIO),通用異步收發器(UART),向量中斷控制器(VIC),外部中斷輸入和定時器/計數器還是需要看書認真去記住那些常用的引腳功能。對於CPU異常這部分,我一開始以爲異常就是中斷,因爲處理程序流程設計是相似的,都是請求處理器打斷正常的程序執行流程,進入特定程序的一種機制。當時還對老師提出的一個看法有點疑義,51可以處理中斷嵌套而ARM處理器卻不能?我當時腦子裏面就在想:中斷不都是有硬件設備產生的,那按常理來講ARM處理器也可以處理的呀。後來在認真查書,發現CPU異常有7種:復位,數據中止,中斷,快中斷,預取中止,未定義,軟件中斷。而異常向量會使CPU轉入異常入口地址執行程序,開始了異常處理。同理的話,中斷向量使CPU轉入中斷入口地址執行程序,開始了中斷處理。即當發生IRQ中斷時,程序返回地址被存入該IRQ中斷模式下的LR,如果繼續發生IRQ中斷,那第二次的中斷返回地址也還是被存入該IRQ中斷模式下的LR中,那先前發生中斷時候存入的程序返回地址將被覆蓋掉,導致不能返回正確的位置。在我解決這個問題的期間,每次睡前思維準會定格在這問題上,久久不能繞出來,其實有時候查書還是最好的解決方案,因爲網絡資源只能提供給我們部分的參考資料。

對於ARM彙編語言這部分的學習,我認爲是需要重視的,學彙編不是說用這語言做多牛逼的事情, 問題的關鍵在於, 學透了彙編會使你真正理解計算機。另外一方面,只要以後在嵌入式工作中你遲早會在某個陰暗的角落裏遇到彙編。“不管你承認不承認, 現在的CPU沒有直接跑高級語言的, 哪怕是虛擬機也都是類似彙編的指令集.當遇到崩潰分析, 性能優化甚至編譯器抽風等等的時候, 彙編是你最後一根救命稻草(這句話是福來師兄講的)。”爲此他給了我們一份資料,周立功lpc21xx/lpc22xx系列ARM7啓動代碼分析,主要講述的是startup.s文件的分析,看了下才發現老師上課講的那個啓動代碼分析很多不理解之處這裏都有詳細的介紹,這分析太精闢了。

學 ARM7這麼久,我認爲從硬件上講,一方面就是學習接口電路設計,另一方面就是學習彙編和C語言的板級編程。如果從軟件上講,就是要學習基於ARM處理器的操作系統層面 的驅動和移植。這些對於我們初學者來說必須明確,要麼從硬件着手開始學,要麼從操作系統的熟悉到應用開始學,但不管學什麼,只要不是純的操作系統級,硬件的寄存器類的東西還是要能看懂的,基於板級的彙編和C編程還是要會的。

μC/OS-II 是一種基於優先級的搶佔式多任務實時操作系統,包含了實時內核、任務管理、時間管理、任務間通信同步(信號量,郵箱,消息隊列)和內存管理等功能。它可以使各個任務獨立工作,互不干涉,很容易實現準時而且無誤執行,使實時應用程序的設計和擴展變得容易,使應用程序的設計過程大爲減化。μC /OS-II是一個完整的、可移植、可固化、可裁剪的佔先式實時多任務內核。μC/OS-II絕大部分的代碼是用ANSI的C語言編寫的,包含一小部分彙編代碼,使之可供不同架構的微處理器使用。

μC/OS-II可以大致分成內核結構、任務管理、時間管理、任務之間通信與同步4個部分。內核結構是操作系統的處理核心,包括操作系統初始化、操作系統運行、中斷進出的前導、時鐘節拍、任務調度、事件處理等多部分。任務管理部分中的內容都是與任務的操作密切相關的。包括任務的建立、刪除、掛起、恢復等等。因爲μC/OS-II是以任務爲基本單位調度的,所以這部分內容也相當重要。μC/OS-II中的最小時鐘單位是timetick(時鐘節拍),任務延時等操作是在時間管理這部分完成的。任務之間通信與同步爲事件處理部分,包括信號量、郵箱、郵箱隊列、事件標誌等部分;主要用於任務間的互相聯繫和對臨界資源的訪問。μC/OS-Ⅱ操作系統是在main()中建立的,首先要系統初始化,OSInit(),初始化系統所有的變量和數據結構。然後進行任務的創建,OSTaskCreate();之後進行多任務的啓動,OSStart()。在進行任務的並行處理的時候,一個任務的程序是順序執行的,而不同任務的程序卻是並行執行的。從應用程序的觀點來看,此處的並行處理只是一個假象。而實際上它是通過實時操作系統的內核控制任務之間的切換來實現的,也就是任務調度啦。

μCOS-Ⅱ總是運行進入就緒態任務中優先級最高的那一個。當創建新任務時,或當前任務調用一些可能把自己掛起的系統函數(如OSMBoxPend)時,內核就要進行任務切換。在上述的場合,任務級的調度是由函數OSSched()完成的。

在一個多任務的應用工程中,任務之間並不是完全獨立的,它們存在一些需相互配合的處理,這些相互配合是靠任務間的通訊或同步,信號量、郵箱、消息隊列可以實現這種任務與任務,任務與中斷服務函數間的通訊與同步。

郵箱可以使一個任務或者中斷服務子程序向另一個任務發送一個指針型的變量。而信號量不可以,其只能發送信號量。消息隊列可以使一個任務或者中斷服務子程序向另一個任務發送以指針方式定義的變量。因具體的應用有所不同,每個指針指向的數據結構變量也有所不同,實際上,我們可以將消息隊列看作多個郵箱組成的數組,只是它們共用一個等待任務列表。

我們實驗所用的ARM開發工具是ADS1.2。ARMADS全稱爲ARM Developer Suite,是ARM公司推出的新一代ARM集成開發工具。現在ADS的最新版本是1.2,支持軟件調試及JTAG硬件仿真調試、支持彙編、C語言、C++源程序,具有編譯效率高、系統庫功能強等特點。在安裝ADS1.2的時候出現過小問題,當時我的電腦是64位的,安裝完之後顯示不了,後來百度查找到原因,竟然是文件夾放錯地方,應該放在Program Files(x86)這個文件夾中。後來有同學問我這方面的問題,但是發現他們的ADS1.2安裝不了的原因是因爲Licence弄錯了。在打開CodeWarrior for ARM Developer Suite的時候,一定要記得選DebugInChipRAM,否則Make都出現很多error,而且那些幾乎都是未定義函數的錯誤。之後就進行Debug,調試成功之後會跳出AXD的界面,選擇Options裏面的ConfigureTarget,再添加H-JTAG的文件,之後點擊GO,程序會跳出彙編語言的界面,再點擊下就跳到C語言程序入口地址,之後再點擊下GO,程序就開始跑起來。前面所述的這些步驟是理想情況下程序自身沒有發生錯誤,當然在調試過程中,還是有很多硬件上的問題,一方面是有些開發板可能用久了,用JTAG並口連接的時候接觸不良,很容易自動掉線,常出現未連接設備的的Error,還有一方面是跑程序過程常會出現兼容性的問題,導致程序AXD調試時候會出現卡在某個部分一直進入死循環,這個後來是解決了,但是偶爾還是會出現這個BUG。

通過這學期對嵌入式的學習,我發現自己尚未掌握的知識點還是蠻多的,尤其是對μC/OS-II的移植方面,我只是理論上粗略瞭解,沒有經過實驗的操作。還有對存儲器加速模塊(MAM)這方面不夠了解,主要一方面當初在做消息隊列採集實驗(KeySem_SampdataQeue),這個模塊被代替掉,不需要使用它,所以後來也沒有去掌握相關知識點。對於任務就緒算法這部分,我只是上課的時候聽“懂”了,課後自己再看完全懵了。對於CAN總線調試的部分,老師上課沒有講到這部分的介紹與應用,但是後來通過自己對實驗室師兄們所做的課題初步瞭解,發現我自己有必要去弄懂它的構造和原理。

“看書不要希望一次就會,一次就明白是什麼意思,也不要死記硬背,看不明白也沒關係,以後遇到了知道去哪裏去找就可以了,以後遇到的多了,也就記住了,遇到的少的,忘記也就忘記了。”依然記得當初不懂怎麼解決某個問題的時候請教李碩師兄,師兄對我說的這番話。自己在μC/OS-II這部分內容掙扎了好久,現在想想,覺得當初不應該一上來就直接閱讀內核源代碼,看了一些自己把頭撞破也想不明白的事,這樣直接正面打擊我學習嵌入式的積極性。學習啊,還是得要循序漸進。如果你想學習嵌入式一定要有塊學習板。看再多的視頻,看再多的書,也不如自己動手試一下,看着很簡單的東西,做起來就可能遇到很多的問題,遇到問題找到原因,解決問題,只有這樣才能學到東西。記得我第一次仿寫led的驅動,想自己試一下,可是自己一試,就出了好多的問題,那個led弄了我一天才把led燈點亮。所以不要眼高手低。

對於初學者,有一點小建議,我們拿到一個開發板,很興奮也很激動,想法自然也很多,想用開發板實現自己的這個想法,實現那個想法,然後又不知道從何下手,然後就去論壇中發一個貼,最後等着別人去回覆,當見沒人回覆就開始抱怨。這種做法是不可取的,有想法是好的,我們要實現自己的想法也是有前提的,首先,我們對這部分知識瞭解嗎?如果不瞭解就去google一下(最好別用百度,不太好用),瞭解了一些,也就大概知道要怎麼做了。如果再遇到問題,再去發貼問,這樣也顯得咱們有水平。比如自己連串口是什麼都不太清楚呢,就問串口通信怎麼做啊,就是人家把代碼給咱,咱也不明白是怎麼回事啊。見多識廣,熟能生巧。多看代碼,要從代碼中讀出代碼的意思來。自己平時也要多寫代碼,多練習(這一點我做的不好,寫的少)。

最後,我想說的是嵌入式系統的學習和研究一旦我們達到了一定的水平後,其實很簡單,就是如何去看CPU和相關芯片的Datasheet!