ARM嵌入式初学常见问题Word下载.docx

上传人:b****2 文档编号:5228615 上传时间:2023-05-04 格式:DOCX 页数:18 大小:34.16KB
下载 相关 举报
ARM嵌入式初学常见问题Word下载.docx_第1页
第1页 / 共18页
ARM嵌入式初学常见问题Word下载.docx_第2页
第2页 / 共18页
ARM嵌入式初学常见问题Word下载.docx_第3页
第3页 / 共18页
ARM嵌入式初学常见问题Word下载.docx_第4页
第4页 / 共18页
ARM嵌入式初学常见问题Word下载.docx_第5页
第5页 / 共18页
ARM嵌入式初学常见问题Word下载.docx_第6页
第6页 / 共18页
ARM嵌入式初学常见问题Word下载.docx_第7页
第7页 / 共18页
ARM嵌入式初学常见问题Word下载.docx_第8页
第8页 / 共18页
ARM嵌入式初学常见问题Word下载.docx_第9页
第9页 / 共18页
ARM嵌入式初学常见问题Word下载.docx_第10页
第10页 / 共18页
ARM嵌入式初学常见问题Word下载.docx_第11页
第11页 / 共18页
ARM嵌入式初学常见问题Word下载.docx_第12页
第12页 / 共18页
ARM嵌入式初学常见问题Word下载.docx_第13页
第13页 / 共18页
ARM嵌入式初学常见问题Word下载.docx_第14页
第14页 / 共18页
ARM嵌入式初学常见问题Word下载.docx_第15页
第15页 / 共18页
ARM嵌入式初学常见问题Word下载.docx_第16页
第16页 / 共18页
ARM嵌入式初学常见问题Word下载.docx_第17页
第17页 / 共18页
ARM嵌入式初学常见问题Word下载.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ARM嵌入式初学常见问题Word下载.docx

《ARM嵌入式初学常见问题Word下载.docx》由会员分享,可在线阅读,更多相关《ARM嵌入式初学常见问题Word下载.docx(18页珍藏版)》请在冰点文库上搜索。

ARM嵌入式初学常见问题Word下载.docx

嵌入式微处理器、嵌入式微控制器、嵌入式DSP(DigitalSignalProcessor)。

嵌入式微处理器就是和通用计算机的微处理器对应的CPU。

在应用中,一般是将微处理器装配在专门设计的电路板上,在母板上只保留和嵌入式相关的功能即可,这样可以满足嵌入式系统体积小和功耗低的要求。

目前的嵌入式处理器主要包括:

PowerPC、Motorola68000、ARM系列等等。

嵌入式微控制器又称为单片机,它将CPU、存储器(少量的RAM、ROM或两者都有)和其它接口I/O封装在同一片集成电路里。

常见的有HOLTEKMCU系列、MicrochipMCU系列及8051等。

嵌入式DSP专门用来处理对离散时间信号进行极快的处理计算,提高编译效率和执行速度。

在数字滤波、FFT(FastFourierTransform)、频谱分析、图像处理的分析等领域,DSP正在大量进入嵌入式市场。

4.问:

ARM单片机和哪种内核的单片机比较接近?

严格说,ARM不是单片机,是一个嵌入式的实时操作系统。

ARM(AdvancedRISCMachines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。

ARM将其技术授权给世界上许多著名的半导体、软件和OEM厂商,每个厂商得到的都是一套独一无二的ARM相关技术及服务。

所以市场上像Intel、IBM、三星电子、NEC、恩智浦和国半这样的大公司都有ARM系列,现在不存在什么ARM单片机和哪种内核的单片机比较接近的问题。

而且由于厂家购买内核后会根据自己芯片应用方向的不同,自行添加不同的外挂功能模块,所以,同样内核的芯片其提供的功能是不同的。

5.问:

ARM7TDMI-S和ARM7TDMI有何区别?

ARM7TDMI-S是ARM7TDMI的可综合(synthesizable)版本(软核)。

对应用工程师来说,除非芯片生产厂商对ARM7TDMI-S进行了裁减,否则ARM7TDMI-S与ARM7TDMI没有太大的区别,其编程模型与ARM7TDMI一致。

6.问:

LPC2104运行速度:

ARM7TDMI(-S)能提供0.9MIPS/MHz的指令执行速度,LPC2104cclk为60MHZ时指令执行速度应为0.9*60=54MIPS,这样得到一条指令的执行速度大概为0.018us。

可我用示波器观察计算得出一条指令的执行时间远远大于这个数值,大概为0.1us-0.8us(可能由于流水线的影响,指令执行时间的差别很大)。

这是什么原因?

答:

这是一个在存储器带宽足够时的平均值。

如果程序和数据均在片内RAM中,这样计算:

1.一般指令需1个主时钟时间;

2.每次跳转增加3个主时钟时间(也许是2个,需要确认);

3.从RAM中取一个操作数多增加一个主时钟时间,以此类推;

4.保存一个结果到RAM中多增加一个主时钟时间,以此类推;

5.访问片内外设,增加一个外设时钟时间。

注意伪指令ldrrn,=x需要从RAM中取一个操作数。

在Flash中如果MAM配置为最优,平均速度与在RAM中相差无几。

7.问:

LPC系列与S3C2410的启动的差异在哪?

S3C2410与LPC系列的启动的差异在S3C2410中,加电启动后,从0地址开始执行程序,(这个是ARM核的特性),那么可以将内部ROM,FLASH中的内容映射到0地址,因此一般来说Bootloader是要在这个地址上跑的。

然而LPC系列板子有一定区别,它们自己在板子加电启动后首先运行自己的Bootblock,这个Bootblock是位于片内Flash尾部的程序,它被映射到0地址,这是一个厂商提供的程序,它可以根据需要在执行完成后再重新映射0地址到其他位置去,即进行重映射,那么如果我们重映射0地址到Flash开头,就可以像S3C2410那样跑我们的Bootloader了。

关键原因是LPC采用了内存映射和重映射的机制,不同的映射可以将各自不同的中断向量(还有些文字池,共64字节)映射到0地址。

详细的内容可以参考如下文档,转载自:

有0x00000000~0x0000003F;

当芯片复位后,ARM内核的PC寄存器被复位成0,该值就是内核取指令所需的逻辑地址。

复位后,LPC-MMU首先把逻辑地址0x00000000映射到物理地址0x7FFFE000,从而启动芯片内部固化的BootBlock代码。

BootBlock代码再检查有关引脚的高低电平来决定将逻辑地址映射到物理地址0x00000000还是物理地址0x80000000。

从这里可以看出,当逻辑地址0x00000000映射到物理地址0x00000000,相当于没有LPC-MMU单元!

这就是说,如果你设计的Bootloader是从LPC2200系列ARM的内部FLASH启动的,那么就没有什么特殊性,和其他ARM一样就是了!

如果你的Bootloader是从外部FLASH启动的(也就是物理地址0x80000000开始的空间),那么就需要我这里所说的内容了。

你只要把异常向量代码和常量池(共64字节)写成如下形式即可!

不过这样的话该Bootloader只能在0x80000000的地址启动了。

此外,Bootloader需要把自己的RO段、RW段拷贝到RAM,并设置ZI段。

而这些代码都不在其编译时设置的空间运行,所以都需要使用相对当前PC寻址的指令来实现,有一定的技巧性。

最后,Bootloader还需要把自己的PC以及返回地址LR都转移到正确的运行时地址去,Bootloader从此走上阳关大道。

;

//*******************************************************************;

//64字节的映射空间开始 ResetEntry;

//32字节异常向量LDRPC,Reset_Addr;

//复位异常入口(进入SVR32模式)LDRPC,Undefined_Addr;

//未定义指令异常入口(进入UNDF32模式)LDRPC,SWI_Addr;

//软件中断异常入口(进入SVR32模式)LDRPC,Prefetch_Addr;

//预取中止异常入口(进入ABT32模式)LDRPC,DataAbort_Addr;

//数据中止异常入口(进入ABT32模式)DCD0xb9205f80;

//保留的矢量,对于LPC系列ARM的内部FLASH有特殊作用LDRPC,[PC,#-0xff0];

//中断异常入口(进入IRQ32模式)LDRPC,FIQ_Addr;

//快中断异常入口(进入FIQ32模式);

//32字节常量池Reset_AddrDCD0x80000040;

//注意这里原来是Reset_HandlerUndefined_AddrDCDUndefined_HandlerSWI_AddrDCDSWI_HandlerPrefetch_AddrDCDPrefetch_HandlerDataAbort_AddrDCDDataAbort_HandlerReserve_AddrDCD0IRQ_AddrDCDIRQ_HandlerFIQ_AddrDCDFIQ_Handler;

//64字节的映射空间结束;

//***************************************************************************;

//以下开始是系统复位处理程序Reset_Handler......;

//**************************************************************************

*;

//启动代码结束END

8.问:

ARM指令与Thumb指令的区别?

在ARM体系结构中,ARM指令集中的指令是32位的指令,其执行效率很高。

对于存储系统数据总线为16位的应用系统,ARM体系提供了Thumb指令集。

Thumb指令集是对ARM指令集的子集重新编码得到的,指令长度为16位。

通常在处理器执行ARM程序时,称处理器处于ARM状态;

当处理器执行Thumb程序时,称处理器处于Thumb状态。

Thumb指令集并没有改变ARM体系底层的程序设计模型,只是在该模型上加上了一些限制条件。

Thumb指令集中的数据处理指令的操作数仍然为32位,指令寻址地址也是32位的。

9.问:

ARM程序和Thumb程序混合使用的场合?

通常,Thumb程序比ARM程序更加紧凑,而且对于内存为8位或16位的系统,使用Thumb程序效率更高。

但是,在下面一些场合下,程序必须运行在ARM状态,这时就需要混合使用ARM和Thumb程序。

强调速度的场合,应该使用ARM程序;

有些功能只能由ARM程序完成。

如:

使用或者禁止异常中断;

当处理器进入异常中断处理程序时,程序状态切换到ARM状态,即在异常中断处理程序入口的一些指令是ARM指令,然后根据需要程序可以切换到Thumb状态,在异常中断程序返回前,程序再切换到ARM状态。

ARM处理器总是从ARM状态开始执行。

因而,如果要在调试器中运行Thumb程序,必须为该Thumb程序添加一个ARM程序头,然后再切换到Thumb状态,执行Thumb程序。

10.问:

ARM处理器运行模式有哪些?

ARM微处理器支持7种运行模式,分别为:

(1)用户模式(usr):

ARM处理器正常的程序执行状态;

(2)快速中断模式(fiq):

用于高速数据传输或通道管理;

(3)外部中断模式(irq):

用于通用的中断处理;

(4)管理模式(svc):

操作系统使用的保护模式;

(5)数据访问终止模式(abt):

当数据或指令预取终止时进入该模式,用于虚拟存储及存储保护;

(6)系统模式(sys):

运行具有特权的操作系统任务;

(7)未定义指令中止模式(und):

当未定义指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。

11.问:

LPC17xx系列最大工作速率是多少?

做为内核为ARMCotrtexM3的MCU,它具有三种总线:

系统总线,I-code总线及D-code总线,我是否可以将I-code总线及D-code总线配置的比系统总线慢?

LPC17xx系列最大工作速率为100MHz;

这三种总线须保持相同工作速率,不能单独置。

12.问:

当我用IAP对片内FLASH编程时出现FLASH损坏的情况,但ISP仍能正常工作,这是什么原因?

有些IAP命令需要用系统时钟频率做为参数,当我使用PLL时,这个频率参数该如何设置?

在LPC17xx系统中,哪个引脚是用于进入ISP(在线编程)模式?

IAP的复制RAM至FLASH命令时需要系统时钟频率做为一个参数,要注意这个参数。

如果这个参数不正确可能会造成FLASH损坏。

如果应用中使用了PLL,那么以这个PLL的输出做为参数,单位应为KHz。

在LPC17xx系统中,引脚P2.10用于进入ISP模式。

13.问:

在LPC17xx上有多少引脚可用做外部中断?

有多少种复位类型?

用软件复位芯片的最佳方法是哪种?

LPC17xx在0端口,2端口及EXTINTx的所有引脚都可用做外部中断。

另外,ARMCortex-M3NMI(Non-Maskableinterrupt,不可屏蔽中断)的输入口的可选功能也能用于中断连接。

LPC17xx有4种复位方式:

RESET脚复位,看门狗复位,上电复位和掉电检测(BrownoutDetect--BOD)复位。

欲以软件方式复位芯片的话,需要用看门狗复位方式。

14.问:

LPC17xx可否能够经由以太网MACC将其从掉电状态唤醒?

以太网模块支持通过局域网唤醒的电源管理功能。

主系统可以掉电,甚至包括部分以太网模块。

以太网模块持续监听局域网上的数据包,当接收到特定形式的数据包并经过以太网模块识别出后,该数据包就可用于唤醒主系统。

唤醒系统通过一个中断产生效果。

当检测到一个唤醒事件后,寄存器IntStatus的WakeupInt位被设置,从而触发产生一个中断,这个中断可用于系统电源管理逻辑中以唤醒系统。

在掉电状态,产生局域网唤醒的数据包用完即丢。

15.问:

GPIO引脚的触发速度是指的什么?

标准GPIO口的触发速度是系统时钟/14,如果主频为72MHz,那么触发速度约为5MHz。

快速GPIO口的触发速度是系统时钟1/4,如果主频为72MHz,那么触发速度约为18MHz。

8.2有关嵌入式开发工具问答

16.问:

如何选择ARM的软件集成开发环境?

目前,流行的ARM软件集成开发环境有ADS1.2、RVDS、KeiluV3、WINARM和IAR等。

对于51单片机应用开发工程师来说,Keil开发环境应该应用得比较熟练,若采用KeiluV3进行ARM软件开发,应该可以快速上手。

但是,并不推荐ARM初学者选择KeiluV3进行ARM软件开发,主要是基于以下2个原因:

(1)KeiluV3是第三方ARM软件集成开发环境,目前支持的ARM芯片种类还不多,所带的编译器也并不完善;

(2)由于KeiluV3为了方便用户的开发,提供了现成的ARM启动文件,换句话说,它屏蔽了ARM开发中的一个重要内容——启动代码的编写,而这一点对初学者来说应该是非常重要的内容。

IAR目前国内应用的人还不多,相关资料也不是很多,也不推荐初学者使用。

ADS1.2集成开发环境是ARM公司推出的ARM核微控制器集成开发工具。

它支持ARM10之前的所有ARM系列微控制器,支持软件调试及JTAG硬件仿真调试,支持汇编、C、C++源程序;

具有编译效率高、系统库功能强等特点;

可以在Windows98、Windows2000、WindowsXP以及RedHatLinux上运行。

RealView开发套件(RVDS)是ARM公司继SDT与ADS1.2之后主推的新一代开发工具,RVDS4.0标准版适用于所有的ARM7、ARM9、ARM10、ARM11、MP-Core、SCx00、Cortex-M3、Cortex-M1、Cortex-R4F和Cortex-A8处理器,08年10月新推出的RVDS4.0专业版除了延伸支持到Cortex-A9以外,还具有独特的运行时优化功能、ARM向量化NEON编译器、ARMProfiler和ARM超快速模块(ARM926EJ-S、ARM1136J(F)-S、ARM1176JZ(F)-S、Cortex-R4、Cortex-A8和单核Cortex-A9)。

WINARM(GCCARM)是一个免费的开发工具。

WinARM可以在http:

//www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/下载得到,里面除了包含C/C++编译器——GCC,汇编、连接器——Binutils,调试器——GDB等工具,也包括了通过GDB使用WigglerJTAG的软件——OCDRemote。

所以,所需要的工具都包括在了这个WinARM发行版中,就可以比较省心了,基于以上原因,推荐ARM初学者使用ADS1.2或RVDS集成开发环境进行ARM开发。

关于ADS1.2与RVDS集成开发环境的使用,初学者可以参看相应集成开发环境自带的用户手册。

17.问:

C语言和汇编语言在开发单片机时各有哪些优缺点?

汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。

其主要优点是占用资源少、程序执行效率高。

但是不同的CPU,其汇编语言可能有所差异,所以不易移植。

C语言是一种结构化的高级语言。

其优点是可读性好,移植容易,是普遍使用的一种计算机语言。

缺点是占用资源较多,执行效率没有汇编高。

对于目前普遍使用的RISC架构的8位MCU来说,其内部ROM、RAM、STACK等资源都有限,如果使用C语言编写,一条C语言指令编译后,会变成很多条机器码,很容易出现ROM空间不够、堆栈溢出等问题。

而且一些单片机厂家也不一定能提供C编译器。

而汇编语言,一条指令就对应一个机器码,每一步执行什幺动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。

18.问:

单片机开发,一定要会C吗?

而汇编语言,一条指令就对应一个机器码,每一步执行什么动作都很清楚,并且程序大小和堆栈调用情况都容易控制,调试起来也比较方便。

所以在资源较少单片机开发中,我们还是建议采用汇编语言比较好。

而C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。

C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。

C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。

此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。

因此,使用C语言进行程序设计已成为软件开发的一个主流。

用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。

综上所述,用C语言进行单片机程序设计是单片机开发与应用的必然趋势。

所以作为一个技术全面并涉足较大规模的软件系统开发的单片机开发人员最好能够掌握基本的C语言编程。

19.问:

当开发一个较复杂而又开发时间短的项目时,用C还是用汇编开发好?

对于复杂而开发时间紧的项目时,可以采用C语言,但前提是要求对该MCU系统的C语言和C编译器非常熟悉,特别要注意该C编译系统所能支持的数据类型和算法。

虽然C语言是最普遍的一种高级语言,但不同的MCU厂家其C语言编译系统是有所差别的,特别是在一些特殊功能模块的操作上。

如果对这些特性不了解,那调试起来就有得烦了,到头来可能还不如用汇编来的快。

20.问:

RealViewMDK调试有哪些技巧?

下面从Symbol窗口、逻辑分析仪和Watch窗口三个方面来介绍一下调试中的小技巧。

1、Symbol窗口Symbol窗口可以查看虚拟寄存器和外围特殊寄存器的名称、地址、类型。

当我们想要在内存窗口中查看外围寄存器的值时。

是不是需要去手册上查一下这个寄存器的地址呢。

答案是――可以,但有个更方便直接的方法,就是从Symbol窗口可以查到所有外围特殊寄存器的地址和类型。

在调试时打开Symbol窗口的方法:

单击MDK菜单View然后点击[img],在工程工作区左边即可看到该窗口。

2、逻辑分析仪逻辑分析仪可跟踪全局变量、虚拟寄存器和外围特殊寄存器的值。

1、我们可能需要I/O端口的数据寄存器某位的值在逻辑分析仪上显示出来。

一种方法是在逻辑分析仪的Setup对话框里通过Mask来屏蔽那些不需要显示的位。

还有一种更简单的方法,就是在寄存器名后面加上后缀“.位序”。

比如A口有16个引脚。

其对应的数据寄存器为PORTA(16位)。

现在需要跟踪引脚7的值。

则只需添加信号PORTA.7即可,系统会自动设置Mask值。

实际上,任何跟踪的信号,只要是整型数据都能使用上面提供的方法。

这对于位显示非常直观,简捷。

2、当我们需要在逻辑分析仪中显示Symbol窗口

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2