1嵌入式系统开发方法与调试.docx

上传人:b****8 文档编号:10711276 上传时间:2023-02-22 格式:DOCX 页数:17 大小:24.27KB
下载 相关 举报
1嵌入式系统开发方法与调试.docx_第1页
第1页 / 共17页
1嵌入式系统开发方法与调试.docx_第2页
第2页 / 共17页
1嵌入式系统开发方法与调试.docx_第3页
第3页 / 共17页
1嵌入式系统开发方法与调试.docx_第4页
第4页 / 共17页
1嵌入式系统开发方法与调试.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

1嵌入式系统开发方法与调试.docx

《1嵌入式系统开发方法与调试.docx》由会员分享,可在线阅读,更多相关《1嵌入式系统开发方法与调试.docx(17页珍藏版)》请在冰豆网上搜索。

1嵌入式系统开发方法与调试.docx

1嵌入式系统开发方法与调试

嵌入式系统开发

方法与调试

ARM体系结构

硬件工程师的成长之路

•8位单片机——8051

•汇编言、(交叉编译器、原理图&PCB…

•16位处理器——DSP

•C语言、流水线、锁频环、哈佛结构…

•可编程逻辑器件——GAL、CPLD、FPGA

•硬件描述语言、数字电路的根本…

作为当代的一个硬件工程师,这些词语并不陌生,这可能是大多数做硬件人的成长之路。

嵌入式处理器时代

常见的嵌入式处理器核:

•ARM

•MIPS

•PowerPC

•68K

•x86

冯·诺依曼体系结构模型

指令寄存器

控制器

数据通道

输入输出中央处理器存储器程序指令0

指令1指令2指令3指令4数据

数据0数据1数据2

哈佛体系结构

指令寄存器

控制器

数据通道

输入输出中央处理器

程序存储器

指令0

指令1

指令2

数据存储器

数据0

数据1

数据2

地址

指令

地址

数据

CISC和RISC

CISC:

复杂指令集(ComplexInstructionSetComputer具有大量的指令和寻址方式

8/2原则:

80%的程序只使用20%的指令

大多数程序只使用少量的指令就能够运行。

RISC:

精简指令集(ReducedInstructionSetComputer在通道中只包含最有用的指令

确保数据通道快速执行每一条指令

使CPU硬件结构设计变得更为简单

流水线

流水线技术:

几个指令可以并行执行

提高了CPU的运行效率

内部信息流要求通畅流动

译码取指执行add译码取指执行sub译码取指执行cmp

时间Add

Sub

Cmp

高速缓存(CACHE

1、为什么采用高速缓存

微处理器的时钟频率比内存速度提高快得多,高速缓存可以提高内存的平均性能。

2、高速缓存的工作原理

高速缓存是一种小型、快速的存储器,它保存部分主存内容的拷贝。

CPU高

CACHE

主存

数据

数据

地址

说说ARM

ARM

•ARM(AdvancedRISCMachines公司是全球领先的16

/32位RISC微处理器知识产权设计供应商。

•ARM公司通过转让它的高性能、低成本、功耗低的RISC

微处理器、外围和系统芯片设计技术给合作伙伴来生

产各具特色的芯片。

•ARM公司已成为移动通信、手持设备、多媒体数字消费

嵌入式解决方案的RISC标准。

ARM体系结构版本-1

•Version1(obsolete

•基本数据处理

•字节,字以及多字load/store

•软件中断

•26bit地址总线

•Version2(obsolete

•Multiply&Multiply-accumulate•支持协处理器

•支持线程同步

•26bit地址总线

ARM体系结构版本-2

zV3版本推出32位寻址能力,结构扩展变化为

T—16位压缩指令集

M—增强型乘法器,产生全64位结果(32X32⇒64or32X32+64⇒64zV4版本增加了半字load和store指令

zV5版本改进了ARM和Thumb之间的交互,结构扩展变化为:

E---增强型DSP指令集,包括全部算法操作和16位乘法操作

J----支持新的JAVA,提供字节代码执行的硬件和优化软件加速功能

ARM家族的更新

感受ARM的几个突出优点

•全新设计的RISC结构的32位处理器

•因为是全新的设计,开始就是32位,没有历史遗留问题(比如,x86。

所以,更便于对处理器结构进行优化

•价格低廉

•ARM公司不生产芯片,专心研究处理器内核的解决方案把ARM的核授权给各个IC制造公司,各个公司生产自己的芯片,分工明确,

体系统一,导致ARM处理器的价格低廉

•ARM公司的合作伙伴众多

•从IC制造到操作系统,可以提供给用户大量的工具和开发资料,推广ARM的应用

•低功耗

ARM指令的特点

•指令长度固定,所有的ARM指令长度都是32bit•结构简单,更有利于处理器的优化设计

•会引起指令的密度降低,增加系统的总线的负担(对

于存储器的需求的增加不予考虑,因为,现在的存储

器可以做的很大,也很便宜。

所以,产生了16bit

的Thumb指令。

可以弥补一些不足

•3寄存器指令操作,所有的指令都可条件执行,避免条件跳转中的流水线的停顿,应用更灵活(参考《ARMSoc体系结构》

THUMB指令集(‘T’

THUMB指令集:

32位ARM指令集的子集,按16

位指令重新编码(可看作ARM指令压缩形式的子集代码尺寸小(upto40%compression

简化设计

工作状态之间的切换

•ARM7TDMI处理器有两种工作状态:

ARM-32-bit,按字排列的ARM指令集

Thumb-16-bit,按半字排列的Thumb指令集•ARM7TDMI核的操作状态可能通过BX指令(分支和交换指令在ARM状态和Thumb状态之间切换

例:

从ARM状态切换到Thumb状态:

LDRR0,=Label+1

BXR0

从Thumb状态切换到ARM状态:

LDRR0,=Label

BXR0

存储器模式

•大端模式

字数据的高位字节存储在低地址中字数据的低字节则存放在高地址中

•小端模式

低地址中存放字数据的低字节高地址中存放字数据的高字节

31

2423

1615

87

字地址

1110988765443210

低地址

高地址

31

2423

1615

87

字地址

8910118456740123

低地址

高地址

ARM上编程值得注意的地方(1•ARM是一个32位处理器,通常,如果没有特殊的要求,C语言中的结构体(struct要求4字节对齐的。

•在实际的代码中(比如,TCP/IP协议,会有如下两种问题:

•要求多个数据是紧缩在一个4字节中

•有的4字节的数据,但是,数据在内存中并不是4字节对齐存储的

字节对齐问题的解决

•通过使用紧缩数据相关的关键字,可以让C语言的结构体以紧缩的方式存储(并不是每个结构体成员都是4字节对齐,比如在ARMSDT中,使用__packed关键字定义的结构体(struct编译的时候,就可以生成紧缩的数据段。

代码A:

struct_A

{

unsignedchartime;

unsignedintdata;}A;代码B:

__packedstruct_B

{

unsignedchartime;

unsignedintdata;}B;

比如下面ARMSDT中的C代码中两段结构体的定义:

紧缩的结构体

•结构体A是成员4字节的存储方式(sizeof(structA==8,

•结构体B是成员非4字节对齐的存储方式(sizeof(structB==5。

ARM的问题

•然而,作为32位处理器,和x86不同的是,ARM不支持非对齐字节的数据传输。

就是说,在C语言里,一旦使用了32位的指针操作一个非4字节对齐的数据,ARM就会陷入一个异常。

•这个问题将会给一些软件的移植,带来很多麻烦,一定要小心的处理这些问题。

比如,如果这么访问:

Bb;

inti=0;

b.data=i;//错误

这里看上去很正常的C代码,在ARM中将产生一个异常

因为结构b中的data成员不是字对齐的。

有时类似的错误在编译的时候是无法发现的,在运行的时候,ARM7不能进行非对齐的字传输,所以,就会进入一个ABORT异常。

其实是因为对应汇编

STRRd,[xxx]

LDRRd,[xxx]

指令中的有效地址,必须是4字节对齐的。

非对齐字能否传输?

在现在常用的ARM版本中,都不支持非对齐字的传输,主要包括:

ARMv3、ARMv4、ARMv5及相关的系列产品。

在ARMv6中,开始支持非对齐字的传输。

ARM上编程值得注意的地方(2流水线的影响

•通常是在汇编中才能遇到的问题

•比如:

ARM7中的三级流水线导致,所读取的PC(程序计数器指针,总是比当前执行的汇编代码的地址多8

ARM7TDMI的指令流水线

取指译码执行从存储器取指

指令所用的寄存器译码

从从寄存器组中读寄存器移位和ALU操作

把寄存器写回到存储器组

每条指令可以分3个阶段执行

ARM单周期指令3段流水线操作

取指

译码执行取指

译码执行取指译码执行

t

指令

123

注:

程序计数器PC指向正在取指的指令而不是正在执行的指令

简单的例子

movpc,pc

这条指令将使程序跳转到了当前指令的下下条指令(既跳过一条指令执行程序

Subpc,pc,#4

执行的是下一条指令。

Subpc,pc,#8

则是,一条死循环。

中断中的情况

SUBSpc,lr,#4

这条指令的作用是ARM7中断子程序的返回

在ARM7进入中断异常(主要是IRQ或者FIQ时,lr中装载的在进入中断前pc指针指向的指令。

因为,IRQ(或者FIQ异常发生在流水线的最后的阶段,所以,当时的PC是当前的指令地址+8。

也就是lr中的地址,是要返回的地址+8,所以,lr-4,就是中断发生时的下一条指令,即中断返回的位置。

这个具体的可以参考ARM7TDMIDataSheet

感受ARM

使用ARM的一些感受,和一些值得注意的地方

•以ARM7TDMI和ARM920T内核为例

•以S3C44B0、S3C4510B和S3C2410X处理器为基础•在UP-NETARM3000等平台上验证

Bank的划分

•面对不同速度、总线宽度的外设,通常,嵌入式处理器都把外部总线分成不同的Bank空间,对应不同的地址。

•不同的Bank可以有不同的配置,或者对应的功能也不一样,支持的外设也不同。

•比如:

S3C44B0的Bank0-5支持,ROM、SRAM等那些线性

寻址的存储器或者外设;Bank6-7,还可以支持SDRAM、

DRAM等。

而且,每一个Bank都可以配置成8-32bit的总

线,大端(bigendian或者小端(littleendian等

嵌入式处理器的启动过程(1通常系统上电(或者复位以后,程序从地址空间的0x0开始

•即PC(程序计数器指针,指向0x0。

从这个地址开始读取指令并运行。

通常这个地址对应的是Bank0

嵌入式处理器的启动过程(2因为系统是从bank0上引导的,所以,在Bank0上连接保存有启动代码的FlashROM,这就是我们常说的BootROM

BootROM要实现的主要工作(1

•硬件系统自检

•配置其他Bank或者端口、外设等工作模式

•处理中系统的中断

•在不支持remap的处理器中,中断必然要经过BootROM

的空间,这时,BootROM需要处理的任务就是把固定的中断向量映射到一个可编程的中断处理子程序的地址

BootROM要实现的主要工作(2

•引导操作系统

•系统配置完成以后,BootROM需要把操作系统(或者其他程序装载到SDRAM(就是系统的RAM区,然后,把PC指针指向程序的RAM空间,使操作系统启动,这就是

引导。

因此,BootROM中的代码有常称之为Bootloader

BootROM要实现的主要工作(3

•Flash(BootROM编程

•对引导Flash(或者其他的非易失性存储器编程,通

过串口或者以太网口下载编译成功的操作系统或者应用程序,甚至BootROM本身。

Note:

要想实现BootROM的自编程,必须让Boot程序是在RAM中运行

BootROM的烧录

BootROM使用来配置系统启动的。

没有BootROM,系统就不能配置,更不能启动。

BootROM可以自编程,但是,第一次系统启动用的BootROM是如何烧录的呢?

•使用插座连接Flash配合编程器

•通过ARM的JTAG接口

ARM的C编译器的选择

常见的ARM的C编译器主要有,

•SDT2.5(ARMSoftwareDevelopmentToolkit•ADS1.1/1.2(ARMDeveloperSuite•RealViewDeveloperSuite

•arm-elf-gcc、arm-linux-gcc

SDT集成开发环境

•用来编写、编译和调试ARM系列的RISC处理器的应用程序。

可以开发C,C++或ARM汇编程序

•它的WINDOWS开发工具有两个:

•theARMProjectManager(APM

•TheARMDebuggerforWindows(ADW

ARMSDT完全适合uCOS-II的编译。

SDT支持ARM公司的RDI调试协议,配合JTAG可以很容易的实现源码级的程序调试

ARM调试结构——JTAG

ARM的JTAG调试结构

Angel

JTAG

宿主机调试器

•宿主机调试器通过固定的协议控制下位机(协议转换器。

比如,SDT中通过Angel协议或者第三方调试器所提供的协议

•宿主机调试器只发送宏观的命令,比如:

程序运行、终止。

读内存、ARM寄存器等

•通讯的介质可以是串口、并口、以太网、USB等

JTAG与Angel

•JTAG调试:

协议转换器解释上位机传送过来的命令,通过JTAG控制ARM执行

•Angel调试:

协议转换器可以直接做为目标板的Firmware的一部分。

直接执行从宿主机传送过来的调试命令;并回送相应的数据。

•Angel可以节省专门的JTAG仿真器,但是,它需要软件,或者是嵌入式操作系统的支持,做不到完全的实时仿真。

而JTAG仿真是通过硬件和控制ARM的EmbeddedICE实现的,可以做到实时仿真。

UARMJTAG的调试结构

什么是JTAG?

•JTAG是JointTestActionGroup的缩写;

是IEEE1149.1标准

•JTAG的建立使得集成电路固定在PCB上,只通过边界扫描便可以被测试

•在ARM7TDMI处理器中,可以通过JTAG直接控制ARM的内部总线,IO口等信息,从而达到调试的目的

JTAG的典型接口

•TMS:

测试模式选择(TestModeSelect,通过TMS信号控制JTAG状态机的状态

•TCK:

JTAG的时钟信号

•TDI:

数据输入信号

•TDO:

数据输出信号

•nTRST:

JTAG复位信号,复位JTAG的状态机和内部的宏单元(Macrocell

JTAG的状态机(TAP

JTAG链的组成

ARM7TDMI的JTAG标准链(1

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

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1