第一篇: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.xiexiebang.com http://www.xiexiebang.com http://www.xiexiebang.com http://www.xiexiebang.com
第三篇: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的过程中很少问人,客观原因是身边的老师、同学师兄都没有这方面的高手,主观原因是我不喜欢问人,喜欢自己研究解决问题。这样做有个好处,就是可以提高自己解决问题的能力,因为做这些东西总有很多问题你难以理解,别人也没有这方面的经验,也不是所有问题都有人给你答案,这时必须要自己解决问题,这样,个人的解决问题能力就显得非常关键了。因此我的建议就是一般的问题到网上搜索一下,确实找不到答案了就问问高手,还是不行了就自己去研究,不要一味去等别人帮你解决问题。记住,问题是学习的最好机会。