第一篇:學習ARM的心得體會
arm四天學習心得體會 1.懂得了如何使用iar的軟件使用,使用前要先進行環境的設置,具體見文檔iar使用說明。
2.第一次是學習點亮led燈,在點亮led燈中學習到如果要點亮led燈必須學會調用已經寫好的庫函數,對系統進行初始化systeminit();對io口進行初始化gpioinit();,還得對gpio口的設置gpiosetdir--設置gpio口為輸入為1的io口,設置完成后就可以對io口成為輸入輸出方向,當要點亮led燈時,要使用到gpiosetvalue();函數,當為確定好某個io口確定時,后一個為0時可以設置led燈為點亮了,然后就可以對io口進行設置了,用法和單片機基本一致,具體可以參考程序《閃燈》。3.蜂鳴器的鳴響很簡單,就是首先對蜂鳴器的io端口進行設定以驅動蜂鳴器,gpiosetdir(port3, 3, 1);當蜂鳴器需要鳴響時,直接對port3_3端口進行賦值0《gpiosetvalue(port3, 3, 0);》不讓蜂鳴器鳴響則是(gpiosetvalue(port3, 3, 01);)就可以了。
4.串口的使用
串口開始時要初始化出口,并且通過串口打印前會把數據存在數據緩存區里面,如果我們需要通過輸入值來控制arm板子的功能時,可以讀取緩存區(uartbuffer[uartcount-1])的內容(緩存區的內的數據都是字符型數據【char】)然后就可以通過輸入的值來處理,可以用中斷方式,也可以用查詢方式,可參考串口中斷程序 5.中斷的使用
使用中斷時需要初始化中斷例如: init_timer32(test_timer_num,time_interval);
// 初始化定時器 enable_timer32(test_timer_num);
//使能定時器使定時器工作 lpc_syscon->sysahbclkctrl |=(1<<6);//能ahb時鐘,為gpio提供時鐘源 通過定時器就可以在定時器內直接操作例如圖 1:
圖1 定時器的使用操作要先開使能,與定時器的定時方式如 圖2 圖2 6.外部中斷
外部中斷時要先對外部中斷的方式進行設置,是下降沿觸發還是上升沿觸發方式或其他,圖3 7.步進電機
initstep();//步進機相關引腳初始化
對了步進電機的引腳初始化后就可以對步進電機的轉動方向進行控制了,如圖 4 圖4 當motor_ccw 時,為反轉方式 8.鍵盤掃描
對鍵盤進行操作時,可以對鍵盤進行操作,可以通過串口輸入1~8來控制燈的閃動情況,初始化如圖 5 圖5 對鍵盤的操作時使用可以參考如下圖6:
圖6 9.i2c 在i2c中首先要在頭文件定義一個#define __debug_flash,使后面的程序生效。圖7所示:
圖7 在i2c里面要輸出溫度值的后面三位小數要經過處理,如圖8所示:
圖8 10.adc芯片
在用到adc芯片時,可以顯示阻值或者mv顯示,需經過處理如圖9所示:
圖9篇二:arm學習心得etc arm 學習心得
一、通用i/o口設置:
1、使用pinselx定義端口作為通用i/o功能, 每個引腳可能有4個功能, 因此需要用2位來確定其功能
2、設置scs寄存器第0位為1, 使其作為快速i/o端口
3、使用pinmodex定義端口的模式, 分為上拉, 下拉, 浮空, 因此需要用2位來確定其模式
4、使用fioxdir來確定端口方向
5、使用fioxmask與fioxclr, fioxset, fioxpin聯合來設置端
口的值
6、由于通用i/o一般情況下方向是確定的, 通常或者為輸入, 或者為輸出, 要模擬數據總線, 必須在需要的時候, 隨時改變端口的方向, 可使用fioxdir寄存器完成此項工作
7、除extint0-extint3外,端口0和端口2均可以作為外部
中斷源,它們共用extint3這個外部中斷。
8、根據實際情況合理選用。主要對上電時的初始值。上拉或
下拉都是弱的,有時也用外部分電阻上/下拉。對于輸入,上拉表示通用端口所連接的外部信號不存在時, 端口值為1, 下拉為0。對于輸出,如果沒有更改時,上拉輸出為高(1), 下拉輸出為低(0)。fioxpin總是可以讀出端口的狀態。fioxpin對非通用i/o端口也可讀出其狀態。
9、對于內置(片上)外設, 如uart, can, spi等:使用pinselx定
義端口作為特定外設。通常情況作為外設的引腳的方向是確定的,如果可能,還會自動改變方向。大多情況下,無須設置上拉或下拉模。設置外設的參數,如果需要的話,安裝中斷服務程序外設上電(有些外設默認是上電的,有些不是)啟動外設
二、以太網模塊心得
實例1:
以微處理器lpc2368為核心、dp83848c為以太網物理層
接口芯片,介紹嵌入式以太網接口的實現方法。
以太網接口電路主要由mac控制器和物理層接口
(physical layer,phy)兩大部分構成。lpc2368內嵌一個以太網控制器,支持精簡的媒體獨立接口(reduced media independent interface,rmii)和帶緩沖dma接口(buffered dma interface,bdi),可在半雙工和全雙工模式下提供10m/100mbps的以太網接入。因此,lpc2368內部實際上己經包含了以太網mac控制,但并未提供物理層接口,所以,需要外接一片物理層芯片以提供以太網的接入通道。在這里選用national semiconductor公司的dp83848c作為以太網物理層接口芯片,它提供了包括mii/rmii/sni接口,可以很方便地與lpc2368連接。dp83848c是一個10/100mb/s單端低功耗物理層器件,有幾種智能降功耗模式,包括有25mhz時鐘輸出,很容易通過
外接變壓器和雙絞線媒體接口;支持兩種ieee 802.3u mii和rmii rev 1.2,方便了設計;集成的亞層支持10base-t和100base-tx以太網協議;低功耗小于270mw、3.3v mac接口;可配置的sni接口;48引腳lqfp封裝(7x7mm)。dp83848c作為一種以太網物理層收發器,廣泛應用于高端外圍設備、工業控制和工廠自動化操作、通用的嵌入式應用領域 lpc2368與dp83848c連接比較簡單,直接通過rmii接口連接即可。連接好后,dp83848c再通過網絡隔離變壓器和rj45接口接入傳輸媒體,其電路框圖如圖1所示。
16st8515為網絡隔離變壓器,其主要是起信號傳輸、阻抗匹配、波形修復、雜波抑制以及高電壓隔離等作用,以保護系統的安全
電路原理圖:
實例2: s3c4510b 內嵌一個以太網控制器,支持媒體獨立接口(media independent interface,mii)和帶緩沖 dma 接口(buffered dma interface,bdi)。在該系統中,使用 rtl8201 作為以太網的物理層接口。篇三:arm的linux常用指令學習心得體會 2010 arm的linux常用指令學習心得體會 2010-01-26 15:42:19 閱讀29 評論0 字號:大中小
****************************************************************************************** tar *.tar.bz2 ——>參數 jxfv *.tgz ——>參數 zxfv 或 zxf *.tar.gz ——>參數zxfv 注: j 表示針對bzip2壓縮文件; z 表示gzip壓縮文件; x 表示釋放文件;
f 表示使用檔案文件或設備,必選參數; v 表示顯示解壓信息。
****************************************************************************************** 掛載windows fat32分區 mount-t vfat /dev/hda1 /mnt/c-o codepage=936,iocharset=cp936 注: vfat表示加載fat格式分區;(轉載于:學習arm的心得體會)936是為了支持中文提供的代碼頁字符集選項,如果不加codepage=936,iocharset=cp936的話,加載的fat分區中的文件名不能正確顯示中文字符串; codepage=936,iocharset=cp936中間無空格分開的;
可以使用tab鍵獲得硬盤分區信息的提示; /mnt/c是預先建立的掛載目錄。
****************************************************************************************** rm rm-rf filename r 表示recuisive遞歸刪除目錄下的所有子目錄及文件; f 表示force,強制刪除,不提示; i 表示interactive,交互的,刪除的時候出現提示。??
****************************************************************************************** linux基本操作命令
基本操作命令
--------ls--------ls #以默認方式顯示當前目錄文件列表 ls –a #顯示所有文件包括隱藏文件 ls –l #顯示文件屬性,包括大小,日期,符號連接,是否可讀寫及是否可執行 ls--color=never *.so > obj #不顯示文字顏色,將所有so文件記錄到obj文件中 cd--------cd dir #切換到當前目錄下的dir目錄 cd / #切換到根目錄
cd..#切換到到上一級目錄 cd../..#切換到上二級目錄 cd ~ #切換到用戶目錄,比如是root用戶,則切換到/root下 rm--------rm file #刪除某一個文件
rm-fr dir #刪除當前目錄下叫dir的整個目錄 cp--------cp source target #將文件source 復制為 target cp /root/source.#將/root下的文件source復制到當前目錄 cp –av soure_dir target_dir #將整個目錄復制,兩目錄完全一樣 cp –fr source_dir target_dir #將整個目錄復制,并且是以非鏈接方式復制,當source目錄帶有符號鏈接時,兩個目錄不相同 mv--------mv source target #將文件source更名為target diff--------diff dir1 dir2 #比較目錄1與目錄2的文件列表是否相同,但不比較文件的實際內容,不同則列出
diff file1 file2 #比較文件1與文件2的內容是否相同,如果是文本格式的文件,則將不相同的內容顯示,如果是二進制代碼則只表示兩個文件是不同的--------echo--------echo message #顯示一串字符 echo message message2 #顯示不連續的字符串 cat--------cat file #顯示文件的內容,和dos的type相同 cat file | more #顯示文件的內容并傳輸到more程序實現分頁顯示,使用命令less file可實現相同的功能 more--------more #分頁命令,一般通過管道將內容傳給它,如ls | more export--------export lc_all=zh_cn.gb2312 #將環境變量lc_all的值設為zh_cn.gb2312 export display=0:0 #通過該設置,當前字符終端下運行的圖形程序可直接運行于xserver date--------date #顯示當前日期時間
date-s 20:30:30 #設置系統時間為20:30:30 date-s 2002-3-5 #設置系統時期為2003-3-5 clock--------clock –r #對系統bios中讀取時間參數 clock –w #將系統時間(如由date設置的時間)寫入bios eject--------eject #umout掉cdrom并將光碟彈出,但cdrom不能處于busy的狀態,否則無效 du--------du #計算當前目錄的容量
du-sm /root #計算/root目錄的容量并以m為單位 find--------find-name /path file #在/path目錄下查找看是否有文件file grep--------grep-ir “chars” #在當前目錄的所有文件查找字串chars,并忽略大小寫,-i為大小寫,-r為下一級目錄 vi--------vi file #編輯文件file vi 原基本使用及命令:
輸入命令的方式為先按ctrl+c,然后輸入:x(退出),:x!(退出并保存):w(寫入文件),:w!(不詢問方式寫入文件),:r file(讀文件file),:%s/oldchars/newchars/g(將所有字串oldchars換成newchars)這一類的命令進行操作 man--------man ls #讀取關于ls命令的幫助 man ls | grep color #讀取關于ls命令的幫助并通過grep程序在其中查找color字串 startx--------startx #運行linux圖形有環境 xfree86 #只運行x圖形server reboot--------reboot #重新啟動計算機 halt--------halt #關閉計算機 init--------init 0 #關閉所有應用程序和服務,進入純凈的操作環境 init 1 #重新啟動應用及服務 init 6 #重新啟動計算機--------擴展命令
--------tar--------tar xfzv file.tgz #將文件file.tgz解壓 tar xfzv file.tgz-c target_path #將文件file.tgz解壓到target_path目錄下 tar cfzv file.tgz source_path #將文件source_path壓縮為file.tgz tar c directory > directory.tar #將目錄directory打包成不壓縮的directory.tar tar xf directory.tar #可將不壓縮的文件解包 gzip--------gzip directory.tar #將覆蓋原文件生成壓縮的 directory.tar.gz gunzip--------gunzip directory.tar.gz #覆蓋原文件解壓生成不壓縮的 directory.tar。demsg--------dmesg #顯示kernle啟動及驅動裝載信息 uname--------uname #顯示操作系統的類型篇四:arm學習心得,arm入門,arm基礎,什么是arm arm學習心得,arm入門,arm基礎,什么是arm 一個電子工程師的arm學習心得 目錄:
一 首先說說arm的發展 二 arm是硬件還是軟件 三 要不要買開發板 買哪家
四 要不要有51 avr等單片機基礎 五 開發都需要學習哪些軟件
七 選ucos?uclinux?linux?vxworks?還是當單片機用 八 學習要用多長時間 九
arm都玩什么十 我用的什么板子 十一 開發流程
十二 關于jtag訪真器十三 哪個公司的arm 我的筆記剛公布就有很多朋友來找我,把我當高手,問我“arm怎么入門”。我不是高手,仍然是菜鳥。
但是回想起自己當時的迷茫,特意寫了這篇東西,當作給和我一樣的兄弟姐妹的幫助吧。問這個問題的人多半不是已經工作的工程師,而是和我一樣是學生,所以這篇筆記就把看家當成我一樣的菜鳥,高手勿怪。
首先聲明:本人還沒有找工作,事實上處于研究生剛畢業,還沒開始找工作的空閑時間,44b0只是興趣所在,打發時間。
所有看法完全是自己的感受,不代表任何他人。錯了的觀點各位幫我糾正。
再次補充:很多朋友看了上面的話就問我為什么研究生畢業了還不找工作:)說是打發時間,其實是因為研究生的時候帶了一個項目,申請提前畢業以后項目還有塊尾巴,答應導師把項目做完再走:)就這么簡單。男人總點負點責,呵呵
以下問題常被問到,我就想到哪說到哪吧。
一 首先說說arm的發展
可以用一片大好來形容,翻開各個公司的網站,招聘里面嵌入式占據了大半工程師職位。
廣義的嵌入式無非幾種:傳統的什么
51、avr、pic稱做嵌入式微控制器;arm是嵌入式微處理器;dsp;fpga。
客觀的講,工作需求量上dsp的需求比arm要多,而arm和fpga差不多。dsp因為數字處理與通信領域的空前發展而火暴,小到mp3 射象頭,大到我們軍品里的控制器,應用面很廣。fpga的兄弟一般做ansic(特殊芯片設計,好象是這么翻譯的)。而arm單純說來并不比一個單片機強多少,但是它的獨特就在于不斷下降的價格和提升的性能。這完全依靠于arm公司的戰略,厲害!很佩服他們的戰略眼光!
值得注意的是:在找工作中,企業(著名的,小的不算)對單純的arm硬件開發工程師并不比單片機重視,很少有大企業的職位里寫“從事過arm開發優先”。寫的多的是什么?“嵌入式linux”
到這相信大家看出來了吧,需要的是硬件中的軟件。
二 arm是硬件還是軟件
很難說,arm是硬件,linux是軟件。arm的硬件多半已經模塊化了,像我這樣把板子改成這樣的就算動的多的了,這同樣是arm公司的戰略,再次佩服。
實際中的linux的開發工作更多,更耗時。從這方面說arm應該算是軟件了。在找工作中更是這樣,舉個例子,聯想里和arm最接近的是“bios工程師”是軟件,moto里接近的是嵌入式linux工程師是軟件。而其他很多公司把嵌入式產品開發歸為硬件。所以,不要討論這個,好好玩轉自己的板子才是關鍵。實在不爽你就把自己叫“嵌入式開發工程師”
三 要不要買開發板 買哪家
我的答案是“在你個人的學習方法”,但是如果看家是需要看這騙筆記的水平,個人推薦還是買現成的。1 買
買板子可以把注意力集中在軟件開發上,軟件開發(尤其是驅動)可以不必擔心自己硬件上的問題,我就是以便調試一邊寫驅動和程序,每次寫驅動前就要先確認硬件沒問題。
另外,買板子更省錢和時間,我自己做的板子,原理圖pcb花了2周以上!制版又15天,回來以后焊接44b0 160個腳!那叫一個麻煩~~花了多少錢呢?2層板,制版費就300塊!當然 我把接口都外引了,還做了個20x18的lcd背板,板子比較大。總體下來 元件+lcd屏+pcb=11xx塊!夠2410的了。
再有就是買的資料相對來說比較全,但是不要指望有技術支持!都是騙人的,賣你之后就不會理你。2 做
自己做可以更了解底層硬件,可以按照自己的要求加東西,比如我就加了gps模塊、gprs模塊、sd卡模塊,擴了個iic的35個鍵子的鍵盤、把lcd接口按照買的lcd改裝了,可以用fpc線直接連接。做的很爽的。玩一把嗎。
當然,你可以有策略的做,比如像我一樣,把ram和rom,網絡都保持和某現成的板子一樣,這樣他們的資料你就可以拿過來直接用,給自己留個退路。其他的如sd了 什么的自己做。都達到了~~就是費錢,費時間。
再有就是給做的朋友幾點建議:盡量拿到現成的板子,盡量多搜集其他板子的全套資料,一定要拿到一張沒問題的原理圖。
網上流傳的原理圖多數是龔俊03年畫的,再這里對龔俊表達一下我的敬意!牛人!但是那個圖有個小bug,我指的是03版的,后來的沒這問題了。8019那地址線和地址有問題。還有人仿照他的pdf圖畫的sch,更是漏洞百出!譴責!順便譴責把龔俊板子偷賣 的人。3 買哪家
個人感覺分3類吧 1)首先是zlg的,資料非常的全,感覺他是真正想教你怎么開發arm,而不是像有的公司自己技術都沒做好就做個板子出來賣錢。但是最大的不利就是價格太貴!而且主要是philip的,貨源比較麻煩~~可能有人說21xx系列的不貴啊,那是總線不外擴的,只能跑ucos,不能跑uclinux。但是說是話,21xx系列才是arm7的價格性能結合點。arm7最適合做工業控制,arm普及,銷量都是怎么來的?都是arm7來的,而44b0是典型的商業片子。但是,這里如果你看中的是為工作做準備,還是選能跑uclinux的吧。但是仍然作為第一個推薦,因為菜鳥時期,合適的資料太重要了!在這里被zlg的務實*感動!你看人家那代碼寫的。2)感覺硅谷芯微的2440不錯
硬件沒別的,就是資料比較全的說,不像有些家,原理圖直接拿人家的,還錯的~~ 3)找個最便宜的好象最便宜的有賣350的吧?也是沒別的,就是即省了錢 還省時間搜集資料,至于資料全不全,別計較了~~硬件肯定好使就行吧。
四 要不要有51 avr等單片機基礎 有更好,但沒有也無所謂。兩個月以前,我只是看別人做,耳濡目染~~,本科學過單片機,從來沒做過。我們這的技術主干做avr和51,我就跟他們調過c語言程序。你看出來了?我是個不折不扣的菜鳥吧? 但是做這個之前我特意找了zlg的兩本書,看了里面的例子和原理圖,這很重要。例程里有匯編有c,都看懂了就ok,不用自己現寫
五 開發都需要學習哪些軟件
總結起來最主要的有以下幾個吧 1 ads調試用
確切的說是ads+axd。ads里包含axd。原來都用sdt后來arm公司停止對sdt支持了,改支持ads了,還是用ads吧。
有的人的程序發布的仍然是sdt版本的,但基本都可以找到相應ads的,新人在這里不要發蒙。ads是編譯器,axd是調試器。編譯成axf以后再在arm的ram里調試。2 plashpgm flash燒寫的軟件。axd在ram里調試,掉電就沒有了,方便程序修改。調試好的程序再下到flash里,上電直接運行。
同類的軟件還有很多,什么fluted了、flshp了都是,但flashpgm最好,要是有人還問flash不支持bin格式文件的問題就要看我寫的plashpgm使用了。3 banyant調試代理(不知道名對不,起這么個難記的,我一般都叫它“半羊”因為知道它那幾天剛吃了烤羊)
調試代理就是用它幫你使用更簡單的jtag(便宜啊)來實現原本1k才賣的jtag仿真器的大部分功能。jtag調試原理看我另一篇筆記。簡單的就可以把他理解為你自己做的jtag的驅動就行了。
調試代理還有很多種,什么h-jtag了、arm7了(不知道具體叫什么,就記得可執行文件叫arm7.exe)都是,banyant比較好。
需要注意的是,沒種調試代理安裝方法雖然都簡單 但都不一樣,需要看說明。而且axd調試之前都要運行。省錢了,就別怕麻煩了。4 arm-elf-tools工具鏈
里面是uclinux開發用的工具比如arm-elf-gcc只類的。工具鏈就是把很多工具打包在一起發布的方便你開發的東西。具體安裝方法看我另一篇筆記。另外如果你開發linux就要用arm-linux-tools,不一樣,不通用。5 u-boot 大名鼎鼎的bootloader生成工具,同類的好象還有vivi(名字很曖昧~~)
生成的bootloader燒到flash里,然后就可以用bootloader下載 燒寫其他了 有了bootloader才能下uclinux。bootloader就像電腦上的bios。當然ucos的不用這個,用什么我不知道:)
最新版本是1.1.4 具體使用方法看我另一篇筆記吧。6 uclinux包 uclinux的源碼包,不用多說了吧?建議大家用現成的先體會一下,然后再自己編譯,裁剪。因為單獨uclinux的編輯技術上比較簡單,但涉及的方面還是比較廣的。7 vmware 老牌的虛擬機軟件,在一個機器上虛擬出一個機器裝linux(pc上用的),省得你來回開關機了。記得裝vmware-tools,安裝方法在我另一篇筆記里。
七 選ucos?uclinux?linux?vxworks?還是當單片機用 1 搞開發,工程設計,用ucos,小巧,多進程,簡單,體現了arm7的精髓。2 linux 正根的嵌入式系統,linux消費與通信領域用的比較多,但缺點是必須arm9才能跑,arm9的板子自己做就不行了,6層板太貴。買開發板500-1500吧。但是還是推薦選arm9+linux 3 uclinux 算投機嵌入式系統:)arm7上可以跑,由有linux近親,學好好可以比較方便的轉向linux,像我一樣的窮鬼用吧,呵呵 4 vxworks 學好后可以找到高薪工作,但工作機會本身并不比linux好找。5 當單片機用
不推薦,雖然我景仰的zlg一直號召這么干。因為對于學習來說多進程的系統設計才是arm7的玩頭,至少你也要整個ucos啊:)
有朋友問我先學這個當基礎不行嗎?那當然可以~~但我當時就用了1周搞定,就是我先的ads在ram中調試的筆記。后來我清空flash用的小段程序還是當時寫的led閃爍程
序呢。另外1周里其中還因為自己過于菜,沒把om設置好導致晶陣不陣哈哈。這個是必須做的,但一帶而過。目標放的遠一點。
八 學習要用多長時間
我從菜鳥到現在兩個多月,中間被打擾數次。仍然搞定了pcb設計與制版,ram調試,flash下載,uboot移植和下載uclinux(沒剪裁,用現成的),lcd驅動。再次坦誠的說:我確實比較菜,說這些不是讓大家羨慕,只是告訴你們“你們應該比這個更好”
我相信良好的態度+合適的方法+及時的總結=成績 九 arm都玩什么 就幾點 1 硬件設計 2 系統移植 3 驅動開發 4 應用開發
沒了。其中推薦把注意力放在后兩個上,3有難度,4比較靈活,最重要的是都是找工作的砝碼。
十 我用的什么板子
很多人問我這個問題,我特意寫過一個的。再說一次吧。
我是自己做的,ram、rom、8019等比較麻煩而當時的自己不理解的都按照龔俊的做的。保持其他不便的情況下做了如下改動。1 加了串口通信的gps模塊、gprs模塊
一個uart0,一個uart1,當與要用超級終端時用跳線切換。2 sd卡,和7843觸摸屏
同時掛在spi總線上,因為spi只能掛一個設備,同時還做了i/o模擬的準備,把兩個設備又通過跳線掛在4個io上。3 擴了個iic的35個鍵子的鍵盤
用的zlg的7290,不占用cpu,最大支持64個鍵子,只上了35個,其他留接口。4 把lcd接口按照買的lcd改裝了,可以用fpc線直接連接。
所以改動雖然多,但真正很移植了,初期調試有關的并沒動,就是為了現在不那么菜的時候做準備:)
十一 開發流程
這里是我的開發流程 1 設計原理圖(含wiggler的jtag訪真器)2 設計pcb(含wiggler的jtag訪真器)3 制版
焊接電壓,確定電壓沒問題 5 焊接44b0+jtag電路+wiggler的jtag訪真器+周邊電路,用banyant+仿真器連接,篇五:嵌入式心得體會
這學期才接觸嵌入式系統感覺還稱不上入門,我通過學習知道了嵌入式的發展前景很大,各個領域都用到了嵌入式,學好嵌入式不愁沒飯吃。
廣義上講,凡是帶有微處理器的專用軟硬件系統都是嵌入式系統。如各類單片機和dsp系統。從狹義上講,那些使用嵌入式微處理器構成獨立系統,具有自己操作系統,具有特定功能,用于特定場合的專用軟硬件系統稱為嵌入式系統。嵌入式系統由嵌入式硬件與嵌入式軟件組成;嵌入式硬件以芯片、模板、組件、控制器形式埋藏于設備內部。理解“嵌入”的概念 主要從三個方面上來理解。
1、從硬件上,將基于cpu的處圍器件,整合到cpu芯片內部,比如早期基于x86體系結構下的計算機,cpu只是有運算器和累加器的功能,一切芯片要造外部橋路來擴展實現,象串口之類的都是靠外部的16c550/2的串口控制器芯片實現,而目前的這種串口控制器芯片早已集成到cpu內部,還有pc機有顯卡,而多數嵌入式處理器都帶有lcd控制器,但其種意義上就相當于顯卡。比較高端的arm類intel xscale架構下的ixp網絡處理器cpu內部集成pci控制器(可配成支持4個pci從設備或配成自身為cpi從設備);還集成3個npe網絡處理器引擎,其中兩個對應于兩個mac地址,可用于網關交換用,而另外一個npe網絡處理器引擎支持dsl,只要外面再加個phy芯片即可以實現dsl上網功能。ixp系列最高主頻可以達到1.8g,支持2g內存,1g×10或10g×1的以太網口或febre channel的光通道。ixp系列應該是目標基于arm體系統結構下由intel進行整合后成xscale內核的最高的處理器了。
2、從軟件上前,就是在定制操作系統內核里將應用一并選入,編譯后將內核下載到rom中。而在定制操作系統內核時所選擇的應用程序組件就是完成了軟件的“嵌入”,比如wince在內核定制時,會有相應選擇,其中就是wordpad,pdf,mediaplay等等選擇,如果我們選擇了,在ce啟動后,就可以在界面中找到這些東西,如果是以前pc上將的windows操作系統,多半的東西都需要我們得新再裝。
3、把軟件內核或應用文件系統等東西燒到嵌入式系統硬件平臺中的rom中就實現了一個真正的“嵌入”。
嵌入式系統分為4層,硬件層、驅動層、操作系統層和應用層
1、硬件層,是整個嵌入式系統的根本,如果現在單片機及接口這塊很熟悉,并且能用c和匯編語言來編程的話,從嵌入式系統的硬件層走起來相對容易,硬件層也是驅動層的基礎,一個優秀的驅動工程師是要能夠看懂硬件的電路圖和自行完成cpld的邏輯設計的,同時還要對操作系統內核及其調度性相當的熟悉的。但硬件平臺是基礎,增值還要靠軟件。硬件層比較適合于,電子、通信、自動化、機電一體、信息工程類專業的人來搞,需要掌握的專業基礎知識有,單片機原理及接口技術、微機原理及接口技術、c語言。
2、驅動層,這部分比較難,驅動工程師不僅要能看懂電路圖還要能對操作系統內核十分的精通,以便其所寫的驅動程序在系統調用時,不會獨占操作系統時間片,而導至其它任務不能動行,不懂操作系統內核架構和實時調度性,沒有良好的驅動編寫風格,按大多數書上所說添加的驅動的方式,很多人都能做到,但可能連個初級的驅動工程師的水平都達不到,這樣所寫的驅動在應用調用時就如同windows下我們打開一個程序運行后,再打開一個程序時,要不就是中斷以前的程序,要不就是等上一會才能運行后來打開的程序。想做個好的驅動人員沒有三、四年功底,操作系統內核不研究上幾編,不是太容易成功的,但其工資在嵌入式系統四層中可是最高的。
驅動層比較適合于電子、通信、自動化、機電一體、信息工程類專業尤其是計算機偏體系結構類專業的人來搞,除硬件層所具備的基礎學科外,還要對數據結構與算法、操作系統原理、編譯原理都要十分精通了解。
3、操作系統層,對于操作系統層目前可能只能說是簡單的移植,而很少有人來自已寫操
作系統,或者寫出缺胳膊少腿的操作系統來,這部分工作大都由驅動工程師來完成。操作系統是負責系統任務的調試、磁盤和文件的管理,而嵌入式系統的實時性十分重要。據說,xp操作系統是微軟投入300人用兩年時間才搞定的,總時工時是600人年,中科院軟件所自己的女媧hopen操作系統估計也得花遇幾百人年才能搞定。因此這部分工作相對來講沒有太大意義。
4、應用層,相對來講較為容易的,如果會在windows下如何進行編程接口函數調用,到操作系統下只是編譯和開發環境有相應的變化而已。如果涉及java方面的編程也是如此的。嵌入式系統中涉及算法的由專業算法的人來處理的,不必歸結到嵌入式系統范疇內。但如果涉及嵌入式系統下面嵌入式數據庫、基于嵌入式系統的網絡編程和基于某此應用層面的協議應用開發(比如基于sip、h.323、astrisk)方面又較為復雜,并且有難度了。
通過網上查詢我發現目前國內外這方面的人都很稀缺。一方面,是因為這一領域入門門檻較高,不僅要懂較底層軟件(例如操作系統級、驅動程序級軟件),對軟件專業水平要求較高(嵌入式系統對軟件設計的時間和空間效率要求較高),而且必須懂得硬件的工作原理,所以非專業it人員很難切入這一領域;另一方面,是因為這一領域較新,目前發展太快,很多軟硬件技術出現時間不長或正在出現(如arm處理器、嵌入式操作系統等),掌握這些新技術的人當然很少。嵌入式人才稀缺,身價自然就高,越有經驗價格就越高。其實嵌入式人才稀少,根本原因可能是大多數人無條件接觸,這需要相應的嵌入式開發板和軟件,另外需要有經驗的人進行指導開發流程。我們軟件系的人學習嵌入式,顯然應偏重于嵌入式軟件,特別是嵌入式操作系統方面。對于搞嵌入式軟件的人,最重要的技術顯然是掌握主流嵌入式微處理器的結構與原理,必須掌握一個嵌入式操作系統,必須熟悉嵌入式軟件開發流程并至少做過一個嵌入式軟件項目。然而我們都沒有做過一個嵌入式軟件項目,甚至連嵌入式的開發流程我也不清楚,我只了解了使用簡單工具做一個簡單的實驗。只有去專研才能在嵌入式的領域站住腳,只有知道的比別人多才會更有競爭力。通過網上了解,我查詢了嵌入式的入門和所需要的知識,其中c語言尤為重要,不管是做嵌入式軟件還是硬件開發的人員,對c語言的掌握這個是必需的,特別是對于以后致力于嵌入式軟件開發的人,現在絕大部分都是用c語言。其次,應該對操作系統有所了解,這對你對硬件和軟件的理解,絕對有很大的幫助。應該把系統的管理理解一下,比如進程、線程,系統如何來分配資源的,系統如何來管理硬件的;知道了c語言和操作系統之后,再來看看嵌入式系統,我們主要學的是arm,用的是arm7,深入理解arm不是件容易的事,只有在知道arm相關知識之后才能稱得上嵌入式已經入門了。與嵌入式有關的知識我也學了不少就是不能夠綜合在一起運用,組成原理,數據結構,操作系統,c++,這3門與嵌入式密切相關的學科都系統的學了一遍,但由于長時間沒用到都有點忘記了,從網上得知嵌入式的學習與這些書有很大關系之后,我把嵌入式與以前學過的知識結合起來發現嵌入式的實驗中很多都是共通的,我對嵌入式有了初步的理解。
我以為學習嵌入式應該分為2個部分:軟件和硬件。關于硬件方面我接觸到了數字電路教材和模擬電路方面的知識,但由于沒有嵌入式cpu很難親自動手來實現嵌入式的相關理論;嵌入式入門則需要不斷地實驗與分析,我只在實驗課時做幾個與所給的程序相關的小程序來實現一下;而軟件方面則學過c語言,里面通常的語法曾今熟悉過;我通過下列方法來適應c語言在嵌入式中應用:首先重新翻看了下c的教材,看了些常見的語法,接著在編譯器的角度來看待c,編譯原理我剛學過,其中將高級語言與低級語言的翻譯感覺在嵌入式中用到了很多;最后沖硬件的角度來看待c。嵌入式的核心包括嵌入式操作系統,嵌入式軟件開發平臺及工具以及嵌入式應用軟件。這些決定怎樣才能開發一個好的嵌入式系統。下面談談我了解的嵌入式的相關知識與應用: 首先,嵌入式系統是以應用為中心,以計算機技術為基礎,且軟硬件可裁減,適應應 用系統對功能、可靠性、成本、體積、功耗有嚴格要求的專用計算機系統。嵌入式有如下幾個突出的有點1.系統內核小,2專用性強,3系統精簡4高實時性os5嵌入式系統的應用程序可以沒有操作系統直接在芯片上運行,6嵌入式系統需要開發工具和環境。嵌入式系統是近幾年才風靡起來的,但是這個概念并非新近才出現。從20世紀七十年代單片機(最早的單片機是intel公司的 8048,出現在1976年)的出現到今天各式各樣的嵌入式微處理器,微控制器的大規模應用,嵌入式系統已經有了近30年的發展歷史。經過30年的發展,嵌入式技術已經日趨成熟,在中國嵌入式機一般由嵌入式微處理器、外圍硬件設備、嵌入式操作系統以及用戶的應用程序等四個部分組成,用于實現對其他設備的控制、監視或管理等功能。
其次,嵌入式系統無疑是當前最熱門最有發展前途的it應用領域之一。嵌入式系統用在一些特定專用設備上,通常這些設備的硬件資源(如處理器、存儲器等)非常有限,并且對成本很敏感,有時對實時響應要求很高等。特別是隨著消費家電的智能化,嵌入式更顯重要。嵌入式系統是軟硬結合的學科,通常有兩類人會去專研嵌入式:一類是學電子工程、通信工程等偏硬件專業的,另一類是學軟件、計算機專業出身的人,主要從事嵌入式操作系統和應用軟件的開發。我是軟件專業的學習嵌入式,越是智能設備越是復雜系統,軟件越起關鍵作用,而且這是目前的趨勢。嵌入式應用在很多方面,具體的可以分為工業控制,交通管理,信息家電,家庭智能管理系統,pos網絡及電子商務,環境工程與自然,機器人,機電產品方面應用等方面。其中目前在服務領域,如遠程點菜器等已經體現了嵌入式系統的優勢。例外還有很多地方用到了嵌入式系統,最近飛利浦和arm共同推出32位risc嵌入式控制器,適用于工業控制,采用最先進的0.18微米cmos嵌入式閃存處理技術,操作電壓可以低至1.2伏,它還能降低25%到30%的制造成本,在工業領域中對最終用戶而言是一套極具成本效益的解決方案。
那么該如何學好嵌入式我覺得應該從以下幾點入手:
首先c語言,這個是毋庸置疑的,不管是做嵌入式軟件還是硬件開發的人員,對c語言的掌握這個是必需的,特別是對于以后致力于嵌入式軟件開發的人,現在絕大部分都是用c語言,你說不掌握它可以嗎?至于如何學習c語言,我想這些基礎的知識每個人都有自己的方法,關鍵要去學習,看書也好,網上找些視頻看也好。很多人會問,c語言要學到怎么樣,我覺得這沒有標準的答案。我想至少你在明白了一些基礎的概念后,就該寫代碼了,動手才是最重要的,當你動手了,遇到問題了,再反過來學習,反過來查查課本,那時的收獲就不是你死看書能得到的。其次,應該對操作系統有所了解,這對你對硬件和軟件的理解,絕對有很大的幫助。應該把系統的管理理解一下,比如進程、線程,系統如何來分配資源的,系統如何來管理硬件的,當然,不是看書就能把這些理解透,如果不是一時能理解,沒關系,多看看,結合以后的項目經驗,會有更好的理解的。
還有應該學習下linux或者wince下的編程,這些對以后做應用的編程很有幫助,當然,如果做手機的話,那可以學習mtk、塞班、android等操作系統,android是以后發展的趨勢,現在很熱門,android也是基于linux系統封裝的,所以建議先學習下linux。
還有,應該學習下單片機或者arm或者mips,很多人說我沒有單片機的經驗,直接學arm可以嗎?我覺得那完全沒有問題的,當然如果你學習過單片機,那最好不過了,以后學習arm就更簡單了。
最后如果你把以上的知識都有所了解后,就該去閱讀閱讀一些優秀的代碼,比如結合arm芯片手冊學習去學習下uboot的源代碼,了解下最小的系統開發,那對你整個嵌入式開發的非常有幫助的,可以的話,還可以學習下linux的源代碼,當然如果你直接閱讀2.6的代碼,我想你會很痛苦的,可以先看看linux 代碼早期的版本,比如0.12 的代碼等等,麻雀雖
小,五臟俱全,如果你全看完了,那我想你就是一名很成功的嵌入式工程師。
以上就是我在本學期學習嵌入式后的心得及感想。
第二篇:ARM學習心得體會
ARM四天學習心得體會
1.懂得了如何使用IAR的軟件使用,使用前要先進行環境的設置,具體見文檔IAR使用說明。
2.第一次是學習點亮LED燈,在點亮LED燈中學習到如果要點亮LED燈必須學會調用已經寫好的庫函數,對系統進行初始化SystemInit();對IO口進行初始化GPIOInit();,還得對GPIO口的設置GPIOSetDir--設置GPIO口為輸入為1的IO口,設置完成后就可以對IO口成為輸入輸出方向,當要點亮LED燈時,要使用到GPIOSetValue();函數,當為確定好某個IO口確定時,后一個為0時可以設置LED燈為點亮了,然后就可以對IO口進行設置了,用法和單片機基本一致,具體可以參考程序《閃燈》。
3.蜂鳴器的鳴響很簡單,就是首先對蜂鳴器的IO端口進行設定以驅動蜂鳴器,GPIOSetDir(PORT3, 3, 1);當蜂鳴器需要鳴響時,直接對PORT3_3端口進行賦值0《GPIOSetValue(PORT3, 3, 0);》不讓蜂鳴器鳴響則是(GPIOSetValue(PORT3, 3, 01);)就可以了。4.串口的使用
串口開始時要初始化出口,并且通過串口打印前會把數據存在數據緩存區里面,如果我們需要通過輸入值來控制ARM板子的功能時,可以讀取緩存區(UARTBuffer[UARTCount-1])的內容(緩存區的內的數據都是字符型數據【char】)然后就可以通過輸入的值來處理,可以用中斷方式,也可以用查詢方式,可參考串口中斷程序 5.中斷的使用
使用中斷時需要初始化中斷例如:
init_timer32(TEST_TIMER_NUM,TIME_INTERVAL);
// 初始化定時器 enable_timer32(TEST_TIMER_NUM);
//使能定時器使定時器工作 LPC_SYSCON->SYSAHBCLKCTRL |=(1<<6);//能AHB時鐘,為GPIO提供時鐘源
通過定時器就可以在定時器內直接操作例如圖1:
圖1 定時器的使用操作要先開使能,與定時器的定時方式如 圖2
圖2 6.外部中斷
外部中斷時要先對外部中斷的方式進行設置,是下降沿觸發還是上升沿觸發方式或其他,圖3 7.步進電機
InitStep();
//步進機相關引腳初始化
對了步進電機的引腳初始化后就可以對步進電機的轉動方向進行控制了,如圖4
圖4 當MOTOR_CCW 時,為反轉方式 8.鍵盤掃描
對鍵盤進行操作時,可以對鍵盤進行操作,可以通過串口輸入1~8來控制燈的閃動情況,初始化如圖5
圖5 對鍵盤的操作時使用可以參考如下圖6:
圖6 9.I2C 在I2C中首先要在頭文件定義一個#define __DEBUG_FLASH,使后面的程序生效。圖7所示:
圖7 在I2C里面要輸出溫度值的后面三位小數要經過處理,如圖8所示:
圖8 10.ADC芯片
在用到ADC芯片時,可以顯示阻值或者mv顯示,需經過處理如圖9所示:
圖9
第三篇:ARM學習規劃(經典).
ARM 學習規劃
ARM+LINUX路線,主攻嵌入式 Linux 操作系統及其上應用軟件開發目標:(1 掌握主流嵌入式微處理器的結構與原理(初步定為 arm9(2 必須掌握一個嵌入式操作系統(初步定為 uclinux 或 linux, 版本待定(3 必須熟悉嵌入式軟件開發流程并至少做一個嵌入式軟件項目。從事嵌入式軟件開發的好處是:(1目前國內外這方面的人都很稀缺。這一領域入門門檻較高,所以非專業 IT 人員很難切入這一領域;另一方面,是 因為這一領域較新,目前發展太快,大多數人無條件接觸。
(2與企業計算等應用軟件不同,嵌入式領域人才的工作強度通常低一些(但收入不低。
(3哪天若想創業,搞自已的產品,嵌入式不像應用軟件那樣容易被盜版。硬件設計一般都是請其它公司給訂做(這 叫 “ 貼牌 ” :OEM ,都是通用的硬件,我們只管設計軟件就變成自己的產品了。
(4興趣所在,這是最主要的。從事嵌入式軟件開發的缺點是:(1 入門起點較高,所用到的技術往往都有一定難度,若軟硬件基礎不好,特別是操作系統級軟件功底不深,則可能 不適于此行。
(2這方面的企業數量要遠少于企業計算類企業。
(3有少數公司經常要碩士以上的人搞嵌入式,主要是基于嵌入式的難度。但大多數公司也并無此要求,只要有經驗 即可。
(4平臺依托強,換平臺比較辛苦。興趣的由來:
1、成功觀念不同,不虛度此生,就是我的成功。
2、喜歡思考,挑戰邏輯思維。
3、喜歡 C C 是一種能發揮思維極限的語言。關于 C 的精神的一些方面可以被概述成短句如下: 相信程序員。
不要阻止程序員做那些需要去做的。保持語言短小精干。一種方法做一個操作。
使得它運行的夠快,盡管它并不能保證將是可移植的。
4、喜歡底層開發,討厭 vb 類開發工具(并不是說 vb 不好。
5、發展前景好,適合創業,不想自己要死了的時候還是一個工程師。方法步驟:
1、基礎知識: 目的:能看懂硬件工作原理,但重點在嵌入式軟件, 特別是操作系統級軟件 ,那將是我的優勢。
科目:數字電路、計算機組成原理、嵌入式微處理器結構。
匯編語言、C/C++、編譯原理、離散數學。
數據結構和算法、操作系統、軟件工程、網絡、數據庫。
方法:雖科目眾多,但都是較簡單的基礎,且大部分已掌握。不一定全學,可根據需要選修。
主攻書籍:the c++ programming language(一直沒時間讀、數據結構-C2。
2、學習linux : 目的:深入掌握 linux 系統。
方法:使用 linux — 〉 linxu 系統編程開發 — 〉驅動開發和分析 linux 內核。先看深,那主講原理。看幾遍后,看情景分析, 對照深看,兩本交叉,深是綱,情是目。剖析則是 0.11版,適合學習。最后深入代碼。
主攻書籍:linux 內核完全剖析、unix 環境高級編程、深入理解 linux 內核、情景分析和源代。
3、學習嵌入式 linux : 目的:掌握嵌入式處理器其及系統。方法:(1嵌入式微處理器結構與應用:直接 arm 原理及匯編即可,不要重復 x86。(2嵌入式操作系統類:ucOS/II簡單,開源,可供入門。而后深入研究 uClinux。(3必須有塊開發板(arm9以上 ,有條件可參加培訓(進步快,能認識些朋友。主攻書籍:毛德操的《嵌入式系統》及其他 arm9手冊與 arm 匯編指令等。
4、深入學習:
A、數字圖像壓縮技術:主要是應掌握 MPEG、mp3等編解碼算法和技術。B、通信協議及編程技術:TCP/IP協議、802.11, Bluetooth , GPRS、GSM、CDMA 等。
C、網絡與信息安全技術:如加密技術,數字證書 CA 等。
D、DSP 技術:Digital Signal Process, DSP 處理器通過硬件實現數字信號處理算法。
說明:太多細節未說明,可根據實際情況調整。重點在于1、3,不必完全按照順序作。對于學習c++,理由是 c++不只 是一種語言,一種工具,她還是一種藝術,一種文化,一種哲學理念、但不是拿來炫耀得東西。對于 linux 內核,學習編程,讀一些優秀代碼也是有必要的。
注意:要學會舉一反多,有強大的基礎,很多東西簡單看看就能會。想成為合格的程序員,前提是必須熟練至少一種 編程語言,并具有良好的邏輯思維。一定要理論結合實踐。
不要一味鉆研技術,雖然擠出時間是很難做到的,但還是要留點余地去完善其他的愛好,比如宇宙,素描、機械、管理, 心理學、游戲、科幻電影。還有一些不愿意做但必須要做的!技術是通過編程編程在編程編出來的。永遠不要夢想一步登天,不要做浮躁的人,不要覺得路途漫上。而是要編程編程 在編程,完了在編程,在編程!等機會來了在創業(不要相信有奇跡發生,盲目創業很難成功,即便成功了發展空間也 不一定很大。
嵌入式書籍推薦 Linux 基礎
1、《 Linux 與 Unix Shell 編程指南》
C 語言基礎
1、《 C Primer Plus, 5th Edition》 【美】 Stephen Prata著
2、《 The C Programming Language, 2nd Edition》 【美】 Brian W.Kernighan David M.Rithie(K & R著
3、《 Advanced Programming in the UNIX Environment, 2nd Edition》(APUE
4、《嵌入式 Linux 應用程序開發詳解》 Linux 內核
1、《深入理解 Linux 內核》(第三版
2、《 Linux 內核源代碼情景分析》毛德操 胡希明著 研發方向
1、《 UNIX Network Programming》(UNP
2、《 TCP/IP詳解》
3、《 Linux 內核編程》
4、《 Linux 設備驅動開發》(LDD 硬件基礎
1、《 ARM 體系結構與編程》杜春雷著
2、S3C2410 Datasheet 英語基礎
1、《計算機與通信專業英語》
系統教程
1、《嵌入式系統 ―― 體系結構、編程與設計》
2、《嵌入式系統 ―― 采用公開源代碼和 StrongARM/Xscale處理器》毛德操 胡希明著
3、《 Building Embedded Linux Systems》 理論基礎
1、《算法導論》
2、《數據結構(C 語言版 》 阿斯事實上
第四篇:ARM學習心得
ARM linux學習心得(zt)
2008-08-13 13:55
由于很多人總問這個問題,所以這里做一個總結文檔供大家參考。
這里必須先說明,以下的步驟都是針對Linux系統的,并不面向WinCE。也許你會注意到,現在做嵌入式的人中,做linux研究的人遠比做WinCE的人多,很多產家提供的資料也是以linux為主。我一直很難理解,其實WinCE的界面比linux的界面好看多了,使用起來也很方便,更為重要的是,WinCE的開發和Windows下的開發基本一樣,學起來簡單得多,但是學linux或者使用linux做嵌入式的人就是遠比WinCE多。在和很多工作的人交流時我了解到,他們公司從沒考慮使用WinCE,因為成本高,都是使用linux進行開發。我讀研究生的的實驗室中也沒有使用WinCE的,大都研究linux,也有少部分項目使用vxwork,但是就沒有聽說過使用WinCE的,原因就是開源!當然現在WinCE6.0聽說也開源,不過在成本和資源上linux已經有了無人能擋的優勢。與此相對應的是,越來越多的電子廠商已經開始使用linux開發產品。舉個例子,Google近期開發的智能手機操作系統Android其實就是使用linux-2.6.23內核進行改進得到的。
第一,學習基本的裸機編程。
對于學硬件的人而言,必須先對硬件的基本使用方法有感性的認識,更必須深刻認識該硬件的控制方式,如果一開始就學linux系統、學移植那么只會馬上就陷入一個很深的漩渦。我在剛剛開始學ARM的時候是選擇ARM7(主意是當時ARM9還很貴),學ARM7的時候還是保持著學51單片機的思維,使用ADS去編程,第一個實驗就是控制led。學過一段時間ARM的人都會笑這樣很笨,實際上也不是,我倒是覺得有這個過程會好很多,因為無論做多復雜的系統最終都會落實到這些最底層的硬件控制,因此對這些硬件的控制有了感性的認識就好很多了
學習裸機的編程的同時要好好理解這個硬件的構架、控制原理,這些我稱他為理解硬件。所謂的理解硬件就是說,理解這個硬件是怎么組織這么多資源的,這些資源又是怎么由cpu、由編程進行控制的。比如說,s3c2410中有AD轉換器,有GPIO(通用IO口),還有nandflash控制器,這些東西都有一些寄存器來控制,這些寄存器都有一個地址,那么這些地址是什么意思?又怎么通過寄存器來控制這些外圍設備的運轉?還有,norflash內部的每一個單元在這個芯片的內存中都有一個相應的地址單元,那么這些地址與剛剛說的寄存器地址又有什么關系?他們是一樣的嗎?而與norflash相對應的nandflash內部的儲存單元并不是線性排放的,那么s3c2410怎么將nandflash的地址映射在內存空間上進行使用?或者簡單地說應該怎么用nandflash?再有,使用ADS進對ARM9行編程時都需要使用到一個初始化的匯編文件,這個文件究竟有什么用?他里面的代碼是什么意思?不要這個可以嗎?
諸如此類都是對硬件的理解,理解了這些東西就對硬件有很深的理解了,這對以后更深一步的學習將有很大的幫助,如果跳過這一步,我相信越往后學越會
覺得迷茫,越覺得這寫東西深不可測。因為,你的根基沒打好。
不過先聲明一下,本人并沒有使用ADS對ARM9進行編程,我是學完ARM7后直接就使用ARM9學linux系統的,因此涉及使用ADS對ARM9進行編程的問題我很難回答^_^,自己去研究研究吧。
對于這部分不久將提供一份教程,這個教程中的例程并不是我為我們所代理的板子寫的,是我在我們學院實驗室拿的,英培特為他們自己的實驗箱寫的,不過很有借鑒意義,可以作為一份有價值的參考。
第二,使用linux系統進行一些基本的實驗。
在買一套板子的時候一般會提供一些linux的試驗例程,好好做一段時間這個吧,這個過程也是很有意義的,也是為進一步的學習積累感性認識,你能想象一個從沒有使用過linux系統的人能學好linux的編程嗎?好好按照手冊上的例程做一做里面的實驗,雖然有點娃娃學走路,有點弱智,但是我想很多高手都會經歷這個過程。
在這方面我們深藍科技目前沒有計劃提供相應的例程,主要是開發板的提供商會提供很豐富的例程,我們不做重復工作,只提供他們沒有的、最有價值的東西給大家。
第三,研究完整的linux系統的的運行過程。
所謂完整的linux系統包括哪些部分呢?
三部分:bootloader、linux kernel(linux內核)、rootfile(根文件系統)。那么這3部分是怎么相互協作來構成這個系統的呢?各自有什么用呢?三者有什么聯系?怎么聯系?系統的執行流程又是怎么樣的呢?搞清楚這個問題你對整個系統的運行就很清楚了,對于下一步制作這個linux系統就打下了另一個重要的根基。介紹這方面的資料網上可以挖掘到幾噸,自己好好研究吧。第四,開始做系統移植。
上面說到完整的linux有3部分,而且你也知道了他們之間的關系和作用,那么現在你要做的便是自己動手學會制作這些東西。
當然我不可能叫你編寫這些代碼,這不實現。事實上這個3者都能在網下載到相應的源代碼,但是這個源代碼不可能下載編譯后就能在你的系統上運行,需要很多的修改,直到他能運行在你的板子上,這個修改的過程就叫移植。在進行移植的過程中你要學的東西很多,要懂的相關知識也很多,等你完成了這個過程你會發現你已經算是一個初出茅廬的高手了。
在這個過程中如果你很有研究精神的話你必然會想到看源代碼。很多書介紹你
怎么閱讀linux源代碼,我不提倡無目的地去看linux源代碼,用許三多的話說,這沒有意義。等你在做移植的時候你覺得你必須去看源代碼時再去找基本好書看看,這里我推薦一本好書倪繼利的《linux內核的分析與編程》,這是一本針對linux-2.6.11內核的書,說得很深,建議先提高自己的C語言編程水平再去看。
至于每個部分的移植網上也可以找到好多噸的資料,自己研究研究吧,不過要提醒的是,很多介紹自己經驗的東西都或多或少有所保留,你按照他說的去做總有一些問題,但是他不會告訴你怎么解決,這時就要靠自己,如果自己都靠不住就找我一起研究研究吧,我也不能保證能解決你的問題,因為我未必遇到過你的問題,不過我相信能給你一點建議,也許有助你解決問題。
這一步的最終目的是,從源代碼的官方主頁上(都是外國的,悲哀)下載標準的源代碼包,然后進行修改,最終運行在板子上。
盜用阿基米德的一句話:“給我一根網線,我能將linux搞定”。
第五,研究linux驅動程序的編寫。
移植系統并不是最終的目的,最終的目的是開發產品,做項目,這些都要進行驅動程序的開發。
Linux的驅動程序可以說是五花八門,linux2.4和linux2.6的編寫有相當大的區別,就是同為linux2.6但是不同版本間的驅動程序也有區別,因此編寫linux的驅動程序變都不是那么容易的事情,對于最新版本的驅動程序的編寫甚至還沒有足夠的參考資料。那么我的建議就是使用、移植一個不算很新的版本內核,這樣到時學驅動的編程就有足夠的資料了。
這部分的推薦書籍可以參考另一篇文章《推薦幾本學習嵌入式linux的書籍》。第六,研究應用程序的編寫。
做作品做項目除了編寫驅動程序,最后還要編寫應用程序。現在的趨勢是圖形應用程序的開發,而圖形應用程序中用得最多的還是qt/e函數庫。我一直就使用這個函數庫來開發自己的應用程序,不過我希望你能使用國產的MiniGUI函數庫。盜用周杰倫的廣告詞就是“支持國產,支持MiniGUI”。MiniGUI的編程比較相似Windows下的VC編程,比較容易上手,效果應該說是相當不錯的,我曾使用過來開發ARM7的程序。不過MiniGUI最大的不好就是沒有像qtopia這樣的圖形操作平臺,這大大限制了他的推廣,我曾經幻想過與北京飛漫公司(就是MiniGUI的版權擁有者)合作使用MiniGUI函數庫開發像qtopia這樣的圖形操作平臺,不過由于水平有限這只能是幻想了,呵呵。
完成這一步你基本就學完了嵌入式linux的全部內容了。
還有一個小小的經驗想和大家分享。我在學習嵌入式linux的過程中很少問人,客觀原因是身邊的老師、同學師兄都沒有這方面的高手,主觀原因是我不喜歡問人,喜歡自己研究解決問題。這樣做有個好處,就是可以提高自己解決問題的能力,因為做這些東西總有很多問題你難以理解,別人也沒有這方面的經驗,也不是所有問題都有人給你答案,這時必須要自己解決問題,這樣,個人的解決問題能力就顯得非常關鍵了。因此我的建議就是一般的問題到網上搜索一下,確實找不到答案了就問問高手,還是不行了就自己去研究,不要一味去等別人幫你解決問題。
記住,問題是學習的最好機會。
第五篇:arm心得.
心得體會(許晶)
本次實習時間是一周,我們組所選的題目是直流電動機轉速控制設計,其要求有:硬件部分要求在LPC2100系列ARM的最小系統的基礎上,設計通過按鍵控制直流電動機速度的驅動電路,要求通過LPC2100內置的PWM發生器控制直流電動機;并將電動機速度通過串口送至PC機。軟件部分要求設計以上功能的脫機運行程序,并在試驗室調試通過。我負責的是硬件部分。首先我將系統分為兩部分。一是電動機控制驅動電路;二是ARM最小系統。在電動機驅動中,直流電機控制使用了H橋驅動電路,控制口線為P0.21、P0.22。在ARM最小系統中,分為5部分:電源電路、復位電路、JTAG接口電路、RS232串口電路、時鐘電路。
在制作原理圖中,我查閱了實驗指導書和課本。我所選用的是2114板子。因為LPC2114是基于一個支持實時仿真和跟蹤的16/32位ARM7TDMI-STM CPU的微控制器,并帶有128/256 k字節(kB)嵌入的高速Flash存儲器。128位寬度的存儲器接口和獨特的加速結構使32位代碼能夠在最大時鐘速率下運行。對代碼規模有嚴格控制的應用可使用16位Thumb模式將代碼規模降低超過30%,而性能的損失卻很小。
在這個過程中,我注意到了許多問題。通過最小系統的制圖,我對一些問題逐漸了解,不像剛開始學習一樣,感覺什么也不懂,硬裝知識。我畫了5部分,這幾個部分讓我對書上的內容更加深了學習。如:時鐘電路中,我就把時鐘系統和晶體振蕩兩節課程,重新學習。
而在軟件設計中,在我的搭檔編程完之后,我也對程序進行了研究。在主程序中,我們用的是i、j表示速度與方向,正轉為“+”、反轉為“—”;最小速度為1,最大速度為4。先讓電機正向慢慢的加速,加到正傳的最大速后,在按下就變成反轉,然后在依次加速,往返循環,直至沒有按鍵按下。所運用的是,調節PWM的占空比就能達到電機的速度調節。
我們組在硬件中遇到的問題并不多,主要是在畫各部分原理圖時找器件很不熟練,不能很快的找到。這說明我不經常用軟件。其實這個軟件制圖很方便,各種器件幾乎都能找到,找不到時也可以在上面畫圖。
軟件中,程序在編譯正確后,下載方面出現了許多問題,如連接不上;不能生成hex文件等。其實這些問題,都是因為我們對軟件不熟悉所造成的。在我們多次調試、鏈接之后,終于完成。
經過一周實習,是我對ARM系統有了更深刻的認識。因為前期大家都找工作的原因,我并沒有特別認真的學習,而這次的實習,可以讓我重新再次拿起課本,認真學習。并且使我感觸最深的是,由于嵌入系統的廣泛應用,我應該更好的去學習它、掌握它。像掌握辦公自動化一樣,成為必不可少的技術。