第一篇:uocs-ii和單片機結(jié)合的心得體會
從寒假開始接觸操作系統(tǒng)到今天初步完成一個基于STC89C52單片機,使用UC/OS-II微內(nèi)核的時鐘應(yīng)用程序也有一段時間了.在這不長不短的一段時間里,可以說我每天都有新的發(fā)現(xiàn).知識就是這樣一點一點的積累起來的.我相信只要這樣繼續(xù)下去,我的水平一定能上一個層次.在沒有看<操作系統(tǒng)概念>這本書之前,通過一些平時模糊的了解,就只能把進程這樣的一些概念理解為許多個不同的應(yīng)用程序在處理器上通過某種方法輪流地切換來實現(xiàn)處理器資源的使用率的最大化.還有更多的其他一些概念甚至是連聽都沒有聽說過的.由于基礎(chǔ)比較差,加上寒假在家里較封閉.少有信息獲取渠道,所以在看<操作系統(tǒng)概念>這本書的時候比較吃力.可以說那一段時間看書真是一種煎熬.不過后來提前來了學(xué)校,情況就好多了.之前看書時有許多不懂的概念,在學(xué)校里可以通過上網(wǎng)查找資料了.最開始看到進程的時候,感覺進程就是跟之前理解的差不多嘛,但是當(dāng)看到線程這里的時候一下子又蒙了.這個時候就把進程跟線程給弄混淆了,但是沒辦法,在家里條件艱苦,只好這樣子帶著混淆看下去啦.到了學(xué)校連了網(wǎng)立刻就在找到了一篇文章<進程與線程的區(qū)別>.它那里面舉一個馬車的例子來比喻進程與線程的關(guān)系.在后面的篇幅也很清晰的把進程和線程的各種關(guān)系說出來了.于是我就這樣子理解:其實系統(tǒng)就是把一大堆資源分配給進程,由進程來管理它所獲得的資源,它愛怎么用就怎么用.而線程又是進程里面的一小個環(huán)節(jié).線程可以使用進程獲得的資源來完成自己的事情.如果說進程要完成一個大的事情,那么它就必須把這樣一個大的事情分成一個個小的事情.那么進程就是這些小的事情和必要的資源的集合,而線程就是完成這樣一個個小的事情的實體.舉個例子來說,比如一個人現(xiàn)在要做一道菜.如果我們把做一道菜看做是一個進程的話,那么我們先要找到這個會做菜的人.這個人就相當(dāng)于我們的處理器.然后還必須要有煤氣爐,鍋.鏟子.刀,一些調(diào)料之類等等一些工具,那這些就是我們必要的一些資源.我們的進程先要申請得到這些資源.首先我們要把做一道菜這個大任務(wù)分成一個個小的任務(wù).這些任務(wù)包括有比如說切菜啦,煮水啦,炒菜啦,加調(diào)料啦,控制火候啦,還有等待啦.等等...而這些就可以看成是一個個線程了.那么當(dāng)我們決定要做一道菜的時候可以看成是創(chuàng)建了一個進程了.接下來這個人開始做的時候就看做是進程開始運行了.首先這個人會開始切菜那這是第一個線程開始得到運行.就是在處理器上運行.切了一會的時候.他突然發(fā)現(xiàn)可以先煮一下水.那么他就會先放正在切著的菜轉(zhuǎn)去煮水.這就是線程的切換啦.然后當(dāng)把水放到鍋里面去了就讓它煮著吧,人不用去管它了.那這時處理器就可以空出來做其它的事情了.他可以返回去繼續(xù)切菜,也可以轉(zhuǎn)而去做其他事.我們假設(shè)他返回去繼續(xù)切菜好了.當(dāng)他切完之后就開始就開始炒菜了,而在炒菜的過程中他偶爾也可以做些其他事..如加調(diào)料啦.控制火候啦.等等.這樣的一些工作可以是并發(fā)的.注意是并發(fā)不是同時.到最后必須要讓這菜在鍋里煮一下時.這時人也就是處理器就空閑下來了.他可以去做其他的事.那就相當(dāng)于進程的切換了.只須要在菜煮熟的時候把它鏟起來就行了.這樣一個進程就算運行完畢了.當(dāng)然我只是打了一個很粗略的比喻.并不能概括進程跟線程的全部關(guān)系.在后來當(dāng)我看完了UC/OS-II的任務(wù)部分之后.雖然說UC/OS-II把進程和線程的概念模糊掉了,只有一個任務(wù)的概念.但是我還是不禁會把它跟進程跟線程聯(lián)系起來.那這樣的話我就認為UC/OS-II下只有一個應(yīng)用程序.而把這個應(yīng)用程序看作是一個進程.而把其中的每一個任務(wù)看做是一個個線程.不知道這樣子理解對不對.好啦.進程跟線程好像糾結(jié)了好久的樣子.其實在家里已經(jīng)把<操作系統(tǒng)概念>這本書要看的章節(jié)都大概的看過一遍了雖然有看到進程的同步與通信那里有什么信號量啊,消息郵箱啊,還有消息隊列之類,但是根本就不知道它們是什么東西.還有邵貝貝的UC/OS-II也看了一部分.只是由于第一次看看得相當(dāng)糾心.只當(dāng)是看天書了.所以到學(xué)校后.就拼命的找資料.看了一些操作系統(tǒng)比較基礎(chǔ)的概念還有UC/OS-II的一些比較基礎(chǔ)的東西之后.覺得操作系統(tǒng)那本書有必要再看一遍.但是后來第二遍還是沒有看完,但是第二次看畢竟有不同看起來也比較沒那么辛苦了.因為又發(fā)現(xiàn)了另一本更容易懂的講UC/OS-II的書,就是任哲那本書.接下來的幾天就一直看這本書了.他講的還是比較淺顯的.看完了他這本書之后呢又找時間看了一下UC/OS-II的源代碼.感覺還是比較好懂的.這時候基本上對多任務(wù)的概念啊.任務(wù)之間的同步與通信啊及其具體的實現(xiàn)都有了初步的理解.接下來就講一下我對UC/OS-II的理解吧.看過這樣一篇文章說的是UC/OS-II的兩個核心算法.該文章道出了UC/OS-II微內(nèi)核的設(shè)計哲學(xué):以空間換時間,因為UC/OS-II是一個嵌入式操作系統(tǒng)的內(nèi)核.而大部分嵌入式講究實時性.那要講究實時性就必須知道任務(wù)切換的確定時間,而不應(yīng)該因為任務(wù)數(shù)量而影響這個時間.因此UC/OS-II就是通過犧牲存儲空間來保障其實時性的.兩大核心算法其中一個是說基于優(yōu)先級的任務(wù)調(diào)度的.Jean J.Labrosse也就是UC/OS-II的作者使用一個數(shù)組OSRdyTbl[]來記錄具有某一優(yōu)先級的任務(wù)的就緒情況,稱為就緒表.并用另一個變量OSRdyGrp以方便查詢某一任務(wù)的就緒情況.另外再加兩張表得出查詢結(jié)果.這樣查詢某一任務(wù)的就緒情況的時間就變成了一個可以預(yù)測的值了.現(xiàn)在看起來, UC/OS-II本身內(nèi)容并不多.也就是一個基于優(yōu)先級的任務(wù)調(diào)度,一個任務(wù)切換,一個任務(wù)管理,一個時間管理,還有幾個任務(wù)同步與通信的事件控制.如信號量.消息郵箱,消息隊列.標(biāo)志組,等等...先說基于優(yōu)先級的任務(wù)調(diào)度吧,基于優(yōu)先級就是近似保證在每一個時間段內(nèi)都是優(yōu)先級最高的任務(wù)處于運行狀態(tài).至于什么情況下才會需要任務(wù)調(diào)度呢.那就有很多種情況了,比如說正在運行的任務(wù)由于某種需要,自行掛起自身或者調(diào)用時間延時一段時間.在這種情況下就會產(chǎn)生任務(wù)調(diào)度.又比如說某任務(wù)釋放一定的信號量或者其他的什么任務(wù)之間的同步與通信的事件,從而使具有更高優(yōu)先級的任務(wù)處于就緒狀態(tài),這時也會產(chǎn)生任務(wù)調(diào)度.總之,一個任務(wù)有運行,就緒,等待,掛起,中斷等等各狀態(tài),通過各種調(diào)度使得任務(wù)在這些狀態(tài)之間來回變換.再說任務(wù)切換吧.任務(wù)切換其實就通過修改sp指針和任務(wù)堆棧來起來保存當(dāng)前任務(wù)斷點而轉(zhuǎn)去運行另一個任務(wù).這個在后面說到UC/OS-II的移植的時候再具體的講吧.再來談?wù)勅蝿?wù)管理.任務(wù)管理需要一個叫做tcb的任務(wù)控制塊.tcb里面保存有本任務(wù)所必要的一些基本信息.處理器根據(jù)這些信息來得到對應(yīng)的任務(wù).至于其他的一些比如任務(wù)的建立啊.任務(wù)的刪除啊,任務(wù)的初始化啊等等的一些具體實現(xiàn)在這就不多說了.還有就是時間管理了,系統(tǒng)維護一個全局時鐘,應(yīng)用程序可以對這個全局時鐘進行讀寫操作.同時任務(wù)控制塊里有一個變量記錄本任務(wù)需要等待延時的時間片數(shù),通過時間中斷逐一減少,等減到為零時,該任務(wù)重新返回到就緒狀態(tài)..UC/OS-II的時間管理比較簡單.至于任務(wù)之間的同步與通信,信號量,消息郵箱,消息隊列都要使用到一個叫做ecb的事件控制塊.里面主要有一個信號計數(shù)變量,一個消息指針.還有一個類似于就緒表的任務(wù)等待隊列表.當(dāng)一個任務(wù)申請得到一個信號或消息時,在有信號或消息的情況下,會立即給這個任務(wù)信號或消息,但是當(dāng)沒有信號或消息時,就會把任務(wù)送進任務(wù)等待隊列,并掛起任務(wù).直到有信號或消息或者等待超時.這里有衍生出來一個新的問題.就是如果在等待隊列中有多個任務(wù)在等待.而信號只有一個,那么誰該得到信號并運行呢? UC/OS-II有兩個解決方法,要么只給優(yōu)先級最高的那個任務(wù),要么通知所有等待的任務(wù)有信號了,至于該誰運行,那就要看誰的優(yōu)先級最高了.好啦.UC/OS-II的基本部分都講了,下面講一下關(guān)于UC/OS-II在具體處理器上的移植吧.一般情況下的移植就是要把一些與處理器相關(guān)的內(nèi)容做具體修改咯.那哪些是與處理器相關(guān)的內(nèi)容呢?比如說C語言中的各種數(shù)據(jù)類型在本處理器上具體是多少個字節(jié)啊,一些硬件的接口啊.具體的任務(wù)切換啊,任務(wù)的堆棧分配啊.等等...所以我們就要根據(jù)具體的處理器做出相應(yīng)的修改了.比較難的地方可能就是任務(wù)切換的設(shè)計吧.當(dāng)然在開始任務(wù)切換之前我們必須先約定一下堆棧的協(xié)議.就是必須按照一定的出棧入棧的規(guī)則來操作堆棧,否則將不能正確的返回到斷點繼續(xù)執(zhí)行.所以就要先寫一個堆棧初始化的函數(shù),先規(guī)定每一個斷點信息在堆棧的位置.任務(wù)的切換前面提到了一點,就是通過修改sp指針和任務(wù)堆棧來起來保存當(dāng)前任務(wù)斷點而轉(zhuǎn)去運行另一個任務(wù).為了有更好的實時性,這些一般都是用匯編語言寫的.我們可以想象,要進行任務(wù)切換,那首先你要先把當(dāng)前的任務(wù)的斷點信息給保存起來.否則將來要重新運行這個任務(wù)的時候怎樣繼續(xù)執(zhí)行,難道要重新開始運行?當(dāng)然不可能!所以要保存斷點,那斷點是保存在哪呢,當(dāng)然就是剛才講的任務(wù)堆棧啦.所以我們要做的事情就是先把斷點保存在任務(wù)堆棧里,然后才能去取出另一個任務(wù)的斷點,再從它的斷點開始繼續(xù)運行.說到斷點,斷點具體包括一些什么東西呢.比如說有pc指針啦.有cpu寄存器啦.psw啦.sp指針啦.這些都是斷點的一部分.可是pc指針也就是程序斷點地址我們是不能夠直接操作的,即我們不能對它進行讀寫,那該怎么辦呢.通常有兩種方式可以引發(fā)pc指針自動入棧.那就是函數(shù)調(diào)用或者是中斷出現(xiàn).其中中斷出現(xiàn)是隨機的,不是我們能夠控制的.但是函數(shù)調(diào)用我們是可以用的.所以我們一般是通過函數(shù)調(diào)用來模擬一次中斷的出現(xiàn).這樣就可以做到pc指針自動入棧了.在硬件支持的情況下,我們可以直接把sp指針指到要運行的任務(wù)的任務(wù)堆棧的入口上去來導(dǎo)出斷點.但是有些處理器可能硬件不支持.比如說51單片機,它的sp指針只有八位,而任務(wù)堆棧又一般是放在外部存儲器上的,它的尋址需要兩個字節(jié).那sp指針就到不了任務(wù)堆棧而不能直接操作任務(wù)堆棧了.在這種情況下,我們只好在內(nèi)部ram里開辟一個系統(tǒng)堆棧.對這個系統(tǒng)堆棧操作,然后通過復(fù)制的方法把它送到任務(wù)堆棧里.當(dāng)然這又要花費一定的cpu時間了.所以從整一個切換的過程來看的話,那就是先使用入棧指令push按照先前規(guī)定好的入棧規(guī)則把斷點信息保存在系統(tǒng)堆棧里.然后再把這個斷點信息復(fù)制到任務(wù)堆棧里.接著從要運行的任務(wù)的任務(wù)堆棧里把斷點信息復(fù)制到系統(tǒng)堆棧里去再使用出棧指令pop彈出到處理器的相應(yīng)位置.說了那么多,還沒有說明白到底怎樣找到這個任務(wù)堆棧呢.原來在我們的任務(wù)控制塊tcb里有一個指針變量專門用來指向它的任務(wù)堆棧的.那只要沿著tcb地址就能找到任務(wù)堆棧的地址了.對了,移植時還有一個地方可以用匯編語言寫的.就是UC/OS-II的時間中斷函數(shù).UC/OS-II自身有一個時鐘,這個時鐘就是通過時間中斷函數(shù)來確保的.中斷的頻率不同那時鐘在每一秒鐘內(nèi)的節(jié)拍就不同.當(dāng)我把UC/OS-II移植到51單片機的時候基本上就是按照上面的思路進行的.但是由于51單片機的特殊性,有些地方還是要注意的.比如說.UC/OS-II里面會用pdata,data等來做函數(shù)的形參.可是由于這些都是keil里面的關(guān)鍵字.如果不改的話就會報錯.編譯不通過.那么就必須把它們?nèi)慷几某善渌囊苑乐咕幾g器報錯.還有一點就是由keil編譯器編譯通過的程序是不可重入的.但是我們要求UC/OS-II里的大部分函數(shù)具有可重入性.這樣我們就必須在每個函數(shù)后面加一個reentrant關(guān)鍵字.還有我考慮到由于我們把任務(wù)堆棧放到了外部ram里了.那為了讓可使用的任務(wù)數(shù)最大化,最好僅有的256個字節(jié)的外ram全部用于任務(wù)堆棧.那就必須把其他的東西搬到內(nèi)部ram去了.其中任務(wù)控制塊在外部ram占了很大一個空間.故后來我就在任務(wù)控制塊的定義那里加了一個idata使其只能存放于內(nèi)部ram,再修改了任務(wù)切換函數(shù)讓它只在內(nèi)部ram尋找任務(wù)控制塊的地址.這樣就能保證外部ram全部用于任務(wù)堆棧,從而可以容納多一個任務(wù)吧.再有就是我又把UC/OS-II的空閑任務(wù)的任務(wù)堆棧減小到18個字節(jié).因為空閑任務(wù)不需要那么多字節(jié)的堆??臻g.總之,我是想盡各種辦法盡量節(jié)省存儲空間了.經(jīng)過這么一次實戰(zhàn)的移植,我對UC/OS-II有了一個比較全面的理解,對程序的可移植性和模塊化有了深刻的體會,對51單片機有了一個新的了解,對keil軟件有了一個新的認識.首先我們現(xiàn)在接觸的UC/OS-II它并不是一個完整的操作系統(tǒng).它只是一個微內(nèi)核,它缺少文件系統(tǒng).缺少虛擬內(nèi)存,可視化界面,它甚至還缺少一個現(xiàn)代操作系統(tǒng)所具有的時間片的概念,更不要說它沒有進程和線程的清晰概念和獨立的任務(wù)調(diào)度器.當(dāng)然它有它的優(yōu)點,至少它是一個專門為嵌入式設(shè)計的操作系統(tǒng).由于它小,我們可以很容易地把它移植到各種資源不足的嵌入式系統(tǒng)中去.另外它的實時性能也很好.并且它提供了許多優(yōu)良的功能,可以使我們更專注于應(yīng)用功能的設(shè)計,而不用具體考慮如信號量這樣的一些東西.至于UC/OS-II在51上跑吧,對于資源奇缺的51來說還是挺有鴨梨的.并且比裸跑速度要慢一些.對于程序的可移植性.如果在寫程序的時候就考慮到可移植性的話并用配合模塊化設(shè)計.那么當(dāng)我們以后要再一次使用到同樣的或者相似的功能時,就可以直接使用或者僅做一些小改動即可使用了.這樣就方便許多了.而不必總是重復(fù)同一內(nèi)容的編寫.那樣未免也太低級趣味了點...另外對51單片機也有了進一步的了解.以前竟然不知道原來STC內(nèi)有內(nèi)置256個字節(jié)的外部ram.真是慚愧啊.還有對堆棧指針和pc指針也有了新的認識.以前對sp指針還是有比較清晰的概念的.可是對pc指針就是全完摸不著頭腦了.現(xiàn)在知道了pc指針不在我們的讀寫范圍之內(nèi).我們要通過另外的方法間接對它操作.對中斷的出現(xiàn),對函數(shù)的調(diào)用等等也有了比較本質(zhì)的認識了.對ret指令,reti指令也比較知道了.中斷和函數(shù)調(diào)用都會引發(fā)pc指針自動入棧.所以兩者在這一方面沒有什么區(qū)別.比如說,使用函數(shù)調(diào)用進入任務(wù)切換再使用reti退出不會有什么不妥.但是如果用ret退出就不行了.因為reti指令在執(zhí)行的時候會重新允許中斷的產(chǎn)生.而ret不會做這樣的動作.這就是兩者的區(qū)別.還有對keil也有了一定的新的了解.keil中有些關(guān)鍵字還是很有用的.如data,idata,pdata,bdata,xdata,code.這些都是用來指明存儲位置的.data指的是將變量存儲在內(nèi)部ram的低128個字節(jié)里,idata指可以將變量存儲在內(nèi)部ram的全部256個字節(jié)里.pdata是指外部ram的低256個字節(jié).bdata指內(nèi)部ram的位尋址區(qū).xdata指外部ram 64kb的范圍.最后一個code指的是程序存儲區(qū)rom.還有一個關(guān)鍵字reentrant它可以告知編譯器產(chǎn)生可重入代碼.keil中可以設(shè)置變量的默認的存儲位置,有三種.Small的模式,Compact的模式, Large的模式..Small模式是默認把變量存儲在內(nèi)部ram中, Compact模式是默認存儲在外部ram低256個字節(jié)中,而Large模式則是整個64kb的外部ram中.移植完之后我就考慮開始寫一個時鐘程序了吧.雖然之前寫過時鐘程序,但是此次卻是以一種完全不同的方式來寫,這次是在有操作系統(tǒng)的情況下來.之前寫的只有一個.C文件,沒有頭文件.寫的完全渾然一體,毫無模塊化可言.可是這次不同.是用一種自己之前不大熟悉的方式寫程序.要考慮到任務(wù)的劃分,優(yōu)先級的安排,要考慮到模塊化.還要讓別人能夠看懂.這每一件事都是不容易做的啊.現(xiàn)在寫完了.也收獲了許多.其中就包括頭文件的使用.我覺得模塊化最重要的就是要把本模塊的一些具體實現(xiàn)封裝起來,那么本模塊的頭文件就成了進出模塊的唯一通道了.模塊要引用的一些全局變量要在這里聲明.模塊本地函數(shù)要在這里聲明.模塊本地全局變量也要在這里聲明.還有模塊對外接口函數(shù)也是要在這里聲明.這樣那我們就可以通過#ifdef _模塊名_C_..本地內(nèi)容..#else..對外接口..#endif這樣的形式來區(qū)分本地的聲明與對外的聲明.并且在本模塊的.C文件里define _模塊名_C_ 這樣就可以包含模塊所必須的信息了.而當(dāng)其他模塊要使用這個模塊的時候,它也可以用include來包括這個頭文件,不過這時它包括的就不是那個模塊的本地內(nèi)容了.而是它的對外接口.這樣就不會出現(xiàn)重復(fù)包含的情況了.這是寫多文件一個很好的方法.好啦好啦..該收手了.貌似寫了好多.想我高考作文怎么擠也就擠出了那可憐的800多字.這次好像有敲有6300多字.真是嚇到我了.本來還在擔(dān)心能不能寫夠800字的.這是從昨晚開始寫的.寫到現(xiàn)在是第二天的下午五點多吧.原本我是不怎么喜歡寫這樣的一些東西的,但是現(xiàn)在寫完之后感覺挻有用的.也重新梳理了一下自己的思路.寫完了沒有怎樣修改.其中不少很荒謬的東西.看了不要拿磚頭砸我哦...好了.終于把一些小小的心得,小小的體會敲完了..2011-3-10 17:23完
第二篇:單片機心得體會(定稿)
課程設(shè)計心得體會
1、認真審題,看懂題目的要求!選擇適當(dāng)?shù)恼n題,不益太簡單或者太難。做到既能把課題完成又能鍛煉自己的能力!
2、根據(jù)課題要求,復(fù)習(xí)相關(guān)的知識,查詢相關(guān)的資料。
3、根據(jù)實驗條件,找到適合的方案,找到需要的元器件及工具,準(zhǔn)備實驗。
4、根據(jù)課程設(shè)計的要求和自己所要增加的功能寫好程序流程圖,在程序流程圖的基礎(chǔ)上,根據(jù)芯片的功能寫出相應(yīng)的程序。然后再進行程序調(diào)試和相應(yīng)的修改,以達到能夠?qū)崿F(xiàn)所要求的功能的目的。
5、還要根據(jù)實驗的實際情況,添加些額外程序來使系統(tǒng)更加的穩(wěn)定,如開關(guān)的消震蕩(采用延遲)。
6、程序要盡量做到由各個子程序組成,在有些程序后面最好加注釋,這樣在程序出錯的檢查過程中可以更容易查找的到,也更簡潔,更明白易懂。
7、該實驗的程序可以參考DVCC系列單片機微機仿真實驗系統(tǒng)實驗指導(dǎo)書中的串并轉(zhuǎn)換實驗,也可自己根據(jù)自己熟悉的方法來編程。
8、在設(shè)計控制開關(guān)時,注意2個中斷的打開和關(guān)閉的先后順序,否則就會出錯。
9、這次的單片機課程設(shè)計重點是理論與實際的相結(jié)合。不再只讀書了。
10、該設(shè)計從頭到尾都要自己參與,熟悉了對整個設(shè)計的過程,更系統(tǒng)的鍛煉了自己。課題研究目的和意義及介紹
1、目的意義
通過本次課程設(shè)計加深對單片機課程的全面認識復(fù)習(xí)和掌握,對單片機課程的應(yīng)用進一步的了解。
掌握定時器、外部中斷的設(shè)置和編程原理。
通過此次課程設(shè)計能夠?qū)纹瑱C軟硬件結(jié)合起來,對程序進行編輯,校驗。
該實驗通過單片機的定時器/計數(shù)器定時和計數(shù)原理,設(shè)計簡單的計時器系統(tǒng),擁有正確的計時、暫停、清零、快加功能,并同時可以用數(shù)碼管顯示,在現(xiàn)實生活中應(yīng)用廣泛,具有現(xiàn)實意義
第三篇:單片機心得體會
單片機心得體會
下面我概括了幾點我的學(xué)習(xí)經(jīng)驗和心得體會:
1、萬事開頭難、要勇敢邁出第一步。開始的時候,不要老是給自己找借口,說KEIL不會建項目啦、沒有實驗板啦之類的。遇到困難要一件件攻克,不會建項目,就先學(xué)它,這方面網(wǎng)上教程很多,隨便找找看一下,做幾次就懂了。然后可以參考別的人程序,抄過來也無所謂,寫一個最簡單的,讓它運行起來,先培養(yǎng)一下自己的感覺,知道寫程序是怎么一回事,無論寫大程序還是小程序,要做的工序不會差多少,總得建個項目,再配置一下項目,然后建個程序,加入項目中,再寫代碼、編譯、生成HEX,刷進單片機中、運行。必須熟悉這一套工序。個人認為,一塊學(xué)習(xí)板還是必要的,寫好程序在上面運行一下看結(jié)果,學(xué)習(xí)效果會好很多,仿真器就看個人需要了。單片機是注重理論和實踐的,光看書不動手,是學(xué)不會的。
2、知識點用到才學(xué),不用的暫時丟一邊。厚厚的一本書,看著人頭都暈了,學(xué)了后面的,前面的估計也快忘光了,所以,最好結(jié)合實際程序,用到的時候才去看,不必說非要把書從第一頁看起,看完它才來寫程序。比如你寫流水燈,完全就沒必要看中斷的知識,專心把流水燈學(xué)好就是了,這是把整本書化整為零,一小點一小點的啃。
3、程序不要光看不寫,一定要自己寫一次。最開始的時候,啥都不懂,可以抄人家的程序過來,看看每一句是干什么用的,達到什么目的,運行后有什么后果,看明白了之后,就要自己寫一次,你會發(fā)現(xiàn),原來看明白別人的程序很容易,但到自己寫的時候卻一句也寫不出來,這就是差距。。當(dāng)你自己能寫出來的時候,說明你就真的懂了。
4、必須學(xué)會掌握調(diào)試程序的方法。不少人寫程序,把代碼寫好了,然后一運行,不是自己想要的結(jié)果,就暈了,然后跑到論壇上發(fā)個帖子,把程序一貼,問:為什么我的程序不能正常運行?然后就等別人來給自己分析。這是一種很不好的行為,應(yīng)該自己學(xué)會發(fā)現(xiàn)問題和學(xué)會如何解決問題。這就需要學(xué)習(xí)調(diào)試程序的方法,比如KEIL里,可以下斷點啦,查看寄存器內(nèi)容等等,這些都是調(diào)試程序的手段,當(dāng)你發(fā)現(xiàn)你寫的程序運行結(jié)果和你想象中不一樣的時候,你可以單步,也可以下斷點,然后跟蹤,查看各相關(guān)寄存器內(nèi)容,看看程序運行過中是不是有什么偏差,找出影響結(jié)果的地方,改正過來。這一個過程非常重要,通過程序的排錯,你可以學(xué)到的知識是書上得不到的。
5、多利用網(wǎng)絡(luò)的搜索,學(xué)會提問題。一般來說,學(xué)習(xí)過程中,你遇上的問題,前人們多數(shù)也有遇上的,所以如果有什么不懂,在自己解決不了的時候,最好先到網(wǎng)上搜索一下,看能不能找到答案,找不到再到論壇里發(fā)問,發(fā)問也要有目的性,盡量簡單明了的描述問題,讓幫助你的人可以用最少的時間就看懂你說什么,畢竟人家?guī)椭闶敲赓M的,時間也是有限的。
第四篇:單片機學(xué)習(xí)心得體會
單片機的學(xué)習(xí)心得感受
隨著大規(guī)模集成電路的出現(xiàn)及其發(fā)展,將計算機的CPU、RAM、ROM、定時/數(shù)器和多種I/O接口集成在一片芯片上,形成芯片級的計算機,因此單片機早期的含義稱為單片微型計算機,直譯為單片機。
單片機是微型計算機應(yīng)用技術(shù)的一個重要分支,近年來在工業(yè)智能儀器儀表、光機電設(shè)備、自動檢測、信息處理、家電等的得到廣泛應(yīng)用和迅速發(fā)展。單片機是自動地進行運算和控制,把實現(xiàn)計算和控制的步驟一步步地用命令的形式,即一條條指令預(yù)先存入到存貯器中,單片機在CPU的控制下,將指令一條條地取出來,并加以翻譯和執(zhí)行,得到你要的東西。
這學(xué)期在老師的帶領(lǐng)下,我從對單片機一無所知的到現(xiàn)在終于有點了解,這期間雖然沒有在這方面下很大的功夫,但是也學(xué)到了一點知識,從點亮一個燈,到流水燈再到數(shù)碼管的顯示以及后面獨立按鍵。這都是我以前無法想象的。
單片機這門課是一科非常重視動手實踐的科目,不能總是看書,但是也不能完全不看書。單片機并傳統(tǒng)的數(shù)字電路或模擬電路那樣比較直觀,原因是除了“硬件”之外還存在一個“軟件”的因素。正是這個“軟件”的原因使得許多初學(xué)者怎么也弄不懂單片機的工作過程,怎么也不明白為什么將幾個數(shù)送來送去就能讓數(shù)碼管顯示一串字符或控制一個電機的變速。對初學(xué)單片機的人來說,需要從書中大概了解一下單片機的各個功能寄存器,如果看的多了反而容易搞亂,現(xiàn)在市場上大多數(shù)講單片機的書一開始就講解復(fù)雜的內(nèi)存、地址、存儲器什么的,更讓初學(xué)者感到不知所云、難以入門。如果按教科書式的學(xué)法,上來就是一大堆指令、名詞,學(xué)了半天還搞不清這些指令起什么作用,能夠產(chǎn)生什么實際效果,那么也許用不了幾天就會覺得枯燥乏味而半途而廢。簡單的說,使用單片機實際上就是用我們自己編寫的軟件去控制單片機的各個功能寄存器。再簡單些,就是控制單片機哪些引腳的電平什么時候輸出高電平,什么時候輸出低電平。由這些高低變化的電平來控制外圍電路,實現(xiàn)我們需要的各個功能。
學(xué)習(xí)單片機首先用到c語言,提到C語言源文件,大家都不會陌生。因為我們平常寫的程序代碼幾乎都在這個XX.C文件里面。編譯器也是以此文件來進行編譯并生成相應(yīng)的目標(biāo)文件。作為模塊化編程的組成基礎(chǔ),我們所要實現(xiàn)的所有功能的源代碼均在這個文件里。理想的模塊化應(yīng)該可以看成是一個黑盒子。即我們只關(guān)心模塊提供的功能,而不管模塊內(nèi)部的實現(xiàn)細節(jié)。在大規(guī)模程序開發(fā)中,一個程序由很多個模塊組成,很可能,這些模塊的編寫任務(wù)被分配到不同的人。而你在編寫這個模塊的時候很可能就需要利用到別人寫好的模塊的借口,這個時候我們關(guān)心的是,它的模塊實現(xiàn)了什么樣的接口,我該如何去調(diào)用,至于模塊內(nèi)部是如何組織的,對于我而言,無需過多關(guān)注。而追求接口的單一性,把不需要的細節(jié)盡可能對外部屏蔽起來,正是我們所需要注意的地方。
談及到模塊化編程,必然會涉及到多文件編譯,也就是工程編譯。在這樣的一個系統(tǒng)中,往往會有多個C文件,而且每個C文件的作用不盡相同。在我們的C文件中,由于需要對外提供接口,因此必須有一些函數(shù)或者是變量提供給外部其它文件進行調(diào)用。假設(shè)我們有一個LCD.C文件,其提供最基本的LCD的驅(qū)動函數(shù)。在當(dāng)前位置輸出一個字符 而在我們的另外一個文件中需要調(diào)用此函數(shù),那么我們該如何做呢?頭文件的作用正是在此??梢苑Q其為一份接口描述文件。其文件內(nèi)部不應(yīng)該包含任何實質(zhì)性的函數(shù)代碼。我們可以把這個頭文件理解成為一份說明書,說明的內(nèi)容就是我們的模塊對外提供的接口函數(shù)或者是接口變量。同時該文件也包含了一些很重要的宏定義以及一些結(jié)構(gòu)體的信息,離開了這些信息,很可能就無法正常使用接口函數(shù)或者是接口變量。但是總的原則是:不該讓外界知道的信息就不應(yīng)該出現(xiàn)在頭文件里,而外界調(diào)用模塊內(nèi)接口函數(shù)或者是接口變量所必須的信息就一定要出現(xiàn)在頭文件里,否則,外界就無法正確的調(diào)用我們提供的接口功能。因而為了讓外部函數(shù)或者文件調(diào)用我們提供的接口功能,就必須包含我們提供的這個接口描述文件----即頭文件。同時,我們自身模塊也需要包含這份模塊頭文件(因為其包含了模塊源文件中所需要的宏定義或者是結(jié)構(gòu)體,好比我們平常所用的文件都是一式三份一樣,模塊本身也需要包含這個頭文件。
硬件的設(shè)計跟焊接都要我們自己動手去焊,軟件的編程也要我們不斷的調(diào)試,最終一個能完成課程設(shè)計的勞動成果出來了,很高興它能按著設(shè)計的思想與要求運動起來。
當(dāng)然,這其中也有很多問題,第一、不夠細心比如由于粗心大意焊錯了線,由于對課本理論的不熟悉導(dǎo)致編程出現(xiàn)錯誤。第二,是在學(xué)習(xí)態(tài)度上,這次課是對我的學(xué)習(xí)態(tài)度的一次檢驗。對于這次單片機綜合課程,我的第一大心得體會就是作為一名工程技術(shù)人員,要求具備的首要素質(zhì)絕對應(yīng)該是嚴(yán)謹。我們這次課程所遇到的多半問題多數(shù)都是由于我們不夠嚴(yán)謹。第三,在做人上,我認識到,無論做什么事情,只要你足夠堅強,有足夠的毅力與決心,有足夠的挑戰(zhàn)困難的勇氣,就沒有什么辦不到的。
感謝老師的讓我有了一個更好的認識,無論是學(xué)習(xí)還是生活,生活是實在的,要踏實走路。雖然課程時間很短,但我學(xué)習(xí)了很多的東西,可以使我接觸接觸,感受頗深。
第五篇:單片機學(xué)習(xí)心得體會
單片機學(xué)習(xí)心得體會
周新濤
2011013959
在上個學(xué)期學(xué)校舉辦電子設(shè)計競賽,在比賽過程看過一些郭天祥的單片機教程,然后在這個學(xué)期真正的理論。通過上課理論與實踐相互結(jié)合,使我對單片機的認識有了更深刻的理解。系統(tǒng)以51單片機為核心部件,利用匯編軟件編程,通過鍵盤控制和數(shù)碼管顯示實現(xiàn)了基本時鐘顯示功能、時間調(diào)節(jié)功能,能實現(xiàn)本設(shè)計題目的基本要求和發(fā)揮部分。在平時上課中由于時間有限和本身知識水平的限制,有時做某些作業(yè)時,花上很多時間才能完成!但是在完成后,成功的喜悅充斥著。
在課上,我認識到計算機有運算器,計算器,控制器,輸入輸出設(shè)備組成。之前都是利用開發(fā)板,進行程序的仿真?,F(xiàn)在不斷利用軟件仿真,但兩者的作用是一樣。在仿真過程中,總是會碰到程序出錯的時候,只好苦思冥想,反復(fù)比對程序,在不斷修改后,總會成功。
在第一次是點亮LED燈來熟悉,keil軟件的使用和試驗箱上器材。第一次實驗體現(xiàn)了一個人對新事物的接受能力和敏感度。雖然之前做過許多種實驗。但依舊發(fā)現(xiàn)自己存在一個很大的問題,對已懂的東西沒耐心聽下去,容易開小差;在聽老師講解軟件使用時,思路容易停滯,然后就跟不上老師的步驟了,結(jié)果需要別人再次指導(dǎo);對軟件的功能沒有太大的熱情去研究探索,把一個個圖標(biāo)點開,進去看看。
在做實驗中,由于沒有課前準(zhǔn)備的意識,每每都是到了實驗室才開始編程,完成作業(yè),導(dǎo)致每次時間都有些倉促。在與同學(xué)討論,換種思路,換種方法,把問題給吃透。發(fā)現(xiàn)、提出、分析、解決問題和實踐能力是作為我們這個專業(yè)的基本素質(zhì)。依賴性很大,剛開始編程序時喜歡套用書上的語句,卻對語句的理解不夠。于是當(dāng)程序出現(xiàn)問題時,不知道如何修改,眼前的程序都是一塊一塊的被拼湊整合起來的,沒法知道哪里錯了。但是編程是一件很嚴(yán)肅的事情,容不得半點錯誤。在錯誤中不斷摸索中前行。