ARM9入门学习心得分享
- 格式:doc
- 大小:19.00 KB
- 文档页数:4
ARM学习心得1.ARM是32位精简指令集处理器2.ARM7 3级流水线冯.诺依曼结构3.ARM9 5级流水线哈佛结构4.只有Load/Store指令可以访问存储器5.支持数据cache和指令cache6.处理器模式:(1).用户模式(usr)(2).快速中断模式(fiq)(3).外中断模式(irq)(4).管理模式(svc)(5).中止模式(abt)(6).未定义模式(und)(7).系统模式(sys)7.工作模式:(1).ARM指令集 32位(2).Thumb指令集 16位8.ARM处理器含有37个寄存器,包括31个通用寄存器和6个状态寄存器9.R13(SP-堆栈寄存器)R14(LR-链接寄存器)R15(PC-程序计数寄存器)CPSR(当前程序状态寄存器)SPSR(备份程序状态寄存器)10.小端模式:高地址位存放高数据位,低地址位存放低数据位;大端模式与之相反11.寻找方式:(1).立即数寻找立即数为8位以#开头(2).寄存器寻找(3).寄存器移位寻找(4).寄存器间接寻找(5).基址变址寻找(6).多寄存器寻找(7).相对寻找(8).堆栈寻找12.常用指令解析:(1).MOV MOV Rd,operand2 只适用于寄存器与寄存器或寄存器与立即数之间(2).MOVS 影响CPSR中的标志位(3).MVN MVN Rd,operand2 数据取反传送(4).LSL LSL n 逻辑左移(5).LSR LSR n 逻辑右移(6).ASL ASL n 算数左移相当于乘2(7).ASR ASR n 算数右移相当于除2(8).ROR ROR n 循环右移(9).RRX RRX n 带扩展的循环右移(10).ADD ADD Rd,Rn,operand2 加法(11).ADC ADC Rd,Rn,operand2 Rd=Rn+operand2+c 带进位的加法加上CPRS的C位(12).SUB SUB Rd,Rn,operand2 减法(13).SBC SBC Rd,Rn,operand2 Rd=Rn-operand2+c-1 带进位的减法(14).RSB RSB Rd,Rn,operand2 Rd=operand2-Rn 逆向减法(15).RSC RSC Rd,Rn,operand2 Rd=operand2-Rn+c-1 带进位的逆向减法(16).AND AND Rd,Rn,operand2 Rd=Rn and operand2 逻辑与(17).ORR ORR Rd,Rn,operand2 Rd=Rn or operand2 逻辑或(18).EOR EOR Rd,Rn,operand2 Rd=Rn xor operand2 逻辑异或(19).BIC BIC Rd,Rn,operand2 Rd=Rn and not operand2 位清零(20).CMP CMP Rd,operand2 比较,影响CPSR标志位(21).CMN CMN Rd,operand2 负数比较,影响CPSR标志位(22).TST TST Rd,operand2 位测试,影响CPSR标志位(23).TEQ TEQ Rd,operand2 相等测试,影响CPSR标志位(24).MUL MUL Rd,Rn,operand2 乘法 32位(25).MLA MLA Rd,Rn,Rm,operand2 Rd=Rn*Rm+operand2 乘加 32位(26).UMULL UMULL Rd,Rn,Rm,operand2 Rd=[Rm*operand2](0-31) Rn=[Rm*operand2](32,63) 64位无符号乘法(27).SMULL SMULL ... 64位有符号乘法(28).UMLAL UMLAL Rd,Rn,Rm,operand2 Rd=[Rm*operand2](0-31)+Rd Rn=[Rm*operand2](32-63)+Rn 64位无符号乘加(29).SMLAL SUMLAL... 64位有符号乘加(30).LDR LDR Rn,operand2/=start/=0x010201 加载内存数据(31).STR STR Rn,operand2/=start/=0x012010 数据存入内存(32).LDM 从内存中加载多个数据(33).STM 存储多个数据到内存(34).B B Rn 跳转(34).BL 带链接的跳转改变R14(35).BX 带状态切换的跳转(36).BLX 带链接和状态切换的跳转......13.运用于STM和LDM的模式:(1).IA 每次传送后增加地址(2).IB 每次传送前增加地址(3).DA 每次传送后减少地址(4).DB 每次传送前减少地址(5).FD 满递减堆栈STMFD SP!,{R1-R4} ;将R1-R4的数据存放到SP所指的内存中高寄存器放在高地址位,SP自增4当前SP不存放数据(6).ED 空递减堆栈当前SP存放数据(7).FA 满递增堆栈(8).EA 空递增堆栈14.条件标志位:编码扩展表示式标志位影响意义0000 EQ Z置1 等于操作数0001 NE Z清0 不等于操作数0010 CS/HS C置1 进位/无符号数大于或等于操作数0011 CC/LO C清0 无进位/无符号数小于操作数0100 MI N置1 负数0101 PL N清0 正数或00110 VS V置1 溢出0111 VC V清0 无溢出1000 HI C置1且Z清0 无符号数大于操作数1001 LS C清0且Z置1 无符号数小于或等于操作数1010 GE N等于V 有符号数大于或等于操作数1011 LT N不等于V 有符号数小于操作数1100 GT Z清0且N等于V 有符号数大于操作数1101 LE Z置1且N不等于V 有符号数小于或等于操作数1110 AL 任何状态总是,常忽略1111 NV 从不使用 ---15.子程序参数传递规则:当参数不超过4个时用R0-R3来存放返回值存放在R0中,存放顺序:寄存器编号由小到大当参数超过4个时,前面4个参数按上面规则存放,后面的参数按参数传递顺序右后往前依次入栈16.CPSR结构:31 30 29 28 27 ... 7 6 5 4 3 2 1 0N Z C V Q I F TN:Negative 负数标志位N=1:结果为负数N=0:结果为正数或零Z: Zero 零标志位 Z=1:结果为0 Z=0:结果不为0C: Carry 进位标志位 C=1:C=0:... 有四种情况V: oVerflow 溢出标志位 V=1:V=0:... 有两种情况I:IRQ中断使能/失能 I=1:失能IRQ I=0:使能IRQF:FIQ中断使能/失能 F=1:失能FIQ F=0:使能FIQT:状态标志位 T=1:Thumb状态 T=0:ARM状态4-0:工作模式:10000 usr10001 fiq10010 irq10011 svc10111 abt11011 und11111 sys17.ARM工作模式间的切换(1).切换方式:软件切换、硬件切换(2).除usr外其他的都叫特权模式,在特权模式下可以任意切换其他模式(3).在usr模式下只有通过硬件的方法切换到其他工作模式(4).除usr和sys,其他模式都叫异常模式(5).机器上电复位时,处于svc模式18:C语言和ARM汇编混用的几种方法:(1).内联汇编:在C函数中插入汇编语句使用arm或__arm关键字(2).嵌入式汇编:.........。
ARM初学入门经过一段时间对arm的学习,在这里跟大家说一些前期的学习经验,另外仅以一个例子说明一下ads的开发过程,因为这也是初学,可能有的地方说的不太好,望大家谅解,另外可以找其它参考资料来学习。
第一部分:arm的早期学习经验个人认为,要想学好arm应该首先对arm的整体框架(包括arm体系结构,arm开发过程,及arm程序框架及执行过程等)有一个了解。
这里这就不多说了,这些东西我也只是刚刚开始学习,还没有很好的掌握,就只说一些个人想法吧。
呵呵,因为时间紧,据说要在一周内完成。
至少你可以用书做一点,但上周之后,最后,哇,我真的疯了。
当我第一次得到这个实验盒时,我认为和NIOS一样,我几乎可以玩更多的演示。
一开始我没想到会遇到大问题。
我在arm实验箱里带了几本教科书和实验说明。
在用实验说明做了几次演示后,我没能做到这一点,因为前两次演示相对简单,只需用汇编语言编写一些关于arm寄存器操作的语句,那些学习过汇编语言的人很快就能理解。
但未来会有所不同,因为我在学习之初不知道ARM项目的框架。
我真的不明白。
为什么44B在整个过程中都有用。
h、 44B。
还有一个44binit的文件吗?前三个很容易理解。
那些玩过MCU的人可以很容易地看到44B H在S3C44B0X中定义了一些寄存器,44blib H和44blib C定义了一些初始化函数,而44binit S?我不明白。
我不能在这里做arm程序。
我必须在互联网上找到信息,看看这个功能是用来做什么的。
事实证明,这是我以前经常听到的“bootloader”或“boot code”或“arm boot program”,这是处理器启动时执行的一段代码,主要任务是初始化处理器模式,设置堆栈,初始化变量等由于上述操作与处理器架构和系统配置密切相关,它们通常是由汇编编写的(对于此内容,您可以查看相关资料)。
所以我花了几天时间研究文件“44binit.S”。
通过对本文档的研究,我学到了很多关于arm编程的知识,并对arm编程的总体框架有了大致的了解。
arm9学习开始
3250 开发板的JTAG 按照教程和随板光盘那样做不行,在网上搜索相关资
料一篇,总结的jtag 无法使用的方法,没有找到原因,最后换原来2410 所带
的jtag 头,可以使用,但是要手动设置jtag 中settings 选项中target setting 选项为arm926EJ-S,原因不详。
3250 ARM9 端口:
P0_MUX_SET 只写置1 表示管脚设置为可选的外设功能,置0 无效
P0_MUX_CLR 只写置1 表示管脚设置为默认的GPIO 功能,置0 无效
P0_MUX_STATE 只读0 表示为默认的GPIO 功能1 表示为配置可选外设功能其中 2 3 4 5 6 7 号引脚在lcd 使能情况下,复用位可能会被忽略8--31 位保留
P1_MUX_SET 只写置1 表示管脚设置为GPIO 功能,置0 无效P1_MUX_CLR 只写置1 表示管脚设置为默认的EMC 地址功能,置0 无效
P1_MUX_STATE 只读0 表示为默认的emc 地址管脚1 表示为GPIO
24--31 位保留
P2 与P3 的情况较多,需要结合用户手册或课本来确定管脚的功能
----------------------------------
以上为白天看到的内容,之前那些arm 介绍啊,体系结构啊,管教分配啊什
么的就不去记录了,现在也确实记不到- -
晚上看了下irq 和fiq 中断,还没有弄得很明白,特别是奇怪的一点,我发现
程序中有只对32 位寄存器中的16 位进行操作的情况,手工对代码进行调试加
0 或加1 之后发现估计是没有操作的那16 位没有用到,所以可以不操作??
还不是很清楚,明天弄明白这些,整理一篇关于中断的上来。
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 图26.外部中断外部中断时要先对外部中断的方式进行设置,是下降沿触发还是上升沿触发方式或其他,图37.步进电机initstep(); //步进机相关引脚初始化对了步进电机的引脚初始化后就可以对步进电机的转动方向进行控制了,如图4图4当motor_ccw 时,为反转方式8.键盘扫描对键盘进行操作时,可以对键盘进行操作,可以通过串口输入1~8来控制灯的闪动情况,初始化如图5图5对键盘的操作时使用可以参考如下图6:图69.i2c在i2c中首先要在头文件定义一个#define __debug_flash,使后面的程序生效。
ARM嵌入式学习笔记ARM嵌入式学习笔记 (1)1.嵌入式系统概述 (3)1.1.定义及特点 (3)1.2.嵌入式系统的发展 (3)1.3.未来嵌入式系统的发展方向 (3)1.4.典型的嵌入式系统的组成 (4)2.嵌入式软硬件系统 (4)2.1.电路的基本知识 (4)2.2.数制转换 (4)2.3.计算机组成原理 (4)2.4.嵌入式软件 (5)2.5.计算机编程语言 (5)2.6.数据结构 (5)2.7.操作系统 (5)2.7.1.操作系统的设计思路 (5)2.7.2.操作系统的分类 (5)3.ARM处理器 (6)3.1.微处理器和微控制器 (6)3.2.ARM处理器介绍 (6)3.2.1.ARM渗透到了许多应用领域 (6)3.2.2.ARM具有的优点 (6)3.2.3.ARM指令集 (6)3.3.ARM的结构 (15)3.3.1.ARM体系结构的命名 (15)3.3.2.处理器工作模式 (16)3.3.3.存储系统 (16)3.3.4.寻址方式 (16)4.嵌入式Linux (17)1.嵌入式系统概述1.1.定义及特点嵌入式系统是一种为特定设备服务,软硬件可裁剪的计算机系统,其英文名称是Embedded System。
特点是形式变化多样、体积小,可以灵活地适应各种设备的需求。
嵌入式系统的一些例子:手机、汽车、ATM等等。
1.2.嵌入式系统的发展电子计算机诞生以来,计算机的发展有两个方向:一个方向是体积大型化、处理能力超强的大型计算机;另一个是向体积小型化,功能多样化的方向发展。
●嵌入式微控制器即传统意义上的单片机,是目前嵌入式系统的前身。
一般都是8位或者16位。
●嵌入式微处理器单片机的发展时间较早,处理能力很低,只能应用在一些相对简单的控制领域。
嵌入式微处理器是近几年随着大规模集成电路发展同步发展起来的。
与单片机相比,嵌入式微处理器的处理能力更强,主流的嵌入式微处理器都是32位的。
嵌入式微处理器在一个芯片上集成了复杂的功能,有的还把常见的外部设备控制器也集成到芯片内部。
ARM9嵌入式系统设计基础教程嵌入式系统是一种特殊的计算机系统,通常由处理器、存储器、外设和操作系统等组成,用于控制和管理各种设备和系统。
ARM9是目前应用最广泛的一种嵌入式处理器,具有低功耗、高性能和低成本等优势。
本教程将介绍ARM9嵌入式系统的设计基础,包括硬件和软件方面的内容。
一、硬件设计基础1.处理器选择:ARM9嵌入式系统的核心是处理器,我们需要选择合适的ARM9处理器作为系统的处理器,常用的有ARM926EJ-S、ARM966E-S 和ARM968E-S等。
选择处理器时需要考虑处理能力、功耗和接口等因素。
2. 外设选择:嵌入式系统的外设通常包括存储器、输入输出接口、通信接口和传感器等。
我们需要选择合适的外设来满足系统的功能需求,常用的有SDRAM、NOR Flash、NAND Flash、UART、SPI、I2C、USB和Ethernet等。
3.PCB设计:嵌入式系统的PCB设计需要考虑信号完整性、电磁兼容性和功耗管理等因素。
我们需要合理布局和布线,进行必要的层间隔离和信号屏蔽,以保证系统的稳定性和可靠性。
4.供电设计:嵌入式系统的供电设计需要考虑电源的稳定性和效率,以及功耗的管理和优化。
我们需要选择合适的电源芯片,并进行必要的电源管理和电池管理等设计。
5.调试和测试:嵌入式系统的调试和测试是设计过程中的重要环节。
我们需要选择合适的调试和测试工具,例如ICE、JTAG和仿真器等,通过硬件和软件的调试手段来验证系统的正确性和稳定性。
二、软件设计基础1. 操作系统选择:嵌入式系统的操作系统是软件开发的基础,常用的操作系统有Linux、Windows CE和RTOS等。
我们需要根据系统的需求选择合适的操作系统,并进行必要的移植和配置。
2.驱动程序开发:嵌入式系统的外设和接口需要编写相应的驱动程序来完成硬件的初始化和控制。
我们需要掌握设备驱动程序的开发方法和技巧,例如寄存器编程、中断处理和DMA等。
arm实训总结标题:ARM实验实训总结报告一、前言本次ARM实验实训是我对嵌入式系统设计与开发的一次深度实践。
通过这次实训,我对ARM微处理器的结构原理、指令集以及基于ARM架构的嵌入式系统开发流程有了更为直观和深入的理解。
二、实训内容回顾在实训过程中,我们主要围绕ARM Cortex-M系列处理器进行学习和实践。
首先,从理论层面,我们系统地学习了ARM体系结构、工作模式、存储器管理、异常处理等基础知识;其次,在实践环节,我们使用Keil MDK等开发工具进行了汇编和C语言编程,完成了中断服务程序设计、定时器应用、串口通信等多个实战项目。
三、实训过程及收获1. 硬件操作与调试:通过对ARM开发板的实际操作,我亲身体验了硬件连接、程序下载、在线调试等环节,对硬件底层的工作原理有了更清晰的认识,也锻炼了我的动手能力和问题解决能力。
2. 软件编程与实现:通过编写和调试ARM汇编和C语言代码,我对ARM的指令集、寄存器配置、中断处理机制等有了深入理解,同时也提升了我的编程技能和逻辑思维能力。
3. 团队协作与交流:在完成复杂项目的过程中,我们分工合作,共同探讨解决方案,这不仅提高了我在团队环境下的工作效率,也锻炼了我与他人沟通协调的能力。
四、实训反思与展望尽管在实训过程中取得了一定的进步,但我也意识到自身在某些方面还有待提升,如对实时操作系统RTOS的理解与应用、硬件驱动程序的设计与优化等。
未来的学习中,我将深化对这些领域的研究,努力提升自己在嵌入式系统开发方面的综合能力。
总结,此次ARM实训是一次宝贵的实践经历,它使我对嵌入式系统的软硬件协同设计有了更深层次的认知,并为我后续从事相关领域的工作或研究打下了坚实的基础。
五、结语ARM实训不仅是对我现有知识的检验,更是对未来专业技能的磨砺。
我会珍视这份实践经验,以此为契机,持续探索并深化对嵌入式系统尤其是ARM架构技术的研究,为我国的科技创新事业贡献自己的力量。
经过一段时间对ARM的学习,在这里跟大家说一些前期的学习经验,另外仅以一个例子说明一下ADS的开发过程,因为这也是初学,可能有的地方说的不太好,望大家谅解,另外可以找其它参考资料来学习。
第一部分:ARM前期学习经验个人认为,要想学好ARM应该首先对ARM的整体框架(包括ARM体系结构,ARM开发过程,及ARM程序框架及执行过程等)有一个了解。
这里这就不多说了,这些东西我也只是刚刚开始学习,还没有很好的掌握,就只说一些个人想法吧。
呵呵,因为时间比较紧张,本来说是一个星期搞定ARM,至少拿着书本可以一点点的做着,可是经过上一个星期,到最后,哇,真的快疯了。
刚开始拿到实验箱,以为和NIOS一样,多跑一些DEMO应该就差不多会玩了,没想到一开始就碰到一个大问题,ARM实验箱里边带了几本教材和实验指导书,拿着实验指导书做了几个DEMO就做不下去了,因为前两个DEMO还比较简单,就只是用汇编语言写了几条对ARM寄存器操作的语句,学过汇编语言的很快就可以理解了。
可是往后就不一样了,因为刚开始学,不太了解ARM程序的框架,实在是看不懂了,为什么每个全程里边都有用到44b.h ,44blib.h ,44blib.c还有一个44binit.s文件?前边三个还容易理解,玩过单片机的很容易就能看出来44b.h 里边定义了一些在S3C44B0X内部的寄存器,44blib.h和44blib.c定义了一些有关初始化的函数,而44binit.s呢?看不懂,到这里我的ARM程序就没法往下做了,只有在网上再找资料,看这个函数到底是干什么用的,原来这就是以前经常听说的“bootloader”或着说是“启动代码”,或着说是“ARM的引导程序”,就是处理器在启动的时候执行的一段代码,主要任务是初始化处理器模式,设置堆栈,初始化变量等等.由于以上的操作均与处理器体系结构和系统配置密切相关,所以一般由汇编来编写(关于这方面的内容大家可以查看相关资料)。
arm入门学习方法作者:phantom 时间:2009-8-6 文章来源:来自网络1、抓住51开发arm这几个月来我一直都爬在51的问题,自己都有一点笑自己了,用了4个月的时间,来巩固51的原理和程序,还好我自己算是走过来了,自己笨,身边的高才生又看不上51的原理,他们都比较“牛”,说51过时了,你问那个做什么???我比较郁闷!过时吗?我有一点怀疑?他们不愿意说有他们自己的理由,没有人强求,靠自己好了。
我自己个人的观点:51是一个基础,而且还很重要,这是再我看了arm之后感觉到的。
它可以加速你的arm学习速度,真得!不相信你试一试好了。
凡是要求一个速度、效率,不要做一些无用功,抓紧身边的每一个一分钟,人是活的,东西(知识、书)是死得,想要做的事情因此就简单了。
2、我在网上看到了一篇很不错的arm文章,粘贴过来,为了和像我一样在很少有人帮助的情况下,自学arm 的难兄难弟们。
“arm怎么入门”。
我不是高手,仍然是菜鸟。
但是回想起自己当时的迷茫,特意写了这篇东西,当作给和我一样的兄弟姐妹的帮助吧。
问这个问题的人多半不是已经工作的工程师,而是和我一样是学生,所以这篇笔记就把看家当成我一样的菜鸟,高手勿怪。
首先声明:本人还没有找工作,事实上处于研究生刚毕业,还没开始找工作的空闲时间,44b0只是兴趣所在,打发时间。
所有看法完全是自己的感受,不代表任何他人。
错了的观点各位帮我纠正。
再次补充:很多朋友看了上面的话就问我为什么研究生毕业了还不找工作:)说是打发时间,其实是因为研究生的时候带了一个项目,申请提前毕业以后项目还有块尾巴,答应导师把项目做完再走:)就这么简单。
男人总点负点责,呵呵以下问题常被问到,我就想到哪说到哪吧。
一首先说说arm的发展可以用一片大好来形容,翻开各个公司的网站,招聘里面嵌入式占据了大半工程师职位。
广义的嵌入式无非几种:传统的什么51、avr、pic称做嵌入式微控制器;arm是嵌入式微处理器;dsp;fpga。
ARM存储器结构ARM存储器:片内Flash、片内静态RAM、片外存储器映射就是一一对应的意思。
重映射就是重新分配这种一一对应的关系。
我们可以把存储器看成一个具有输出和输入口的黑盒子。
输入量是地址,输出的是对应地址上存储的数据。
当然这个黑盒子是由很复杂的半导体电路实现的,具体的实现的方式我们现在不管。
存储单位一般是字节。
这样,每个字节的存储单元对应一个地址,当一个合法地址从存储器的地址总线输入后,该地址对应的存储单元上存储的数据就会出现在数据总线上面。
普通的单片机把可执行代码和数据存放到存储器中。
单片机中的CPU从储器中取指令代码和数据。
其中存储器中每个物理存储单元与其地址是一一对应而且是不可变的,UGG boots。
而ARM比较复杂,ARM芯片与普通单片机在存储器地址方面的不同在于:ARM芯片中有些物理存储单元的地址可以根据设置变换。
就是说一个物理存储单元现在对应一个地址,经过设置以后,这个存储单元就对应了另外一个地址了(这就是后面要说的重新映射)。
例如将0x00000000地址上的存储单元映射到新的地址0x00000007上。
CPU存取0x00000007就是存取0x00000000上的物理存储单元。
(随便举的例子为了说明道理,没有实际意义)存储器重新映射(Memory Re-Map)存储器重新映射是将复位后用户可见的存储器中部分区域,再次映射到其他的地址上。
存储器重新映射包括两个方面:1、Boot Block重新映射(关于Boot Block的相关内容看我博客中的另一篇文章)。
2、异常(中断)向量重新映射Boot Block重新映射:本来Boot Block在片内Flash的最高8KB,但是为了与将来期间相兼容,生产商为了产品的升级换代,在新型芯片中增加内部Flash容量时,不至于因为位于Flash高端的Boot Block的地址发生了变化而改写其代码,整个Boot Block都要被重新映射到内部存储器空间的顶部,即片内RAM的最高8KB。
ARM9入门学习心得分享
ARM9采用哈佛体系结构,指令和数据分属不同的总线,可以并行处理。
在流水线上,ARM7是三级流水线,ARM9是五级流水线。
由于结构不同,ARM7的执行效率低于ARM9。
平时所说的ARM7、ARM9实际上指的是ARM7TDMI、ARM9TDMI软核,这种处理器软核并不带有MMU和cache,不能够运行诸如linux这样的嵌入式操作系统。
而ARM公司对这种架构进行了扩展,所以有了ARM710T、ARM720T、ARM920T、ARM922T等带有MMU和cache的处理器内核。
本文首先介绍了ARM9的优势及特点,其次阐述了ARM9要学的内容汇总以及书籍推荐,最后介绍了ARM9入门学习心得。
ARM9的优势1)时钟频率的提高
虽然ARM7和ARM9内核架构相同,但ARM7处理器采用3级流水线的冯·诺伊曼结构;,而ARM9采用5级流水线的哈佛结构。
增加的流水线设计提高了时钟频率和并行处理能力。
5级流水线能够将每一个指令处理分配到5个时钟周期内,在每一个时钟周期内同时有5个指令在执行。
在常用的芯片生产工艺下,ARM7一般运行在100MHz左右,而ARM9则至少在200MHz以上。
2)指令周期的改进
指令周期的改进对于处理器性能的提高有很大的帮助。
性能提高的幅度依赖于代码执行时指令的重叠,这实际上是程序本身的问题。
对于采用最高级的语言,一般来说,性能的提高在30%左右。
3)MMU(内存管理单元)
ARM7一般没有MMU(内存管理单元),(ARM720T有MMU)。
ARM9一般是有MMU的,ARM9940T只有MPU ,不是一个完整的MMU。
这一条很重要,MMU单元是大型操作系统必需的硬件支持,如LINUX;WINCE等。
这就是说,ARM7一般只能运行小型的实时系统如UCOS-II,eCOS等,而ARM9无此限制,一般的操作系统都可以移植。
其实即使ARM720T能支持LINUX;WINCE等系统,也鲜有人用,因为以ARM7的运行速度跑这种大型操作系统,实在有点吃力。
再者两者的应用。