第一篇:51單片機與ARM等微處理器的選擇
51單片機與ARM等微處理器的選擇(專題分析)
目前,隨著微電子技術的發展,生產單片機和ARM的廠家也很多,集成度也越來越高。一些單片機集成了很多常用外圍電路,如:AD(數模轉換)電路、USB內核、CAN總線、SPI總線、IC總線、PWM、EEPROM等。很多時候,選取一款合適的微處理器(或者微控制器),關系到一個產品的研發周期和生產成本,所以微處理器的選型在整個方案設計中占有很重要的地位。
為了解決這個疑問,我們首先需要分清下面幾個概念:單片機、ARM、DSP、FPGA/CPLD,這幾個關鍵詞是學習電子的人常見的幾種芯片。這幾個詞要分類的話首先要把FPGA/CPLD和其他的分開,因為FPGA/CPLD的原理和單片機、ARM、DSP不同。
FPGA/CPLD 是通過硬件實現功能的,FPGA是Field-Programmable Gate Array的縮寫,即現場可編程門陣列;CPLD是Complex Programmable Logic Device的縮寫,即復雜可編程邏輯器件。通過名字可以看出,二者都是可編程的邏輯器件,即實實在在的硬件,通過對硬件編程以實現某種特定功能。簡而言之,二者就是一個與非門或者或非門陣列。由于所有的邏輯式子都可以變換成與非結構或者或非結構,因此所有的邏輯功能都可以通過FPGA/CPLD實現,編程后的芯片相當于一個數字芯片,如加法器,移位寄存器等。二者的區別在于FPGA是基于RAM結構的,CPLD是基于ROM機構的,如果我們一個產品里面涉及到很多邏輯處理,盡量選用CPLD甚至FPGA,它能隨時根據需要調整邏輯控制關系。再說單片機和ARM及DSP的關系,單片機是“單片微型計算機”的簡稱;ARM是Advanced RISC Machines的簡稱,它只是一家微處理器設計企業的名字,因此ARM是他們設定的微處理器的統稱;DSP是Digital Signal Processing的簡稱,即數字信號處理。了解了這些,我們可以說單片機是所有所有MCU(微型控制單元)的統稱,ARM和DSP只是他們的一 種,ARM屬于用公司名稱的一種稱呼,而DSP則是根據功能(數字處理)命名的一種稱呼。但是,在行業內,單片機一般特指8位或16位的MCU,在本文中仍采用大家熟悉的叫法,把單片機和ARM放在并列的位置。
一個產品中,是選擇單片機還是ARM呢?我們首先得搞清楚51單片機在市場中的應用情況以及將來的發展情況。眾所周知,自從ARM出現以來,短短的幾年內便出現 了ARM7、ARM9、M3、M4、A8、A9、A10等等多個系列,其性能也得到了飛速發展,以其高性能,低價格,低功耗等優勢迅速占領了MCU的江 山,比起當年的51有過之而無不及。作為32位機,其性能是毋庸置疑的,即便是相同的時鐘速率,32位機的處理一些數據的速2
度也要快于8位機,如一個32 位的加法運算,8位機至少需要4個周期,而32位機只需要一個周期即可完成。ARM的優勢在于較高的處理速度,還有豐富的外設資源,還有就是較大的數據和 程序存儲空間。相比之下,51單片機就沒有優勢了嗎?當然不是,51單片機的優勢在于小巧的內核,成熟的技術,還有就是 位操作。在相當多的應用場合,我們并不需要ARM如此強大的處理功能和速度,而是只需要簡單的控制,51單片機已經完全可以滿足實際的需求,這樣一 來,ARM的優勢便顯的不再重要,而51的位操作則是ARM達不到的,也許你會說ARM同樣可以實現位操作,但如果你了解的比較深的話會發現,ARM的位操作是通過移位,與或等操作之后實現的,而51單片機則又位尋址空間,是真正的位操作。再一個就是價格,低端的ARM肯定比低端的單片機貴幾倍,但一些中檔的ARM則要比高端的51單片機便宜了。十幾或者幾十RMB的ARM的性能 是同價格的51單片機無法比擬的。此外,由于51內核簡單,一些高端的51增加的功能使得他們的51單片機操作起來變得異常復雜,而且不同廠家的操作完全不同,這樣就增加是使用的難度。綜合看來,在高端或者中端應用方面,51單片機已經沒有了任何優勢,其市場主要是一些老產品或者不想學新東西的老工程師在支撐,其消亡也是必然的。然而在低端應用方面,51仍然可以占有一席之地,除了操作和價格上的微弱優勢,其更大的優勢在于學習簡單。這其實也是在無形中降低了人力成本。因為一個資深的精通ARM的工程師要遠遠比精通單片機的工程師少得多,也意味著他們的薪資水平要高的多。
總之,一個產品的微控制器如何選擇,必須綜合考慮多方面的因素。如果是對于成本要求很高的產品,則盡量在滿足功能要求的基礎上考慮低端的ARM或者單片機。如果對安全性要求很高,功能要求強大,則考慮中高端的ARM芯片。如果有復雜的邏輯控制要求,則最好加上一片CPLD/FPGA芯片。如果要求精度不是很高的AD轉換電路時,則采用含有AD內核的單片機或者ARM,或者說,在需要一些常見的外圍電路,而有單片機集成了這種電路時,盡量選擇這種單片機,以增強整個產品的可靠性。一句話,只選對的,不選貴的。
第二篇:微處理器系統結構與嵌入式系統教學大綱
《微處理器系統原理及嵌入式系統設計》課程教學大綱
課程編號:20082008 學 時 數:80
適用專業:通信工程、網絡工程、信息工程 學 分 數:5
開課學期:第5 學期
先修課程:數字邏輯設計及應用、軟件設計基礎、C語言 執 筆 者:閻波
編寫日期:2009.12
審核人(教學副院長):
一、課程性質和目標
授課對象:本科生 課程類別:學科基礎課 教學目標:
隨著計算機技術、集成電路設計技術和半導體工藝技術的不斷提高,計算機領域進入后PC時代,微處理器的應用幾乎無處不在;而以應用為中心、軟硬件可剪裁的專用計算機系統產品(也即嵌入式系統產品)也已成為我國信息產業新的市場增長點。嵌入式計算機系統設計技術已成為通信、雷達、自控、微電子等研究應用領域的合格工程師應掌握的基本技術和技能。本課程根據高年級本科人才培養、新技術發展與應用的需求而開設,是工科電工電子類非計算機專業的重要專業基礎課程,面向全校各專業本科生授課。
本課程在加強計算機組成原理與系統結構知識的基礎上,選用ARM作為核心芯片,并引入先進的EDA/AISC技術講解了嵌入式系統的設計技術。通過本課程的學習,使學生建立較全面的計算機基礎知識架構,并掌握嵌入式計算機系統原理及接口技術的硬/軟件設計核心技術,培養學生嵌入式計算機系統設計開發領域分析問題和解決問題的初步能力,著眼對學生綜合能力、特別是創新能力的培養,能夠最大限度地激發學生的學習熱情和探索未知的興趣,從而有效提高學生的工程素質。
二、課程內容安排和要求
(一)教學內容、要求及教學方法
本課程的主要內容包括微處理器系統結構和嵌入式系統設計技術兩大部分,其中重點為微處理器系統結構相關的基礎知識,難點為嵌入式系統設計的核心技術。詳細教學內容及要求安排如下:
1.微處理器系統概述(6學時)(課件chap0、chap12)
? 理解本課程的研究內容及定位;
? 理解嵌入式計算機系統與通用計算機系統的異同;(教材chap1)? 理解現代計算機系統的層次結構;(教材chap1)
? 掌握計算機體系結構(指令集、存儲器讀寫、I/O控制方式)和計算機組成原理(CPU結構、存儲器組織、總線及接口)涉及的不同領域及其相互之間的關系;(教材chap1)? 掌握馮·諾依曼體系結構的特征,以及計算機的基本工作原理與工作流程;(教材chap2)? 掌握現代計算機系統的性能基本評測技術和指標;(教材chap1)? 理解現代計算機體系結構與組成技術的發展趨勢;(教材chap2)? 了解微電子技術的發展及其對計算機設計技術的影響;(教材chap1)2.微處理器體系結構(8學時)(課件chap3)
? 掌握CPU基本功能及內部結構(體系結構);(教材chap3)
? 掌握CPU基本硬件(控制單元、數據通路)設計技術(組成原理);(教材chap2、chap3)
? 掌握指令系統的基本設計要素,包括指令功能、指令格式及尋址方式的確定;(教材chap2、chap3)
? 理解現代計算機系統中CPU體系及組織結構的改進,理解隨機邏輯、微碼、流水線、超標量等不同微處理器的設計特點;(教材chap3)? 理解CISC與RISC結構的差異;(教材chap3)? 理解流水線的工作原理及沖突;(教材chap3)
? 理解微處理器系統硬件與軟件兩者之間的相互影響;(教材chap3)
3.存儲系統(8學時)(課件chap24-Mem)
? 掌握現代計算機系統中存儲器的分層體系結構(教材chap2)及地址映射技術(教材chap4);
? 掌握存儲器的基本存取原理,包括存儲單元工作原理、編址技術及存放技術等;(教材chap2)
? 理解采用不同讀寫機制的存儲技術的特點,如LIFO、FIFO、多端口等;(教材chap2)? 理解存儲器(芯片)的主要性能指標;(教材chap4)? 掌握主存儲器擴展設計技術;(教材chap4)
? 了解現代計算機系統常用的存儲技術及存儲產品;(教材chap2)4.總線與接口(14學時)(課件chap24-Mem)
? 掌握總線的組織形式及關鍵要素(帶寬、時序、仲裁);(教材chap2)? 掌握串行通信(總線)的基本特性;(教材chap2)
? 掌握輸入/輸出系統基本控制方式的特點及適用條件;(教材chap2)
? 掌握接口電路的基本結構及地址映射、地址譯碼、總線隔離等關鍵設計技術;(教材chap4)
? 掌握無條件、查詢及中斷控制接口的硬件及驅動設計方法;(教材chap4)
? 理解串行接口、定時/計數接口、A/D/A接口、DMA接口及可編程通用接口的結構特點及設計要點;(教材chap4)
? 理解現代計算機系統中輸入/輸出系統的體系及組織結構的改進;(教材chap2)? 了解現代計算機系統常用的片上、片外總線標準; 5.ARM微處理器體系結構(8學時)(課件chap5)
? 掌握ARM內核的體系結構及其所支持的各種編程模型、運行模式及工作狀態;(教材chap5)
? 掌握ARM常用尋址方式及指令子集的使用;(教材chap5)? 掌握ARM內核對異常和中斷的處理方式;(教材chap5)? 理解ARM內核支持的存儲技術和輸入/輸出技術;
? 理解ARM內核與ARM微處理器芯片的關系;(教材chap5)? 了解各系列ARM處理器的發展及結構特點;(教材chap7)6.ARM程序設計技術(6學時)(課件chap6)
? 掌握ARM常用的偽指令子集和匯編語句格式;(教材chap6)? 理解ARM工程的特點及程序框架;(教材chap6)? 掌握ARM匯編與C/C++混合語言編程方法;(教材chap6)? 理解匯編程序結構及匯編語言編程技術的特點;(教材chap6)
7.基于ARM嵌入式系統硬件設計技術(6學時)(課件chap7)
? 掌握ARM處理器的最小硬件系統的設計方法;(教材chap7)? 理解基于ARM處理器的存儲器接口設計及應用技術; ? 理解基于ARM處理器的人機交互接口設計及應用技術; ? 理解基于ARM處理器的串行通信接口設計及應用技術; ? 理解基于ARM處理器的A/D及D/A接口設計及應用技術; 8.基于ARM的嵌入式系統軟件設計技術(6學時)(課件chap8)
? 理解嵌入式軟件系統的結構及功能;(教材chap8)? 理解系統引導加載(bootload)技術;(教材chap8)
? 理解嵌入式操作系統(Linux)的任務、性能指標及內核移植技術(教材chap8); ? 理解嵌入式操作系統下的驅動開發技術;(教材chap8)? 了解嵌入式計算機系統的設計、測試及應用特點;(教材chap8)注:包括補充實驗教學課件2學時,但需放在實驗前講; 9.基于ARM微處理器核的SOC設計(2學時)
? 理解SOC的典型結構和基本設計方法;
? 理解基于ARM(AMBA總線)的SOC的系統設計方法。
(二)自學內容和要求
學生應根據自身情況先期或同步自學補充以下知識:
? 計算機系統結構與組成原理 ? 嵌入式操作系統設計技術 ? 嵌入式操作系統下的驅動開發技術 ? ASIC設計技術
(三)實踐性教學環節和要求
本課程包含16學時實踐(實驗、課程設計等)課程,要求學生掌握微處理器系統結構、嵌入式系統設計的基本實驗技能、測量儀器儀表使用方法,掌握基本的ARM嵌入式系統設計理論,掌握常用的通訊接口、音頻接口以及顯示/觸摸屏等人機接口的設計實現理論與技能。
1.學習使用嵌入式系統開發仿真平臺,建立基于ARM的嵌入式Linux開發環境(2學時)2.設計及仿真(選做部分),并撰寫實驗報告(6學時)
? ARM平臺下多線程應用程序設計; ? 基于ARM的模塊方式驅動程序設計; ? SCI/SPI串行通信; ? 以太網通信;
? LCD驅動開發及應用; ? 觸摸屏驅動開發及應用;
? SD卡讀寫驅動開發及文件系統設計; ? AC97音頻接口驅動開發及應用; ? USB OTG接口驅動開發及應用; 3.課程設計,完成設計報告(課外)
? 簡單RISC微處理器設計 ? 簡單嵌入式操作系統設計 ? 嵌入式最小硬件系統設計
三、考核方式
本課程建議考核方式:平時(10%)+實驗(15%)+期中(15%)+期末(60%)(英才班:平時30%+實驗20%+期末50%)
四、建議教材及參考資料
1.建議教材:
? 微處理器系統結構及嵌入式系統設計,李廣軍等,電子工業出版社,2009.8 2.參考資料
? 系統體系結構(第5版),Stephen D.Burd著,郭新房等譯,清華大學出版社,2007 ? 計算機系統結構,張晨曦、王志英等,高等教育出版社,2008 ? 現代計算機組成原理,潘松,潘明編著,科學出版社,2007
? 計算機組織與體系結構-性能設計(第七版),William Stallings著,張昆藏等譯,清華大學出版社,2006 ? ARM體系結構與編程,杜春雷編著,清華大學出版社,2007
? ARM體系結構及其嵌入式處理器,任哲等,北京航空航天大學出版社,2007 ? ARM926EJ-S Technical Reference Manual DDI0198D.ARM, January, 2004.? ARM920T Technical Reference Manual(Rev 1).ARM, April, 2001.3.推薦網站
? http://www.tmdps.cn ? http://www.tmdps.cn ? http://www.tmdps.cn ? http://www.tmdps.cn
第三篇:ARM與嵌入式實驗報告
ARM與嵌入式技術
實驗報告
專業班級:通信工程
姓名:**** 學號:******
實驗日期:2012年6月7日 指導老師:*****
一、實驗目的
1.學習使用Embest IDE開發環境及ARM 軟件模擬器;
2.掌握簡單ARM 匯編指令,進一步加強對嵌入式的熟悉和了解。
二、實驗設備
硬件:PC 機
軟件:Embest IDE 開發環境
三、實驗內容
例3:實現64位加法運算,要求【R1:R0】+【R3:R2】,結果放回【R1:R0】中; 例2:編寫程序將R2的高8位傳送到R3的低8位(不考慮R3的其它位); 例7:編寫一段程序計算10!;
例8:串拷貝(R1指向源數據串的首地址,R0指向目的數據串的首地址)。
四、實驗步驟
1)新建工程:
運行Embest IDE 集成開發環境,選擇菜單項File → New Workspace,如圖一,系統彈出一個對話框,鍵入文件名“沈”,如圖二,點擊OK 按鈕。將創建一個新工程,并同時創建一個與工程名相同的工作區。此時在工作區窗口將打開該工作區和工程.。
2)建立源文件:
點擊菜單項File → New,如圖三,系統彈出一個新的文本編輯窗,輸入源文件代碼。編輯完后,保存文件“沈.s”后綴,如圖四。
3)添加源文件:
選擇菜單項Project → Add To Project → Files,在工程目錄下選擇剛才建立的源文件.s后綴文件,如圖五,圖六。
4)基本配置:
選擇菜單項Project → Settings,彈出工程設置對話框。在工程設置對話框中。① 選擇Processor 設置對話框,按照圖七所示,進行配置:
圖七
② 選擇Remote設置對話框,按照下圖八所示,進行配置:
圖八 ③ 選擇最右邊一個進行編譯,顯示如圖九,則編譯成功。
圖九
④ 選擇Project → Settings → Debug設置對話框,按照圖十所示,進行配置:
圖十 ⑤
選擇
5)選擇菜單項Debug →Remote Connect 進行連接軟件仿真器,將存儲器地址改為0x1000,如圖十一,執行Debug →Download 命令下載程序,并打開寄存器窗口。打開memory 窗口,按F10進行單步跟蹤,觀察寄存器的數據變化并分析。最右邊一個進行編譯,顯示如圖九,則編譯成功。
圖十一
五、各實驗的參考程序及運行結果
實驗一:(例3)實現64位加法運算,要求【R1:R0】+【R3:R2】,結果放回【R1:R0】中; 1.程序代碼如下:
.global _start
.text _start:
mov R0,#11
/*R0=11*/ mov R1,#22
/*R1=22*/ mov R2,#33
/*R2=33*/ mov R3,#44
/*R3=44*/ ADDS R0,R0,R2
/*R0等于低32位相加,并影響標志位*/
ADC R1,R1,R3
/*R1等于高32位相加,并加上低位進位*/ stop:
b stop.end
2.分析調試:
①download下載:
② 讀入數據:
③ r0+r2→r0(低32位):
④ r1+r3→r1(帶進位的加法):
實驗二:(例2)編寫程序將R2高8位傳送到R3的低8位(不考慮R3的其它位);
1.程序代碼如下:
.global _start _start: ldr r2,=0x23453401 ldr r3,=0xabcd1200 and r2,r2,#0xff000000 /*保留R2的高8位,屏蔽低24位*/ and r3,r3,#0xffffff00 /*保留R3的高24位,屏蔽低8位*/
orr r3,r3,r2,lsr #24
/*將R2的高8位傳送到R3的低8位*/ stop:
b stop.end
2.分析調試:
①download下載:
②保留r2的高8位,屏蔽低24位:
③保留r3的高24位,屏蔽低8位:
④將R2的高8位傳送到R3的低8位:
實驗三:(例7)編寫一段程序計算10!
1.程序代碼如下:
.global _start.text.equ num,10 _start: mov r0,#num mov r1,r0 s1: subs r1,r1,#1
/*把r1-1放入r1*/ mul r0,r1,r0
/*r0*r1放入r0*/ cmp r1,#1
/*比較R1與1的大小*/ beq stop
bne s1 stop: b stop.end
2.分析調試:
① download下載:
② 第一次執行S1,r1=10-1=9,10*9=90,換成16進制是5a。
③ 第二次執行S1,r1=9-1=8,10*9*8=720,換成16進制是2d0。
④ 依次執行S1,到r1=1,停止,10*9*8??*1=3628800,換成16進制是375f00。
實驗四:(例8)串拷貝(R1指向源數據串首地址,R0指向目的數據串的首地址)。1.程序代碼如下:.global _start.text.EQU NUM,8 _start:
LDR R0,=srcstr
/*指向源數據串R0*/
LDR R1,=dststr
/*指向目標數據串R1*/
mov R3,#NUM
/*R3=8*/
mov LR,PC
/*返回*/
B strcopy
/*調用串拷貝子程序*/ stop: b stop
strcopy:
LDRB R2,[R0],#1
/*裝載字節同時更新地址*/
STRB R2,[R1],#1
/*存儲字節同時更新地址*/
SUBS R3,R3,#1
CMP R3,#0
/*判斷是否結束*/
BNE strcopy
/*不是,則繼續*/
MOV PC,LR
/*返回*/.data
srcstr:.long 1,2,3,4,5,6,7,0
/*定義源數據串*/
dststr:.long 5,3,2,1,4,6,8,0
/*定義目的字符串*/
2.分析調試:
①單步跟蹤后的結果及存儲器的結果顯示:
②寄存器的結果顯示:
六、實驗心得
今天在實驗室里,學習使用Embest IDE開發環境及ARM 軟件模擬器,掌握簡單ARM 匯編指令,進一步加強了對嵌入式的熟悉和了解。鄭老師在兢兢業業的向我們傳授實踐知識的同時也向我們提問相關理論問題,讓我們在學習的過程加深對實踐和理論兩者之間的聯系,知道每一個步驟的發生的原因及產生相應的結果,即對實驗的來龍去脈有了更清楚的認識,為今后的學習打下了一定的基礎。相信在接下來的實驗中,我們會在鄭老師的引導下,做起實驗來更能得心應手,輕車熟駕!
第四篇:ARM芯片和操作系統總結與比較.
1、ARM7與 ARM9 兩處理器之間的比較 比較 ARM7 ARM9
體系結構
0.9MIPS/MHz的 3級流水線和馮 ·諾伊曼結構 1.1MIPS/MHz的 5級流水線和哈佛結構
速度
主頻在 100MHz 以內,學生完全可以掌 握其設計技術。
主頻在 200-600MHz 左右,屬高速設 計,至少有 3年以上經驗的硬件工程 師才可能進行設計。
引腳 144(LPC2220 QFP 289(S3C2440 BGA 寄存器 196(LPC2220 476(S3C2440 內設模塊
AMBA、System Manager、UART、Timers、PWM、I/O Ports、RTC、ADC、IIC、SPI、WDT、External memory controller、Power control、Interrupt Controller、IIS。
AMBA、System Manager、UART、Timers、PWM、I/O Ports、RTC、ADC、IIC、SPI、WDT、External memory controller、Power control、Interrupt Controller、IIS。
MMU、LCD、NAND Flash、DMA、Touch Screen、Camera、USB Host、USB Device、SD Host&MMC Interface 應用場合 ARM7大多數用在自動控制,智能儀器
儀表方面
ARM9用在多媒體處理方面。
相同面 處理器模式、指令集、開發環境、下載調試 環境(基本概念、軟 件 編 程、基本 方 法 不 同面
引腳數 目、資源 數 目、速度。建議:從簡到繁 , 從易到難。
知識 的 傳授 應 該注重 在面上, 而不 能 僅局限于點 上。(S3C44B0→ S3C2410→ S3C2440
2、嵌入式操作系統之間的比較
比較 μCOS-II2.6 WinCE5.0 Linux2.6.30.4 大 小 KB 微核 MB MB 文 件數 目 16(13+3 Kernel :36個 Driver :263個
Kernel 206 arch :11539/22 Driver 8501個 實時性 硬 實時 系 統: 能 夠 在指 定 的 期限 完 成實時任務 , 即使是 最壞 的 情況下 軟實時 系 統: 在平均情況下 能 支持任 務 的 執 行 期限 軟實時 系 統
下載 方式 直接下載 BootLoader BootLoader 軟 件 支持 支持 C/C++編 程的 軟 件 都支持 專 用的開發環境 PB、eVC(Visual Stdio 專 用的開發環境 Gcc、Gdb 應用場合 自動控制,儀器儀表, 實時性要求 高的 產品
手持 設 備、儀器儀表 手持 設 備、學習難易 程度 懂 C
1、操作 系 統 級 別 上的 編 程(內 核機 制、消 息機 制、內存 管 理、中斷 處理
2、組 件 編 程(網絡、文 件系 統、GUI
3、OS 配置與移植 有過 VC 經驗,經驗足
1、PB、eVC 圖形 環境
網絡 設 備
2、BootLoader
3、操作 系 統 級 別 上的 編 程(內 核機 制、消息機 制、內存 管 理、中斷 處理
4、組 件 編 程(網絡、文 件系 統、GUI
5、驅 動 定 制 與 開發 熟悉 Linux , C 語言牛
1、linux shell命 令集
2、程 序鏈 接(Makefile 文 件
3、gcc 編 譯 環境和 gdb 調試 環 境
4、BootLoader
5、操作 系 統 級 別 上的 編 程(內 核機 制、消息機 制、內存 管 理、中斷 處理
6、組 件 移植與編 程(網絡、文 件系 統、GUI
7、驅 動 定 制 與 開發
8、OS 定 制、裁剪 與移植
多媒體 教 學 課 件, 教 學大 綱 , 試 卷等 資 料 ,有 需 要 登錄 論壇 進行 下載。
第五篇:ARM與嵌入式Linux的入門建議.
ARM與嵌入式linux的入門建議
ARM與嵌入式linux的入門建議
類別:嵌入式系統
由于很多人總問這個問題,所以這里做一個總結文檔供大家參考。這里必須先說明,以下的步驟都是針對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的過程中很少問人,客觀原因是身邊的老師、同學師兄都沒有這方面的高手,主觀原因是我不喜歡問人,喜歡自己研究解決問題。這樣做有個好處,就是可以提高自己解決問題的能力,因為做這些東西總有很多問題你難以理解,別人也沒有這方面的經驗,也不是所有問題都有人給你答案,這時必須要自己解決問題,這樣,個人的解決問題能力就顯得非常關鍵了。因此我的建議就是一般的問題到網上搜索一下,確實找不到答案了就問問高手,還是不行了就自己去研究,不要一味去等別人幫你解決問題。記住,問題是學習的最好機會。