ARM ARM上电后的第一条指令在哪里开始
ARM体系结构试题
东华理工大学长江学院2011—2012 学年第2学期补考试卷B 课程:嵌入式微处理器体系结构与编程考试形式:闭卷年级及专业:计算机科学与技术10304101-3班1.系统调用运行在使用者空间的程序向系统内核请求需要更高权限运行的服务2.哈弗结构数据指令存储和程序指令存储分开3.MMU内存管理单元4.FIQ快速内部中断5.SPSR备份程序状态寄存器二、单项选择题(20×2分=40分)1.ARM系统复位后,第一条执行的指令在( A ).A 00000000HB 00000004HC 00000008HD 由编程者确定2.针对没有MMU的ARM芯片,其操作系统可以使用( C ).A Windows CE ,LinuxB VxWorkC uClinux, Uc/OS-IID 以上都可以3.ATPCS定义了寄存器组中的( A )作为参数传递和结果返回寄存器。
A R0,R1,R2,R3B R4,R5,R6,R7C R8,R9,R10,R11D A B C 都可以4.用汇编指令对R15赋值,可以实现( D )。
A 程序的跳转B 实现B指令功能C 子程序的返回D A B C都可以5.ARM汇编语言中,一常量8_5642也代表( B/D/C )。
A 整数5642B 整数5642HC 整数Ox5642D 整数29786.要使CPU能够正常工作,下列哪个条件不是处理器必须满足的。
(D)(A) 处理器的编译器能够产生可重入代码(B)在程序中可以找开或者关闭中断(C) 处理器支持中断,并且能产生定时中断(D)有大量的存储空间7.下面哪种操作系统最方便移植到嵌入式设备中。
( D )(A) DOS (B)unix (C) Windows xp (D)linux8.下列描述不属于RISC计算机的特点的是( C )。
A.流水线每周期前进一步。
B.更多通用寄存器。
C.指令长度不固定,执行需要多个周期。
D.独立的Load和Store指令完成数据在寄存器和外部存储器之间的传输。
嵌入式选择六十题直接打印
二.选择题(分数=1*60)1.对一个字,存储时先存放低字节,再存放高字节(即低字节占低地址,高字节占高地址)。
则该种存储格式为__A__________A,小端方式B,大端方式C,低端方式D,高端方式2.ARM公司是专门从事___B________A,基于RISC技术芯片设计开发B,ARM芯片生产C,软件设计D,ARM芯片销售3.哪个不是ARM微处理器的特点_____D_______A,体积小,低功耗,低成本,高性能B,大多数数据操作都在寄存器中完成C,寻址方式灵活简单,执行效率高D,指令长度不固定4.ARM微处理器为_____________C____A, 16位RISC架构B, 32位CISC架构C, 32位RISC架构D, 64位RISC架构5.ARM7系列微处理器是_____A______A, 三级流水线结构B, 四级流水线结构C, 三级流水线结构D, 三级流水线结构6.ARM9系列微处理器是________C_____A, 三级流水线结构B, 四级流水线结构C, 五级流水线结构D, 三级流水线结构7.对于ARM7TDMI系列微处理器,下列叙述哪个是错误的__D___A, 支持片上DebugB, 支持压缩指令集ThumbC, 内嵌硬件乘法器D, 嵌入式ICE,但不支持片上断点和调试点8.下列叙述哪个是错误的___B___A, ARM指令为32位的长度,Thumb指令为16位长度B,Thumb代码与等价的ARM代码相比较,用ARM指令要比Thumb指令节省30%-40%以上的存储空间C, 使用Thumb代码的系统,其功耗要低D, Thumb指令的密度高9.要使用WinCE或标准Linux嵌入式操作系统,ARM必须带有____A______功能A MMUB MCUC MMCD MUM10.ARM处理器支持以下______D___数据类型A, 8位有符号和无符号字节B, 16位有符号和无符号字节C, 32位有符号和无符号字节D, A,B,C都可以11.在ARM体系结构中,字的长度为_______B_____位A 16位B 32位C 64位D 128位12.嵌入式操作系统使用的保护模式是在ARM的___C_______模式下工作A 系统模式B 禁止模式C 管理模式D 用户模式13.ARM处理器正常的程序执行状态是在___D________模式下A 系统模式B 禁止模式C 管理模式D 用户模式14.可以通过____B______异常中断机制仿真浮点向量运算A 指令预取中止B 未定义的指令C 软件中断(SWI)D 数据访问中止15.在ARM状体下,异常IRQ,FIQ,预取中止的返回,使用的语句是___B______A MOV PC,R14B SUBS PC,R14,#4C SUBS PC,R14,#8D SUBS PC,R14#116.在所有工作模式下,___A_____都指向同一个物理寄存器,即各模式共享A R0-R7B R0-R12C R8-R12D R13,R1417.寄存器R13在ARM指令中常用来表示______A______A 堆栈指针B PC指针C 子程序返回指针D 当前程序状态18.____C________用作程序计数器(PC)A 寄存器R13B 寄存器R14C 寄存器R15D 寄存器R1619.当异常发生时,寄存器______A______用于保存CPSR 的当前值,从异常退出时则可由它来恢复CPSR.A SPSRB R13C R14D R1520.若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,就产生____B_______A 数据中止异常B 指令预取中止异常C 软件中断D 未定义指令异常21.可使用____C_____异常机制实现系统功能调用A 数据中止异常B 指令预取中止异常C 软件中断D 未定义指令异常22.系统复位进入的工作模式是____A_______A 管理模式B 未定义模式C 中止模式D 定义模式23.下列哪个叙说是错误的_______B____A 满递增堆栈表示堆栈指针指向最后压入的数据,且由低地址向高地址生成B 只有跳转指令可以根据CPSR中条件码的状态有条件的执行C 指令ADD RO,R1,R2的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中D 直接向寄存器R15写入跳转地址值,可以实现程序的跳转24.下列哪条指令是错误的____B__A ADD R0,R0 #0x3fB MOV R0,#0x3ffC LDR R0,[R1]D MOV R1,RO,LSL#325.能实现把立即数0X3FF5000保存在RO中的指令是_____A________A LDR R0, = 0X3FF5000B LDR RO, 0X3FF5000C MOV RO, 0X3FF5000D MOV RO, 0X3FF500026.指令LDR RO,[R1, #4]! 实现的功能是____B________A RO←[R1+4]B RO←[R1+4], R1←R1+4C RO←[R1], R1←R1+4D RO←[R1], R1←R1-427.ARM指令LDMIA RO,{R1, R2, R3,R4 }实现的功能是____A__________A R1←[R0],R2←[R0+4],R3←[R0+8],R4←[R0+12]B R1←[R0],R2←[R0-1],R3←[R0-2],R4←[R0-3]C R1←[R0],R2←[R0+1],R3←[R0+2],R4←[R0+3]D R1←[R0],R2←[R0-4],R3←[R0-8],R4←[R0-12]28.____D_______伪指令用于定义一个代码段或数据段A RLISTB DCBC MAPD AREA29._______A___伪指令用于指定汇编程序的入口点A ENTRYB STARTC INITD MAIN30.关于汇编语言与C/C++的混合程序叙述正确的是__D______A 汇编程序,C/C++程序间可以互相调用B C/C++代码中可以嵌入汇编指令C 在汇编程序和C/C++的程序之间可以进行变量的互访D 前A, B, C三项都对31.ARM系统进行仿真,调试的接口电路是_____A______A JTAGB JATGC SPID IIC32.在嵌入式系统按实时性需求分类,其中___D_____实施性最好。
arm的启动过程
arm的启动过程ARM是一种广泛应用于嵌入式系统和移动设备的处理器架构。
在学习ARM的过程中,了解其启动过程是非常重要的。
本文将详细介绍ARM的启动过程。
ARM的启动过程可以分为四个主要阶段:复位阶段、启动阶段、初始化阶段和操作系统启动阶段。
在复位阶段,当ARM处理器上电或者接收到复位信号时,它会进入复位状态。
在这个阶段,处理器会初始化一些重要的寄存器,例如程序计数器(PC)和堆栈指针(SP)。
此外,处理器还会加载一些固定位置的向量表,这些向量表包含了处理器在不同中断或异常发生时所需要执行的代码。
接下来是启动阶段,处理器会根据向量表中指定的地址跳转到相应的启动代码。
启动代码的任务是设置处理器的工作模式和时钟频率。
在这个阶段,处理器会切换到特权模式,例如特权模式(SVC),以便能够访问特权指令和寄存器。
同时,处理器还会根据外部存储器中的配置信息来设置时钟频率,以确保处理器能够正常工作。
进入初始化阶段后,处理器会执行一系列初始化代码,包括初始化外部存储器、初始化外设和设置中断控制器等。
在这个阶段,处理器会根据配置信息初始化外部存储器,例如SDRAM或Flash存储器。
同时,处理器还会初始化外设,例如串口、GPIO和定时器等,以便与外部设备进行通信。
此外,处理器还会设置中断控制器,以便处理外部中断信号。
最后是操作系统启动阶段,在这个阶段,处理器会加载操作系统的启动代码,并跳转到操作系统的入口地址。
操作系统的启动代码会进一步初始化系统资源,例如内存管理单元(MMU)、进程管理和设备驱动等。
一旦操作系统初始化完成,处理器就可以开始执行操作系统的任务调度和应用程序的执行。
总结起来,ARM的启动过程包括复位阶段、启动阶段、初始化阶段和操作系统启动阶段。
在这个过程中,处理器会进行一系列的初始化操作,包括设置寄存器、加载向量表、设置工作模式和时钟频率、初始化外部存储器和外设、设置中断控制器以及加载操作系统的启动代码。
单片机大作业试题及答案
单片机试题带答案版1、填空(每空2 分,共40 分)1、MCS-8051系列单片机字长是8 位,有40 根引脚,96系列字长是16 位。
单片机的特2、单片机的存储器的最大特点是指令存储器与数据存储器分开编址,Px并行口的地址是与数据存储器统一编址的,或者说属于该存储器。
3、8051最多可以有4 个并行输入输出口,最少也可以有1个并行口,即P1 。
P3常需复用作串行通信、外部中断、外部计数脉冲和读写控制信号。
4、ALE信号的作用是低8位地址锁存。
5、8051复位后,PC= 0 H。
若希望从片内存储器开始执行,EA脚应接高电平,PC值超过0FFF H时,8051会自动转向片外存储器继续取指令执行。
6、8051的C/T是加(加或减)计数的。
7、8051的中断向量表在3 H、0B H和13H、1BH、23H。
8、MOV A,40H 指令对于源超作数的寻址方式是直接寻址。
9、指令JB 0A7H,ABC的作用是若P2口的第7位为1则跳转到ABC 。
(0A7H是P2.7的地址)2、已知A = 0F8H,当执行ADD A,#0A9H指令后,PSW中的OV、CY、AC、P各为多少?若是有符号数,A中的结果用十进制表示是多少?(共5 分)[解答] OV:0、CY:1、AC:1、P:1 A:-953、在两个8051间用模式2进行串行通信,A机并行采集外部开关的输入,然后串行传输给B机;B机接收后并行输出控制LED发光。
画出连接示意图,写出完整的程序。
(共15 分)4、将8051外部扩展2K EPROM,同时扩展16K RAM作数据存储器,采用的2716是2K 的EPROM芯片,6264是8K的RAM芯片,74LS373是8位锁存器。
请画出连接示意图。
要求画出8051的数据、地址、ALE、PSEN、RD、WR信号;锁存器的数据入D、数据出Q、锁存控制G、OE;2716的A、数据O、片选CE、输出使能OE;6264的A、D、CE、OE、WE。
ARM处理器系统初始化过程
ARM处理器系统初始化过程在嵌入式系统中,ARM处理器是最常用的处理器之一。
ARM处理器的系统初始化过程可以分为硬件初始化和软件初始化两个阶段。
本文将介绍ARM处理器系统初始化的具体流程。
硬件初始化在系统上电后,ARM处理器进入硬件初始化阶段。
主要任务是对处理器的外设进行初始化。
1.初始化时钟系统:ARM处理器的时钟系统是处理器运行的根底,因此在初始化过程中需要设置适当的时钟频率和时钟源。
这可以通过配置PLL〔Phase Locked Loop〕或者外部晶振来实现。
2.使能缓存:缓存是提高处理器性能的关键。
在初始化过程中,需要配置L1缓存和L2缓存的大小、映射方式等参数,并使能它们。
3.配置中断控制器:中断是处理器与外设交互的一种方式。
在初始化过程中,需要配置中断控制器,使其能够正确地响应外设发出的中断请求。
4.初始化外设:根据系统的需求,初始化各个外设,包括串口、SPI、I2C等外设。
这些外设的初始化过程涉及到设备的存放器配置、中断使能等操作。
5.设置存储器映射:ARM处理器通过存储器映射来访问外部存储器。
在初始化过程中,需要设置存储器映射表,使处理器能够正确地访问外部存储器。
软件初始化在硬件初始化完成后,ARM处理器进入软件初始化阶段。
主要任务是加载和运行操作系统及应用程序。
1.复位处理器:在软件初始化过程中,可以选择复位处理器,将处理器重新置于初始状态。
这通常通过将Reset引脚拉低来实现。
2.加载引导程序:引导程序是系统启动的第一段代码,其功能是加载操作系统的核心代码。
在软件初始化过程中,需要将引导程序加载到适当的内存位置,并设置处理器的执行起点。
3.初始化操作系统:一旦引导程序加载完成,操作系统开始初始化。
这包括初始化内核数据结构、初始化设备驱动程序、启动任务调度器等。
4.加载应用程序:在操作系统初始化完成后,可以选择加载应用程序。
应用程序的加载可以通过文件系统来实现,将应用程序从存储设备读取并加载到内存中。
计算机三级嵌入式试题题库
一单项选择题1. 世界上第一台计算机研制成功的年代是( C )Α.1944年B.1945年C.1946年D.1947年2. 十进制数235,用二进制表达为( A )Α.11101011B.11101010C.11101001D.111011103. ARM采用定长指令格式,所有指令都是32位,Bit[31:28]为( B )Α.目标寄存器编码B.条件执行C.指令操作符编码D.永远是04. 8080处理器是( C )Α.32位处理器B.16位处理器C.8位处理器D.4位处理器5. 把微处理器与外部设备相连接的线路称为( D )Α.电源线B.控制线C.数据线D.总线6. 嵌入式软件开发构建阶段的第一步是( A )Α.编译B.链接C.定址D.打包7. 以下有关进程和程序的说法错误的是( D )Α.进程是动态的B.程序是静态的C.一个程序可以对应多个进程D.程序就是进程8. 微软开发的嵌入式操作系统是( C )Α.RT-LinuxB.MontaVistaC.Windows CED.VxWorks9. ROM监视器是一个小程序,驻留在嵌入式系统的( B )Α.RAM中B.ROM中C.Flash中D.DOM中10.直接存储器存取的英文缩写是( A )Α.DMAB.DRAMC.ISAD.IRQ11. 以下不是嵌入式系统应用领域的是( C )Α.移动电话B.汽车电子C.办公系统D.军工航天12. 十进制数235,用八进制表达为( C )Α.351B.352C.353D.35413. ARM采用定长指令格式,所有指令都是32位,Bit[27:26]为( C )Α.目标寄存器编码B.指令操作符编码C.永远是0D.条件执行14. 80286处理器是( B )Α.32位处理器B.16位处理器C.8位处理器D.4位处理器15. 厂家和用户为性能扩充或作为特殊要求使用的信号线称为( A )Α.备用线B.控制线C.数据线D.总线16. 嵌入式软件开发构建阶段的第二步是( B )Α.编译B.链接C.定址D.打包17. 以下有关进程和程序的说法错误的是( B )Α.进程是动态的B.一个进程可以对应多个程序C.一个程序可以对应多个进程D.程序不是进程18. WindRiver公司开发的嵌入式操作系统是( A )Α.VxWorksB.MontaVistaC.Windows CED.RT-Linux19. GDB中,用来设置断点的命令是( D )Α.killB.nextC.makeD.break20.1Byte等于( D )Α.1024KBB.1024KMC.1024GBD.8bit21. 以下不是嵌入式系统应用领域的是( A )Α.电子商务B.移动电话C.消费类电子产品D.军工航天22. 十进制数235,用十六进制表达为( A )Α.EBB.ECC.EAD.EE23. ARM采用定长指令格式,所有指令都是32位,Bit[24:21]为( C )Α.目标寄存器编码B.条件执行C.指令操作符编码D.永远是024. 80386处理器是( C )Α.8位处理器B.16位处理器C.32位处理器D.64位处理器25. 决定电源种类的线称为( C )Α.备用线B.控制线C.电源线D.数据线26. 嵌入式软件开发构建阶段的第三步是( B )Α.编译B.定址C.打包D.定址和打包27. 以下有关进程和程序的说法正确的是( C )Α.进程是静态的B.一个进程可以对应多个程序C.一个程序只能对应一个进程D.程序不是进程28. 以下不是嵌入式操作系统的是( A )Α.U-BootB.MontaVistaC.Windows CED.RT-Linux29. GDB中,用来显示源代码的命令是( B )Α.killB.listC.makeD.break30.1KB等于( B )Α.1024MBB.1024BC.1024GBD.8bit31. 以下不是嵌入式系统应用领域的是( A )Α.通用软件B.工业控制C.消费类电子产品D.机器人32. 十进制数100,用十六进制表达为( C )Α.62B.63C.64D.6533. ARM采用定长指令格式,所有指令都是32位,Bit[24:21]为( B )Α.目标寄存器编码B.操作符编码C.第一个操作数寄存器D.永远是034. 80486处理器是( B )Α.64位处理器B.32位处理器C.16位处理器D.8位处理器35. 决定地线分别方式的线称为( D )Α.备用线B.控制线C.电源线D.地线36. 打包结束后得到的是一个( A )Α.二进制文件B.文本文件C.源文件D.汇编文件37. 以下有关进程和程序的说法正确的是( ABC )Α.进程是动态B.程序是静态的C.一个程序可以对应多个进程D.一个进程可以对应多个程序38. 以下是嵌入式操作系统的是( D )Α.U-BootB.VM WareC.EVCD.Windows CE39. GDB中,用来删除断点的命令是( B )Α.killB.clearC.makeD.break40.1MB等于( C )Α.1024BB.1024GBC.1024KBD.8bit41. 以下属于嵌入式系统应用领域的是( D )Α.移动电话B.工业控制C.机器人D.以上都是42. 十进制数100,用八进制表达为( A )Α.144B.145C.146D.14743. ARM采用定长指令格式,所有指令都是32位,Bit[20]为( C )Α.目标寄存器编码B.第一个操作数寄存器C.指示本指令操作是否影响CPSR的值D.永远是044. EMU只指( A )Α.嵌入式微控制器B.嵌入式微处理器C.嵌入式数字信号处理器D.嵌入式片上系统45. 不能确定总线功能的强弱以及适应性的是( D )Α.控制线B.时序信号线C.中断信号线D.地线46. 以下不是选择嵌入式系统编程语言的衡量标准的是( B )Α.位操作B.价格C.指针D.异常事件处理47. 以下不是线程的优点的选项是( D )Α.响应度高B.资源共享C.经济D.单处理器使用48. 以下是嵌入式操作系统的是( B )Α.VIVIB.RT-LinuxC.EVCD.VM Ware49. GDB中,执行下条源代码的命令是( D )Α.nextB.clearC.makeD.go50.1GB等于( C )Α.8bitB.1024BC.1024MBD.1024KB51. 以下不属于嵌入式系统应用领域的是( D )Α.消费类电子产品B.工业控制C.军工航天D.办公系统52. 十进制数100,用二进制表达为( D )Α.1100111B.1100010C.1100101D.110010053. ARM采用定长指令格式,所有指令都是32位,Bit[19:16]为( D )Α.目标寄存器编码B.永远是0C.指示本指令操作是否影响CPSR的值D.第一个操作数寄存器54. EMPU只指( B )Α.嵌入式微控制器B.嵌入式微处理器C.嵌入式数字信号处理器D.嵌入式片上系统55. 能确定总线功能的强弱以及适应性的是( C )Α.备用线B.地线C.中断信号线D.数据线56. 以下不是选择嵌入式系统编程语言的衡量标准的是( A )Α.以下都不是B.多任务支持C.程序控制结构D.异常事件处理57. 以下说法错误的是( B )Α.线程响应度高B.程序是动态的C.程序不是进程D.进程是动态的58. 以下不是Boot Loader的是( C )Α.VIVIB.U-BootC.RT-LinuxD.BLOB59. GDB中,显示帮助信息的命令是( B )Α.showB.helpC.seeD.browse60.1TB等于( C )Α.1024BB.1024KBC.1024GBD.1024MB61. 世界上第一台计算机诞生在( B )Α.英国B.美国C.法国D.苏联62. 十进制数123,用十六进制表达为( C )Α.70B.7AC.7BD.7C63. ARM采用定长指令格式,所有指令都是32位,Bit[15:11]为( B )Α.第一个操作数寄存器B.目标寄存器编码C.指示本指令操作是否影响CPSR的值D.永远是064. EDSP只指( B )Α.嵌入式微控制器B.嵌入式数字信号处理器器C.嵌入式微处理D.嵌入式片上系统65. 能确定数据传输的宽度的是( A )Α.数据线B.时序信号线C.中断信号线D.电源线66. 以下是选择嵌入式系统编程语言的衡量标准的是( D )Α.异常事件处理B.多任务支持C.程序控制结构D.以上都是67. 以下说法正确的是( A )Α.线程响应度高B.程序是动态的C.程序就是进程D.进程是静态的68. 以下是嵌入式系统的是( D )Α.VIVIB.U-BootC.BLOBD.RT-Linux69. GDB中,显示表达式的值使用命令( A )Α.displayB.showD.list70.1024KB等于( C )Α.1TBB.1BC.1MBD.1GB71. 单片出现在20世纪( A )Α.70年代B.80年代C.90年代D.60年代72. 十进制数123,用二进制表达为( C )Α.1111101B.1111100C.1111011D.111101073. ARM采用定长指令格式,所有指令都是( B )Α.64位B.32位C.16位D.8位74. 以下说法错误的是( D )Α.寄存器的速度最快B.寄存器容量最小C.一般用来存储计算的操作数和结果D.寄存器位于处理器外部75. 不能决定总线功能的强弱以及适应性的信号线是( C )Α.控制信号线B.时序信号线C.中断信号线D.备用信号线76. 在做低功耗优化时,以下说法错误的是( A )Α.采用什么算法与降低功耗无关B.在采集系统中应尽量降低采集速率C.在通讯模块中应尽量提高传输的波特率D.CPU的工作时间与降低功耗有关77. 以下说法错误的是( A )Α.程序就是进程B.程序是静态的C.线程响应度高D.进程是动态的78. 以下不是引导程序的是( D )Α.VIVIB.U-BootC.BLOBD.RT-Linux79. GDB中,终止被调试的程序可以使用命令( B )Α.clearB.killC.stopD.make80.1024MB等于( B )Α.1TBB.1GBC.1KBD.1B二填空题1.嵌入式系统的嵌入性特性,是指系统需要与物理世界中特定的环境和设备紧密结合。
ARM开发板使用手册
ARM开发板使用手册PHILIP LPC2132ARM7TDMI第一章介绍LPC2132开发板是专门为arm 初学者开发的实验板,用户可以做基础的arm实验,也可以做基于ucos-ii的操作系统实验。
本系统的实验源代码全部开放,用户可以在此基础上开发产品,减少重复劳动。
由于LPC2132体积很小,并且功能强大,因此特别适合需要复杂智能控制的场合,其运行速度高于早期的80486计算机,而体积只有指甲大。
我们已经将LPC2132产品成功应用在干扰比较强的工业场合,经过6个月的运行,各项指标符合要求。
因此我们特别推荐这一款开发板作为ARM初学者入门。
由于此款开发板体积很小,非常适合直接应用在工业以及民用智能控制器的场合。
LPC2132 CPU介绍LPC2131/2132/2138 是基于一个支持实时仿真和跟踪的16/32 位ARM7TDMI-STM CPU,并带有32kB、64kB 和512kB 嵌入的高速Flash 存储器。
128 位宽度的存储器接口和独特的加速结构使32 位代码能够在最大时钟速率下运行。
对代码规模有严格控制的应用可使用16 位Thumb 模式将代码规模降低超过30%,而性能的损失却很小。
较小的封装和很低的功耗使LPC2131/2132/2138 特别适用于访问控制和POS 机等小型应用中;由于内置了宽范围的串行通信接口和8/16/32kB 的片内SRAM,它们也非常适合于通信网关、协议转换器、软件modem、语音识别、低端成像,为这些应用提供大规模的缓冲区和强大的处理功能。
多个32 位定时器、1个或2 个10 位8 路的ADC、10 位DAC、PWM 通道、47 个GPIO 以及多达9 个边沿或电平触发的外部中断使它们特别适用于工业控制应用以及医疗系统。
主要特性●●16/32 位ARM7TDMI-S 核,超小LQFP64 封装。
●●8/16/32kB 的片内静态RAM 和32/64/512kB 的片内Flash 程序存储器。
ARM的启动和中断向量表
ARM的启动和中断向量表启动的⽅式对于S3C2440⽽⾔,启动的⽅式有两种,⼀是Nor Flash⽅式启动,⼆是Nand Flash⽅式启动。
使⽤Nor Flash⽅式启动Nor Flash的地址范围如下0x0000.0000—0x0800.0000 (2M Nor Flash)⽚内的BootSRAM地址被置为0x4000.0000—0x4000.DFFF (4K BootSRAM)由于可以在Nor Flash直接运⾏代码,因此BootSRAM被映射到别的地址上去,可作为其他⽤途。
程序映像直接存放到NOR FLASH⾥⾯,中断向量表存放在0x0000.0000开始的8×4⼤⼩的空间中。
中断产⽣时,PC被置为相对应的向量地址。
如上电或者按Reset键时,PC直接置为0x00,从NOR FLASH的0x00处开始执⾏。
使⽤NAND Flash⽅式启动此时,⽚内的BootSRAM地址被置为0x0000.0000—0x0800.0000 (4K BootSRAM)NAND Flash地址接NFCE由于NAND Flash中不能运⾏代码,因此必须复制到内存之中再运⾏。
程序映像存放在NAND FLASH中,中断向量表位置在程序映像的最前⾯。
由于NAND FLASH不能运⾏代码,系统上电或者Reset的时候,内置的NAND FLASH 将访问控制接⼝,并将中断向量表和引导代码⾃动加载到内部SRAM(此时该SRAM 定位于起始地址空间0x00000000,容量为4KB),并且置PC值为0x00运⾏程序(这⼀切是有芯⽚内部的硬件逻辑完成的)。
之后,SRAM 中的引导程序将操作系统镜像加载到SDRAM 中,操作系统就能够在SDRAM 中运⾏。
启动完毕,4KB 的启动SRAM 就可以⽤于其他⽤途。
中断向量表的设置ARM中的异常与中断总共有7种按响应优先级从⾼到低按中断向量表顺序复位复位数据中⽌未定义指令中断FIQ SWIIRQ预取指令中⽌预取指令中⽌数据中⽌异常未定义指令、SWI IRQFIQARM要求中断向量表必须放置在从0地址开始,连续8×4字节的空间内(ARM720T和ARM9、ARM10也⽀持从0xFFFF0000开始的⾼地址向量表),各异常和中断向量在向量表中的位置如下地址中断0x00Reset0x04Undef0x08SWI0x0C Prefetch Abort0x10Data Abort0x14(Reserved)0x18IRQ0x2C FIQ0x2C FIQ当中断产⽣时ARM处理器强制把PC指针置为中断向量表中相对应的向量地址。
arm的工作原理
arm的工作原理ARM公司的处理器采用了RISC(精简指令集计算机)架构,即通过精简指令集来提高处理器的执行效率。
ARM处理器的工作原理可以大致分为以下几个步骤:1. 程序寄存器(Program Counter,PC)保存了当前正在执行的指令的地址。
处理器从PC中获取指令,并将PC值递增以指向下一条指令。
2. 指令缓存(Instruction Cache)负责存储最近使用的指令,以提高指令获取的速度。
如果需要执行的指令在指令缓存中已经存在,则可以直接从缓存中获取,避免了从内存中读取指令的延迟。
3. 指令解码器(Instruction Decoder)负责解析指令,并将其转换为相应的控制信号,以控制处理器的其他部件的操作。
解码器根据指令的类型和操作数,生成对应的操作码,将其发送到下面的执行阶段。
4. 执行单元(Execution Unit)负责执行指令的操作。
ARM处理器的执行单元包括算术逻辑单元(ALU)、乘法器、浮点运算器等,用于执行不同类型的指令。
执行单元接收控制信号和操作数,并执行相应的操作。
5. 访存单元(Memory Unit)用于与内存进行数据的读写操作。
ARM处理器支持多级缓存,数据缓存和指令缓存的操作可以在访存单元中完成。
6. 寄存器堆(Register File)保存了一些通用寄存器,用于存储和操作处理器的内部数据。
ARM的基本架构中有16个32位的通用寄存器,用于存储中间结果和计算过程中的变量。
7. 控制单元(Control Unit)负责控制处理器的整体工作。
控制单元接收来自解码器的控制信号,并根据需要调整指令流程,控制不同部件的工作模式和时序。
通过上述步骤,ARM处理器能够高效地执行指令,实现各种计算和数据处理操作。
这种基于RISC架构的设计使得ARM处理器具有较高的效能、低功耗和较小的芯片面积,因此广泛应用于移动设备、嵌入式系统和其他低功耗领域。
arm上电读取第一条指令
第一:概念
Rom ram sdram flash这些概念大家都不陌生了。也不解释相关的电器特性。只要知道相关操作特性:
ram可以通过地址直接访问。读写像sdram,掉电易失。直接经过行列地址译码。找到存储单元。并且把存储单元中的内容返回在数据线上。地址和数据线可以复用。
其实上电指出还有cpu的clock也是很重要的因素。有机会再聊聊这个clock和PLL。
谢谢
Ps:
本人能力水平有限,难免有不足之处,还希望大家提出批评以及指正。
记得07-08年一次去华为面试,主考官问了一些nand flash的操作的事宜,也算还好,没有太多刁难。面试结果还是没有被录取,这里有很多因素,有自己的,也有对方的。记得在面试的时候考官问了一个问题,flash的读写。还很详细的指了nand的操作。后来快面试结束的时候我问了考官一个问题:软件可以通过读写控制寄存器,或是把命令执行在data-bus上来模拟控制命令(理论上可以执行)。但是在还没有任何初始化外设(SDRAM,DRAM,RAM)的情况下,哪里的代码可以操作nand flash这样的设备。应为这样的设备,是要使用命令来控制flash的行为的。这样的状态也就是上电那一刹那,到mpu的第一条指令的开始地方,是如何过渡的。(注意:nand,cf-card,usb-storage不是唯一的掉电非易失的存储元器件,还有arm-xxx片内的rom和ram)
在omap的芯片上片内的ram位于 0x40200000 ~ 0x4020ffff。Flash位于(GPMC)总线的接口上。在u-boot下使用简单的命令来比较一下flash中第一个page中的二进制内容,和ram中的内容,是否一样。
图 1 中显示的nand dump命令下page 0 offset 0的内容
嵌入式系统-复习题资料
嵌⼊式系统-复习题资料⼀、1、某⽂件属性显⽰为 drwxr-xr-x,则该⽂件是( A )。
A、⽬录⽂件B、普通⽂件C、链接⽂件D、管道⽂件2、在linux中,通常作为⽤户⼯作⽬录的是( C )。
A、 /bootB、/etcC、 /homeD、/bin3、下列命令中,⽤于显⽰系统进程列表的命令是( D )。
A、 locateB、mvC、 catD、ps4、表⽰⽬标⽂件的扩展名⼀般是( B )。
A、.cB、 .oC、 .hD、 .i5、在Makefile的⼯程管理中,( C )表⽰第⼀个依赖⽂件的名称。
A、 $*B、$+C、$<D、 $?6、以下不属于嵌⼊式系统特点的是 B 。
A 、不具备⼆次开发能⼒B 、⾯向通⽤应⽤ C、软硬件裁剪 D、软件固化于芯⽚7、对嵌⼊式板进⾏在线交叉调试(ICD⽅式),所使⽤的连接接⼝⽅式为( D )。
A、USBB、⽹络接⼝C、串⼝D、 JTAG8、linux与开发板串⾏调试⽅式中,所使⽤到的⼯具软件是( A )A、 minicomB、超级终端C、arm-linux-gccD、 gdb9、在Linux内核源代码中,与处理器体系结构有关的⼦⽬录是( C )。
A、/includeB、/initC、/archD、drivers10、下列⽂件系统,不是嵌⼊式系统的⽂件系统格式的是( B )A、cramfsB、ntfsC、romfsD、jffs11、以下属于Linux⽂件系统格式的是( A )A、EXT3B、FATC、FAT32D、NTFS12、某⽂件属性显⽰为–rwxr-xr-x,则该⽂件是( B )。
A、⽬录⽂件B、普通⽂件C、链接⽂件D、管道⽂件13、在linux中,通常作为存放系统配置⽂件的⽬录是( B )。
A、 /bootB、/etcC、 /homeD、/bin14、下列命令中,⽤于给特定进程发送信号的命令是( C )。
A、 locateB、mvC、 killD、 cat15、在Makefile的⼯程管理中,( D )表⽰⽬标⽂件的完整名称。
03ARM指令集
(5)堆栈寻址
当 SP 指向最后压入堆栈的数据时,称为满堆栈 (Full Stack),而当 SP 指向下一个将要放入数据的 空位置时,称为空堆栈(Empty Stack);
入栈时,SP 向高地址方向变化,称为递增堆栈 (Ascending Stack);SP 向低地址方向变化,称为递 减堆栈(Descending Stack)。
1、ARM 指令集概述
ARM指令集是32位的,程序的启动都是从ARM 指令开始;所有的ARM指令集都可以是可以条件执 行的。
从以下三个方面介绍: ① 指令集编码 ② 条件执行 ③ 指令分类及指令格式
① 指令集编码
ARM指令集是以32位二进制编码的方式给出的, 大部分的指令编码中定义了第一操作数、第二操作数、 目的操作数、条件标志影响位以及每条指令所对应的 不同功能实现的二进制位。
乘法指令的二进制编码: 乘法指令的详细列表:
(2)Load/Store 指令
唯一用于寄存器和存储器之间进行数据传送的指令:
单寄存器的存取指令(LDR,STR) 多寄存器存取指令(LDM,STM) 单寄存器交换指令(SWP)
LDR/STR:单字和无符号字节的数据传送指令 前变址格式
LDR|STR {<cond>}{B} Rd,[Rn,<offset>]{!} 后变址格式
(1)立即寻址
操作数本身就在指令中给出,只要取出指令也就
取到了操作数,这个操作数被称为立即数,对应的寻
址方式也就叫做立即寻址。例如以下指令:
ADD R0,R0,#1
;R0←R0+1
ADD R0,R0,#0x3f ;R0←R0+0x3f
以上两指令中第二个源操作数即为立即数,要求 以“#”为前缀并声明其进制,如 0x、0d、0b等。
嵌入式系统原理及应用试卷2
一、填空 (每空1 分,共 20 分)1.嵌入式系统的组织架构是嵌入式处理器、存储器等硬件、嵌入式系统软件和应用软件所组成的。
2.ARM系统复位后,第一条执行的指令在__0x02_。
3.冯诺依曼体系结构的特点之一是系统内部数据和指令都存储在统一存储器中,而哈佛结构则是分开存储。
4. ADD R0,R1,#3属于立即寻址方式。
5 ARM指令集和Thumb指令集分别是32 和16 位的。
6.嵌入式软件结构一般分为驱动层、OS层、中间件层和应用层。
7.cache放置数据的常用地址变换算法有直接、组相联和全相联。
8.嵌入式系统中电源管理器最常见的工作方式是工作、空闲和睡眠二简答 (每题5分,共 30 分)1.嵌入式处理器一般具有以下4个特点:(1)大量使用寄存器,对实时多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时内核的执行时间减少到最低限度。
结构上采用RISC 结构形式。
----------1分(2)具有功能很强的存储区保护功能。
这是由于嵌入式系统的软件结构已模块化,而为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区保护功能,同时也有利于软件诊断。
----------1分3)可扩展的处理器结构,最迅速地扩展出满足应用的最高性能的嵌入式微处理器。
支持ARM (32位) 和Thumb(16位)双指令集,兼容8位/16位器件。
-----------1分(4)小体积、低功耗、成本低、高性能,嵌入式处理器功耗很低,用于便携式的无线及移动的计算和通信设备中,电池供电的嵌入式系统需要功耗只有mW甚至μW级。
---2分2.ARM处理器对异常中断的响应过程如下:首先,将当前程序状态寄存器CPSR的内容保存到将要执行的异常中断对应的备用程序状态寄存器SPSR中,以实现对处理器当前状态、中断屏蔽位及各条件标志位的保存。
各异常中断模式都有自己相应的物理SPSR寄存器。
----2分然后,将引起异常指令的下一条指令的地址保存到新的异常工作模式的R14即R14_mode 中,使异常处理程序执行完后能正确返回原程序。
ARM启动
答案是,nandflash根本没有地址线,没法直接映射,必须使用SRAM做一个载体,通过SRAM把剩余的nandflash代码(即剩余的uboot启动代码)复制到SDRAM中运行。
若想从nandflash启动,那么uboot最核心的代码必须放在前4k完成。这4k代码要完成ARM CPU的核心配置以及将剩余的代码拷贝到SDRAM中(若从norflash启动则没有4k这个大小的限制,但是还会在完成最主要的设置后进入SDRAM中运行)。
?
1.1.1.2 ARM从norflash启动
若从norflash启动,则norflash直接被映射到内存的0x0地址处(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址不变,还是0x40000000),然后cpu从0x00000000开始执行(也就是在Norfalsh中执行)。
sdram:主要用于程序执行时的程序存储、执行或计算,类比于PC的内存;
?
综上:norflash比较适合频繁随即读写的场合,通常用于存储代码并直接在其中运行。nandflash用于存储资料。
只要知道以上大概区别就行。以下说明ARM从两种flash启动方式的异同。
?
1.1.1.1 ?ARM从nandFlash启动
若从nandflash启动,上电后nandflash控制器自动把nandflash存储器中的0——4K内容加载到芯片内的起步石(Steppingstone,起步石这个机制是处理器中集成的功能,对程序员透明),即内部SRAM缓冲器中,同时把内部SRAM的起始地址设置为0x0(不同的CPU上电后的PC值不尽相同,对不同的CPU该值也不尽相同),然后把这段片内SRAM映射到nGCS0片选的空间,进而CPU开始从内部SRAM的0x0处开始取得第一条指令,该过程全部是硬件自动完成,不需要程序代码控制。
ARM启动释疑
ARM启动释疑开始学ARM时就对芯片上电后的执行顺序很纳闷,但苦于网上的解释都不甚详细,而且常常有学弟学妹来问,含糊其辞总怕误人子弟,想讲诉详细又总不能够。
近些天闲来无事,决心好好整理一下启动流程,一劳永逸。
我想每个学习51单片机的同学都应该记得一句话:芯片上电从零地址开始执行程序。
说实话,不记得这句还好,记住就更乱了;不是说这句话错,而是说的太片面了。
对于低级单片机,的确是这样;但对于ARM等高级芯片,启动方式就变得多种多样,而上电后开始执行的地址也不再固定为0地址了。
因此如果你是一个忠实的51使用者,那么我建议你不需要听我废话了,你根本不会遇到这方面的理解障碍,使用51时一般为ISP下载,代码一般就直接下载到零地址,不存在启动方式多样性的问题,但如果你使用过ARM,就会发现这一问题非常缠人。
一般出现的理解障碍都是在“启动方式”和“启动流程”这两个字眼上。
下面我们将一步步解释这两个问题。
我们的程序一般分为两部分:启动代码和功能代码,“启动代码”的主要工作是初始化芯片的各种工作模式下的堆栈(如果需要使用中断,还要定义中断向量表),一般由芯片设计工程师用汇编语言编写,当然不同的芯片这个程序也会有所不同,以后基本上也不会再有变动,所以要求非常精炼,嵌入式工程师直接拿来用就可以了,然后CPU程序指针默认跳转到__main()函数执行,此处主要初始化一些数据区域之类的,下面才是跳转到我们平时编写的main()函数,也就是所谓的功能代码。
那这些代码在芯片上电前保存在哪里呢?ARM芯片上电后也是从默认地址开始执行程序,但一般此地址为ESRAM或者SDRAM,这两个存储器都是易失性存储器,没有断电存储代码的功能,也就是说当我们的芯片上电时这里面全为不确定值(对ESRAM来说全为0,对DDR来说为随机值),那要执行的代码在哪里呢?那么就引出启动方式的概念了!ARM一般有芯片内部Flash启动、外部存储器启动(NAND、NOR、SD)两种启动方式:1、内部Flash启动是指芯片上电后PC立即开始执行这个存储器里的代码,注意这里不是零地址。
ARM的启动分析详解及应用
ARM的启动分析详解及应用ARM是一款广泛应用于嵌入式系统和移动设备的处理器架构。
在ARM的启动过程中,主要涉及到硬件初始化、加载引导程序和启动操作系统等步骤。
下面将对ARM的启动过程进行详细分析,并讨论其在实际应用中的应用。
硬件初始化:在ARM的启动过程中,首先需要对硬件进行初始化。
这包括对中央处理器(CPU)、存储器、外设等进行初始化操作。
例如,初始化CPU的控制和配置寄存器,设置存储器的访问模式和权限等。
硬件初始化的目的是确保系统处于一个稳定的状态,为后续的操作打下基础。
加载引导程序:引导程序是ARM启动的关键部分,它负责初始化系统环境和加载操作系统的镜像文件。
引导程序通常位于启动设备的引导扇区或者特定的存储器地址中。
在ARM中,引导程序可以是U-Boot、Das U-Boot或是其他自定义的引导程序。
加载引导程序的方式可以是通过串口、以太网或者其他类似的介质。
引导程序的主要功能是初始化设备和外设,配置内存和中断控制器等。
它会加载操作系统的镜像文件到内存中,并跳转到操作系统的起始地址,从而将控制权交给操作系统。
启动操作系统:在引导程序加载并跳转到操作系统的起始地址后,操作系统开始运行。
操作系统负责管理硬件资源、提供系统服务和支持应用程序的运行。
常见的ARM操作系统有Linux、Android等。
ARM的启动分析步骤在实际应用中具有重要的意义。
首先,通过硬件初始化可以确保系统处于一个稳定的状态,避免因为硬件问题导致系统崩溃或运行不正常。
其次,加载引导程序可以实现自定义的系统启动流程和初始化操作,满足特定应用需求。
最后,启动操作系统可以为用户提供高效、稳定的系统环境,并支持各种应用程序的运行。
在实际的应用中,ARM的启动分析步骤具有广泛的应用。
例如,嵌入式系统可以通过自定义的引导程序来实现特定的启动流程和初始化操作,以满足设备的需求。
移动设备则可以通过加载引导程序和启动操作系统来提供稳定的系统环境和良好的用户体验。
arm 子过程 参数 入参顺序
arm 子过程参数入参顺序ARM是一种广泛应用于嵌入式系统和移动设备的处理器架构,其子过程参数入参顺序是指在ARM汇编语言中,子过程(也称为函数或过程)的参数在调用时的传递顺序。
本文将介绍ARM子过程参数入参顺序的相关知识。
在ARM汇编语言中,子过程可以接受多个参数作为输入,并根据这些参数进行相应的处理。
参数的传递顺序对于正确的函数调用和参数处理非常重要。
ARM子过程参数入参顺序可以按照以下几种方式进行传递。
1. 顺序传递:参数按照从左到右的顺序依次传递给子过程。
这是最常见的参数传递方式,在大多数情况下都可以满足需求。
例如,如果有一个子过程需要两个参数,可以按照顺序传递这两个参数。
2. 寄存器传递:ARM架构中有一些特定的寄存器,如R0、R1、R2等,可以用来传递参数。
在调用子过程之前,将参数存储在相应的寄存器中,然后在子过程中通过读取这些寄存器来获取参数的值。
这种方式可以提高参数的传递效率,尤其适用于频繁调用的子过程。
但是,寄存器的数量有限,通常只能传递一部分参数。
3. 堆栈传递:当参数的数量超过寄存器的容量时,可以使用堆栈传递参数。
堆栈是一种数据结构,用于存储函数调用时的临时数据。
在ARM汇编语言中,可以使用堆栈来传递参数。
具体做法是将参数的值依次压入堆栈,然后在子过程中通过弹出堆栈来获取参数的值。
这种方式可以传递任意数量的参数,但是相对于寄存器传递来说,效率稍低。
4. 寄存器和堆栈混合传递:为了兼顾寄存器传递和堆栈传递的优势,可以将部分参数存储在寄存器中,将剩余的参数存储在堆栈中。
这样可以提高参数传递的效率,并且可以传递更多的参数。
在ARM汇编语言中,可以根据具体的需求选择合适的参数传递方式。
不同的参数传递方式有不同的优势和限制,并且在实际应用中可能会有一些特殊情况需要特殊处理。
因此,在编写ARM汇编代码时,需要根据具体情况选择合适的参数传递方式,并确保参数传递的顺序和值的正确性。
总结一下,ARM子过程参数入参顺序是指在ARM汇编语言中,子过程的参数在调用时的传递顺序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ARM ARM上电后的第一条指令在哪里开始jackwang2006-12-22 22:43:00 评分只看楼主 1楼ARM ARM上电后的第一条指令在哪里开始关键词:上电后的一条指令在哪里开始jackwang2006-12-22 22:43:00 评分2楼问这玩意儿不像那些8位机好懂。
它执行的指令是在RAM中还是ROM中?一般的8位机好像程序都是从ROM中读一条执行一条。
RAM只是放了一点中间产生的结果。
PC机好像就是先从BIOS中读点东西。
但程序什么的还是得在RAM中运行的。
那么AR M是怎么工作的呢?答 1: ARM上电后的第一条指令ARM上电后的第一次执行复位向量处指令,该指令通常是在ROM中.上电后ARM首先要初始化内部环境(它包括内部资源的配置,并将ROM中的程序复制到RAM).其次,强制程序转到RAM中取指(因为从RAM 中取指比ROM中快).建议看看相关的BOOTLOADER 程序答 2: 和51单片机一样,对比着学习程序一般只有在仿真调试时才放在片内或片外RAM中运行,最终的程序要放在片内或片外的flash存储器中运行。
一般只有atmel公司有些型号的ARM芯片在片内集成了大量的flash 程序存储器。
答 3: 我是这样理解的其实我是这样理解的:我们可以看到启动代码里面有这样一段代码:VectorsLDR PC, ResetAddrResetAddr DCD ResetResetBL InitStack ;初始化堆栈BL TargetResetInit ;目标板基本初始化;跳转到c语言入口B __main可见,复位后,首先执行的指令应该是“初始化堆栈”,目标板基本初始化,跳转到c语言入口三个部分的程序。
答 4: 我的理解复位后,ARM先从地址0开始执行,经过一段初始化程序,比如什么堆栈啊,寄存器什么的。
由于ARM的执行文件里包括RO,RW,ZI段。
RO段呢就是真正的执行命令,不能改写的。
RW段是指ARM运行过程中的一些变量什么的,运行过程中可改写的。
ZI段其实也是包括在RW段中,只是这些值开始需要被初始化为0。
但是用ADS编译链接好的文件RO,RW段地址应该是连在一起的,也是被一起烧入到AR M系统的ROM或FLASH中的.所以这时RO,RW都在ROM中。
因此,ARM得初始化过程需要将RW转移也就是搬运到ARM系统的RAM中,以便以后程序得以改写它并正确运行。
原来的RO段可以在ROM中运行,当然啦,速度可能不会快,所以呢,把RO段也搬到RAM中,但是这出现一个问题,此时RO段的地址已经不是从0开始了,那么以后的指令执行就会出问题。
解决这个问题的方法就是对地址进行REMAP,重新定位RAM,RO M的地址,可以通过改写ARM中相关的存储器管理寄存器来达到这个目的。
不知道上述表达是否有误,请大侠拍砖!答 5: 复位! 复位!各位:ARM复位时是PC=[0X0 0000000] ,即从地址为0X00000000开始运行.!我不管它是SRAM或FLASH!你可以通过REMAP把CPU骗,将[0X]误为[0X00000000].但是PC=[0X000000 0]不会错. 通常复位时PC指向FLASH(其CS有效),要不然程序从哪儿来呀!ARM板怎么能运行呀!又因为指令格式: 操作码+地址码, 因此地址码设置是连接器来完成的(LINKER).我们告诉LINKER那里是SRAM(RW)地址开始.那里是ROM(RO)地址开始.话说回来,干吗一定要REMAP呀,别管他不行吗?反正复位时PC指向FLASH(其CS有效).答 6: 复位后从地址0开始工作当然没有问题了讨论一下ARM的启动过程还是有必要的,毕竟是个基础.答 7: 不一定对于CPU来时是从00000000开始,但具体芯片会将一个可含有启动程序的地址映射过来进行启动。
有些启动地址是芯片内部不开放的ROM,也可使flash,也可是外部扩展空间(当然要接ROM型的)。
有些芯片可从IIC或SPI接口启动,实际上实现运行了内部不开放的ROM程序启动外部接口初始化和数据加载,就好像PC机从U盘或网卡启动答 8: 看一般根据ARM的启动模式确定从cs0Flash、片内ROM、串口、u口、spi等接口处启动,以cs0处flash为例,启动时,cs0地址为0,程序在flash中读取并执行,但这个过程一般为boot过程,很短,不大,并且有一大部分是将cs0中程序拷贝到片内sram中,然后remap,程序再在sram中执行,然后进行sdram等内设控制器寄存器的设置,最后boot 过程从cs0FLASH中拷贝BOOTLOADER到SDRAM中(可能涉及解压缩),最后将PC挑砖至SDRAM中BOOTLOADER起始地址,开始BOOTLOADER过程;BOOTLOADER过程典型德代表如U-BOOT等程序,类似PC机的BIOS,具体就不多说了,只是最后要将系统代码及文件系统拷贝到SDRAM 的预定地质,然后是执行操作系统自举;操作系统之后当然是用户程序了,就不多说了!其实高级的ARM内部有I-CACHE,D-CACHE,或者上电后根据根据系统慢时钟(32.768 K)执行CS0处FLASH或内部ROM代码。
因此,这个问题没有唯一答案!答 9: 洗耳恭听!答 10: 大家先分清"启动"是操作系统的启动还是没有操作系统的启动!因为ARM也可以不用os带操作系统的启动过程我认为和大家所说的一样,没有os的应用的启动过程可以没有这么复杂!除了初始化自己的系统硬件外,就可以执行自己的程序了(和51一样)。
当然也可以把程序搬到ram中执行(更快一些)。
例如s3c44b0x。
多说一些:根据我们所用的各种开发板,程序都是从硬件线性非易失性存储器(flash、eeprom等)的0x0位置开始执行,该位置除了有bootloader以外,bootloader后面也可以存储os (linux、ucosii等),执行完bootloader以后将os复制到ram中,让os在ram中运行,没有os的程序在不在ram中运行都可以,(至于运行时的地址由编译器和链接器、你的硬件设计决定)。
还有一种启动比较象普通计算机的启动方式,那就是os并不在硬件线性非易失性存储器中,而是在外部并行存储器中(非线性的,没有地址线、数据线的那种,有点象硬盘)。
这时,硬件线性非易失性存储器中存储的bootloader(有点象普通计算机的BIOS)执行时要从并行外部存储器中读出os放到ram中,然后交给os控制权,让os管理一切!这和普通计算机的启动过程基本是一样的!当然这其中还有remap等等问题,应该都是由bootloader(BIOS)程序和你的编译链接器来解决!个人的一点认识,欢迎大家扔砖头。
答 11: mabaoqiu你好,可不可以说说不带OS的简单程序设计过程?再次请教,我想请问DX,怎样设计一个LED闪烁程序(包括ARM的启动代码,生成可以下载到ARM上的文件的整个过程)。
在网上抄了一个程序,不知道是不是完整的。
;**************************************************************;这个是不是启动代码呢?;**************************************************************IMPORT MainAREA Ini,CODE,READONLYENTRYLDR R0, =0x3FF0000LDR R1, =0xE7FFFF80STR R1, [R0]LDR SP, =0x3FE1000BL MainB .END//***************************************************************//C语言程序//***************************************************************#define IOPMOD (*(volatile unsigned *)0x03FF5000) //IO port mode registe r#define IOPDATA (*(volatile unsigned *)0x03FF5008) //IO port data register void Delay(unsigned int);int Main(){unsigned long LED;IOPMOD=0xFFFFFFFF; //将IO口置为输出模式IOPDATA=0x01;for(;;){LED=IOPDATA;LED=(LED<<1);IOPDATA=LED;Delay(10);if(!(IOPDATA&0x0F))IOPDATA=0x01;}return(0);}void Delay(unsigned int x){unsigned int i,j,k;for(i=0;i<=x;i++)for(j=0;j<0xff;j++)for(k=0;k<0xff;k++);}这个程序包括你们说得BOOTLOADER了吗?程序复制到SRAM中了吗?答 12: 个人认为:1、所谓的bootloader是个学术上的名词,从字面上理解bootloader有点像专门负责启动os的(因为“boot”、“loader”),当然也许这个名词本身就是在有os的系统上才有!实际上当你制作51系统时,你总需要初始化你的硬件(当然没有ARM那么复杂),这些初始化的代码未尝不是一种bootloader。
只是ARM系统复杂一些,需要做更多的工作,需要启动os而已(好像你要是用ARM,那么不用os就有点浪费资源)。
5 1系统一般不会跑os(极少),所以不会有人专门在51上用这个名词!实际上现在我觉得一些名词很混乱,bootloader、bsp、bios等等他们在概念上都有重叠的地方(有时可以混用?),又有不同的地方!按我现在的理解,这些名词一般用在不同的os上!(例如:bsp在wince、vxworks上用的较多,bootloader在linux上用的较多)当然这也可能和一些商业运作、竞争有一定的关系。
2、至于你的程序,很惭愧!我实际应用也不多(看的理论比实际干活多,当然理论上我也不是很通!;-))。
因为没有具体的硬件作参考,大概看了一下,硬着头皮说一下:上面的汇编应该是启动代码,当然你也可以把它看作bootloader,我觉得更应该叫初始化代码,(象51,因为他做的工作太少了!)你的程序不是在ram中运行的!因为没有复制到ram。