嵌入式开发交流网论坛

标题: 计算机3级考试嵌入式系统开发技术知识点总结 [打印本页]

作者: 若七年    时间: 2019-1-23 17:08
标题: 计算机3级考试嵌入式系统开发技术知识点总结
[attach]24277[/attach]



[attach]24278[/attach] 嵌入式系统

嵌入式系统上的软件具有结构精简,代码轻量化,占用存储资源少的特点。


嵌入式系统和计算机操作系统的共同特征是:引导加载程序、外设驱动程序、操作系统、文件系统、网络协议栈、图形用户界面、数据库。

嵌入式系统应用开发工具的主要目的:提高开发质量,缩短开发周期,降低开发成本。

按照软硬件技术的复杂程度进行分类,可以把嵌入式系统分为:高端系统、终端系统和低端系统三大类。


仿真平台指嵌入式系统开发中使用的虚拟机管理软件、仿真软件或者指令集模式器


对应内存容量而言1KB = 1024B,对应外存(磁盘、U盘)等容量而言,1KB=1000B


OS装载方式:串口、以太网和USB装载。



嵌入式应用程序经过交叉工具链生成映像文件后,需要下载到目标机进行调试。


调试完毕后映像文件必须有专用工具烧写到ROM中去,这种烧写工具俗称编程器!

文本根据排版格式可分为:纯文本和丰富文本。windows环境下,txt就是纯文本。相对于线性文本,超文本按着网状结构组织信息。WWW网页是最为常见超文本。


当前速度最快的CPU已经超过10GHz。



嵌套向量中断控制器缩写为NVIC



GCC是GNU套件的编译链接器,能编译C语言,汇编语言。



GDB调试下,file命令是装入需要调试的可执行文件run命令执行当前被调试的程序



源文件到可执行文件的步骤:预处理->编译->汇编->连接

前向通道和后向通道
前向通道 - 输入接口,A/D
后向通道 - 输出接口,D/A



AX88796芯片内部寄存器的地址范围:0x10000000 ~ 0x100003FF

[attach]24279[/attach] 嵌入式系统硬件的逻辑组成

硬件主体中央处理器和存储器,他们通过IO接口或者IO设备与外部世界联系,并借助总线相互连接


中央处理器主要由运算器、控制器、寄存器和高速缓冲区(cache)组成

[attach]24280[/attach] 嵌入式系统的特点





[attach]24281[/attach] 嵌入式系统的CPU特点



[attach]24282[/attach] CPU

嵌入式系统的CPU主要使用的有DSP、RAM以及FPGA。



DSP介绍





[attach]24283[/attach] 嵌入式开发流程

需求分析和规格说明 -> 系统设计 -> 构件设计 -> 系统集成与测试



测试的目的是验证模块/系统的功能和性能,以及时发现错误



基于嵌入式WEB的应用系统中,构件设计阶段需要设计支持以太网通信的电路,包括以太网控制电路和以太网驱动电路。AX8879芯片内部寄存器的读/写地址,其首地址一般是0x1000 0000

[attach]24284[/attach] 嵌入式开发特点






[attach]24285[/attach] 嵌入式系统开发调试工具






[attach]24286[/attach] GPIO



GPIO引脚一般是多功能复用的,具有0态,1态和高阻态。



作为输入接口时一般具有缓冲功能,作为输出接口时一般具有锁存功能。



GPIO可以实现并行IO,SPI、UART、I2C都是串行。

[attach]24287[/attach] UART



UART由发生器、接收器、控制单元以及波特率发生器等组成。


可实现全双工通信!


RAM芯片中的UART收发信息时,可以采用FIFO,也可以采用普通模式


一般接收和发送缓冲区的FIFO字节数一样的,长度可编程选择4B、8B、16B、64B。


UART传送消息的格式是以起始位开始以停止位结束


UART传送信息时,一次可传输的数据位可以是5,6,7,8位,由编程决定


基于UART可组成RS-232接口


RS232 - 最远15m


RS485 - 最远1.2k

RAM实现485总线的功能,需要采用
S3C2410芯片内部的UART部件外加转换芯片等来实现。在软件设计时,初始化波特率9600bps,数据格式格式为:8位数据位,无数据检验位,1位停止位。那么1s时间内最多传输960个字节。注意计算还得加上起始位和停止位)

[attach]24288[/attach] CAN








[attach]24289[/attach] 键盘

8个GPIO脚最多构成64个按键的键盘

矩阵键盘通常有行扫描法和反转法读取按键的特征值(还有一种方法叫做中断方式)

[attach]24290[/attach] 嵌入式处理器内核的分类

按照字长可以分为:8/16/32/64 位结构


按照存储可以分为:冯诺依曼和哈佛(程序和数据分开存储)结构


按照指令集可以分为:CISC、 RISC结构


CISC(complex instruction set computer 复杂指令集)


RISC(reduced instruction set computer 精简指令集)

[attach]24291[/attach] SOC片上系统

SOC已成为嵌入式处理器芯片的主流发展趋势


它是集成电路进入深亚微米时代的产物


既能把数字电路也能把模拟电路集成到单个芯片上


包含数字电路、模拟电路以及射频电路


单个芯片即可完成采集、转换、存储、处理和I/O等多种功能


SOC有通用SOC芯片和专用SOC芯片之分


专用SOC芯片按其工艺分为定制芯片和现场可编程芯片两类

[attach]24292[/attach] 集成电路

集成电路有小规模(SSI)、中规模(MSI)、大规模(LSI)、超大规模(VLSI)和极大规模(ULSI)组成,嵌入式处理芯片一般属于VLSI和USLI


集成电路大多是在硅衬底上制作,硅衬底是单晶硅锭经切割,研磨和抛光而成的圆形薄片。


集成电路中的电路及电子元件,需要反复交叉氧化、光刻、掺杂和互连等工序才能制成。

[attach]24293[/attach] 嵌入式最小系统组成

嵌入式系统一般包括嵌入式
处理器时钟电路电源电路复位电路存储器调试测试接口

[attach]24294[/attach] JTAG调试技术

JTAG标准中规定的TAP接口具有
5根信号线

构建一个宿主机 - 目标机的开发环境,若目标机是裸机,那么为了调试和下载软件需要将调试仿真器连接到目标机的
JTAG接口!


JATG是一种嵌入式测试技术,大多数嵌入式CPU、DSP、FPGA器件都支持JTAG


JTAG允许多个芯片的边界扫描寄存器BSR通过JTAG接口串联在一起,实现对多个器件的测试


通过JTAG可以实现在线编程功能

[attach]24295[/attach] 主频时钟

0.01s基准定时时间选用S3C2410芯片内部的Timer0部件产生。若系统的主频参数PCLK=264MHz,分频器选择16,预分频系数选择为3,那么,Timer0的计数常数为:41250


计算方法:定时器输入时钟频率 = PCLK/(预分频系数+1)/(分割器值),计数常数 = 定时间间隔/(1/定时器输入时钟频率)


带宽 = 总线频率 × 数据线宽度 / 8 × 次数 / 周期

[attach]24296[/attach] 板级升级包(BSP)

引导加载程序、初始化程序、设备驱动程序、配置文件



含有电路板的初始化程序


所有与特定电路板上硬件相关的功能都集成在板级支持包的库里


操作系统的上层代码通过板级支持包访问底层硬件

[attach]24297[/attach] ARM

单指令周期流水线技术是RAM处理器的技术特征。


RAM都是RISC,但是存储结构有的是哈佛结构,有的是冯诺依曼结构。


PowerPC、MC68K、MIPS都是RISC,哈佛结构!

Cortex 系列分为A-R-M ,A系列是面向尖端虚拟内存的操作系统和用户应用,R系列是针对实时系统,M系列是对微控制器。 Cortex - M3系列是哈佛结构。


RAM内部一般有:UART/I2C/SPI/CAN/USB/Ethernet等多个互连通信组件


RAM处理器共37个,包括31个通用寄存器(含PC)和6个状态寄存器


[attach]24298[/attach] RAM异常


将CPRS的值保存到将要执行的异常中断对应的SPSR中



设置CPSR的相应位



断点地址保存到R14



PC赋值,转入向量地址

[attach]24299[/attach] ADS

按照存储区域类型划分为3类,RO段,RW段,ZI段,RO段是指代码存储区和常数存储区,具有只读属性


可执行输出文件有3个生成目标:Debug、Release、DEbugRel


工程项目按照一定的逻辑来分组管理文件:


文件映射关系较简单时:使用编译、链接选项来确定输入文件的连接关系


地址映射关系较复杂时:使用scatter(分散加载)格式的文件来确定输入文件的连接关系

[attach]24300[/attach] RVDS

RVDS开发工具套件中,主要包括
工程管理器编译连接器调试器指令集仿真器。调试器支持硬件在线调试和软件仿真调试

[attach]24301[/attach] 电源管理模块




正常模式下,电源管理模式为内核及RAM芯片内部所有硬件组成提供时钟源,用户可以通过软件控制暂时不用的内置硬件组件处于关闭状态降低功耗。

[attach]24302[/attach] 硬件抽象层HAL

向操作系统内核提供了访问硬件底层的函数接口


嵌入式软件中直接访问底层硬件的例程集合


增加的HAL位于硬件电路板和操作系统内核之间


嵌入式电路板的最基本软件


HAL函数是移植操作系统的基础


HAL**隐藏了不同硬件平台的差异性**,从而改善了操作系统的可移植性!

[attach]24303[/attach] AMBA总线

RAM的总线结构成为 AMBA -先进微控制器总线结构(一种开放式总线结构)


从1995的AMBA1.0到目前的AMBA4.0共四个版本!


RAM7 - AMBA1; RAM11 - AMBA2


按照AMBA总线规范,基于RAM内核的嵌入式处理芯片采用系统总线外围总线两层结构的方式构建片上系统


连接系统总线的高带宽组件(AHB接口)主要包括:电源管理和时钟控制器,测试接口JTAG),外部存储器控制接口,DMA控制器,USB主机,中断控制器。(可以看出大多数为控制器)


RTC是与外围总线(APB接口)连接的硬件组件


[attach]24304[/attach] MMU

MMU,内存管理单元,它是用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权。



虚拟地址到物理地址的转换通过查找页表来完成,每次在访问内存时先插TLB,查不到再到内存中查整个页表

[attach]24305[/attach] ARM7 ≠ ARMv7

RAM7 - 冯诺依曼的结构。 RAM9~RAM11 采用哈佛结构!

ARMv7是一种构架。ARM7是一种处理器型号,ARM7(冯诺依曼结构)是在ARMv4构架上设计出来的处理器。RAM11(ARMv6架构)之后便是以Cortex(ARMv7架构)来命名了!

ARM7没有MMU(内存管理单元),只能叫做MCU(微控制器),不能运行诸如Linux、WinCE(大型嵌入式操作系统)等这些现代的多用户多进程操作系统,因为运行这些系统需要MMU,才能给每个用户进程分配进程自己独立的地址空间。ucOS、ucLinux这些精简实时的RTOS不需要MMU,当然可以在ARM7上运行


ARM9、ARM11,是嵌入式CPU(处理器),带有MMU,可以运行诸如Linux等多用户多进程的操作系统,应用场合也不同于ARM7。


此外,Cortex-M系列还细分为M0、M3、M4和超低功耗的M0+,用户依据成本、性能、功耗等因素来选择芯片。


Cortex-M系列(ARMv7架构)的指令集只有Thumb-2。

[attach]24306[/attach] ARM处理器 ≠ ARM处理器核





[attach]24307[/attach] RAM常考寄存器





[attach]24308[/attach] SP寄存器


SP有两个,分别为R13(MSP)和R13(PSP)即主堆栈指针(MSP)和进程堆栈指针(PSP),但在同一时刻只能有一个可以看到,这也就是所谓的“banked”寄存器。



这些寄存器都是32位的。

[attach]24309[/attach] CPSR寄存器

CPSR(当前程序状态寄存器)在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。



RAM中表示程序状态的寄存器是CPSR,其中状态位T的作用是在RAM状态与Thumb状态间进行切换,当T = 1时处理器处于的状态是Thumb状态。


N为符号标志位 - N=1表示运算结果为负,否则运算结果为正


F为禁止快读中断为 - F=1表示禁止快速中断控制位,否则允许!


V为溢出标志位,等于1表示溢出


Z为全0标志,运算结果为0

[attach]24310[/attach] SPSR寄存器

每一种处理器模式下(看下面的其中运行模式)都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)。



当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断退出时,可以用SPSR来恢复CPSR


由于用户模式和系统模式不是异常中断模式,所以他没有SPSR。当用户在用户模式或系统模式访问SPSR,将产生不可预知的后果。

[attach]24311[/attach] 控制寄存器和数据寄存器

控制寄存器是4个字节,比如端口E的控制寄存器
rGPECON = 0x00005555



数据寄存器是2个字节,比如端口E的数据寄存器rGPEDAT=0x0020

关于赋值,也写一个小例子

rGPDCON = ((rGPDCON | 0x00005555) & 0xFFFF5555);//GPD0~GPD7配置为输出模式

先置位,然后再清零。

[attach]24312[/attach] ARM微处理器的七种运行模式






[attach]24313[/attach] 经典RAM的七种异常







[attach]24314[/attach] IRQ

IRQ异常对应的异常向量地址为:
0x00000018
IRQ异常向量地址和下一个异常向量地址之间的间隔为
4个字节

复位异常的异常向量地址是0x00000000。系统上电复位后,将从该地址处执行程序,RAM9的体系结构规定的各异常向量地址间隔通常是4个字节,以此复位异常向量地址处通常存储一条分支指令

[attach]24315[/attach] S3C2410必备知识

S3C2410拥有2个串口,UART0/UART1


控制组件包括存储器控制器、总线控制器、外部主控器、NAND FLASH(以页为单位进行闪存)


存储器控制器提供访问外部存储器所需的存储器控制信号,支持大小端模式,地址空间供1GB,8个BANK,每个BANK128MB。


以ARM芯片为信合的嵌入式系统其I/O与存储器采用统一编址的方式,并不像×86那样采用I/O映射编址(独立编址)


只有BANK0是总线16、32位的访问,其他BANK均可以进行8、16、32位的访问


GPIO 有GPIOA~H


哈佛体系结构,数据与程序存储分开


哈佛体系结构,数据与程序存储分开


内部集成ADC

[attach]24316[/attach] 矩阵按键代码


<blockquote>#define KEYOUTPUT (*(VOLATILE int8u *)0X56000044)
#define KEYINPUT (*(VOLATILE int8u *)0X56000044)

INT16U ScanKey()
{
INT16U key = 0xFFFF;
INT16U i;
INT8U temp=0xFF, output;
rGPECON = ((rGPECON & 0xFFFFFF00) | 0x00000055); //初始化GPE0~GPE3为输出
rGPECON = rGPECON & 0xFFFFFF0F; //初始化GPE4~GPE7为输入

//判断键盘中是否有键按下
for(i=1; ((i0)); i 类型/长度(2字节) -> 数据(46~1500字节) ->帧校验序列(4字节)


局域网采用分组交换技术


发送设备MAC地址 - > 接收设备MAC地址 -> 控制信息 ->有效载荷 -> 校验信息

路由器

多个异构或者同构网络进行互联


网络层


集线器来放大信号实现远距离传输


协议转换器:用于传输层及以上各层的协议转换


热点 - 正式名称无线接入点,它实际上是一个无线交换机或无线路由器。

局域网

按照介质所使用的访问控制方法可分为:以太网,FDDI网和令牌网


必不可少的部分是集线器与交换机

[attach]24317[/attach] 指令集

Thumb指令集是16位的,ARM指令集是32位的,中间有Thumb-2作为桥接。

ARM处理器的三种工作状态







Thumb状态和ARM状态的切换







RAM复位后的状态

ARM处理器复位后的状态都是ARM状态

[attach]24318[/attach] BootLoader


U-BOOT






作用







[attach]24319[/attach] 操作系统

IOS 的前身是 UNIX-BSD(宏内核架构,但是是微内核操作系统)

内核的概念

内核提供任务调度、任务间通信与同步、任务管理、时间管理和存储管理。

典型的单片机程序在程序指针复位后,首先进行堆栈、中断、中断向量、定时器、串行口等接口设置、初始化数据存储区和显示内容,然后就来到了一个监测、等待或空循环,在这个循环中,CPU可以监视外设、响应中断或用户输入。 这段主程序可以看作是一个内核,内核负责系统的初始化和开放、调度其它任务,相当于C语言中的主函数。



现代操作系统设计中,为减少系统本身的开销,往往将一些与硬件紧密相关的(如中断处理程序、设备驱动程序等)、基本的、公共的、运行频率较高的模块(如时钟管理、进程调度等)以及关键性数据结构独立开来,使之常驻内存,并对他们进行保护。通常把这一部分称之为操作系统的内核。

[attach]24320[/attach] Linux







Linux和Unix

其两者源码是完全不相同的,尽管函数和命令的功能处理结果、函数名称和参数十分相同,以及Unix的行命令、驱动程序和应用程序在Linux上能够运行。



Linux运行效率没有Unix高!

Linux命令



arm - linux - gcc交叉编译器来编译应用程序



要对一个应用程序进行调试排错,应在编译指令中加g参数对它进行编译

Linux内核主要由5个子系统组成






进程调度模块负责控制进程对CPU资源的使用,所采取的调度策略是使得各个进程能够平均访问CPU,同时保证内核能及时地执行硬件操作。


内存管理模块的功能之一是屏蔽各种硬件接口内存结构的差异并向上返回一个统一的访问接口


网络接口模块包含网络接口驱动程序


支持进程之间的各种通信机制,其通信机制包括:信号、管道、消息队列、信号量、共享内存、套接字(socket)

微内核和宏内核

微内核特征




属于微内核的典型嵌入式操作系统有:Symbian、VxWorks、QNX、uC/OS - II、IOS,而Symbian是普通实时操作系统

VxWorks收取授权费和版权费。

VxWokrs用于尖端科技中

宏内核





Android OS是典型的宏内核操作系统


宏内核又称为单内核!

Tiny OS

是开放源代码操作系统,属于深度轻量级的操作系统,专为嵌入式无线传感器网络设计,功耗较低,特别适合传感器这种受内存,功耗限制的设备。


轻线程,主动消息和组件化编程。

QNX

符合POSIX基本标准和实时标准


微内核操作系统


内核提供四种服务:进程调度,进程间通信,底层网络通信和中断处理

uC/OS-II






uC/OS-II 移植到一个 嵌入式系统电路板上正常运行,必须具备的条件




uC/OS-II 保护任务之间的共享数据和提供任务之间的通信,可达到保护目的方法通常有




系统启动过程中,Bootloader执行完毕后,调用应用程序主文件(通常是main.c)里的main函数。main函数在执行过程中除了用户函数和硬件初始化函数之外,需要执行下面三个重要函数:OSInit() -> OSTaskCreate() -> OSStart()(注意先后顺序)

OSInit()函数先建立最初的任务就绪表,然后建立4个空白的数据链表,即:任务控制块链表,事件控制块链表、标志链表、内存控制块链表。

系统中任务的五种状态






一些系统函数





判断任务调度的三个条件是:





OSIntExit() - 中断级的调度函数



系统事件控制块的相关函数







就绪任务登记在就绪表中,OSRdyTbl[ ] 是就绪表的位图映像矩阵,每一位代表了一个优先级任务的就绪状态,成为就绪位,该矩阵最多有64位。


一些系统文件





uC/OS系统时钟内核的基本功能(通过GLIBC调用通用函数和内核的内部功能)




实时操作系统与非实时操作系统

实时系统



非实时




实时操作系统


RTOS响应中断请求并且完成相应的中断服务子函数的时间非常快!精细衡量这个时间一致性变化的术语是抖动!


中断服务子函数也是可以调用函数然后进行事件处理的,中断服务子程序返回的最后一步执行中断返回指令。

RTOS特征(主要特征是能够及时响应外部发生的随机任务请求并且能够在规定的时限内完成任务。)(不包括轮转调度)




RTOS的实时性能主要由三个指标衡量


响应时间(包括中断延迟时间和任务切换时间)(任务切换时间又包括人物抢占时间)



吞吐量



生存时间




任务时限有两种






硬实时操作系统和软实时操作系统








[attach]24321[/attach] 存储器

半导体存储器芯片的存储容量取决于该芯片的地址总线的条数和数据总线的位数。



存储器带宽与存储器总线的工作频率有关,也与数据线的位数和每个总线周期的传输次数有关!


系统正在运行的程序的大部分数据和代码存放在主存储器(内存)中


系统尚未运行的程序的大部分数据和代码存放在外部存储器中

分类


按照存取特性分为:RAM和ROM



按照物理位置分为:片内存储器和片外存储器以及外部存储器

按照存储信息的类型分为:程序存储区和数据存储器

RAM


RAM - 高速读取, DRAM - 高集成度



RAM 通常又有DRAM和SRAM之分,SRAM较DRAM电路复杂,但是速度更快,高速缓冲区(cache)就是典型的SRAM。 SRAM的复杂决定了它做不大,至多几十K。



内存条就是DRAM,速度较SRAM慢,但是可以做的很大,比如内存条就是典型的DRAM,其容量就上G了。



FRAM - 铁电随机存取存储器,MRAM - 磁性随机存取存储器。



(以上两个随机存储器是非易失性存储器)

FLASH

Flash闪存有两大类,或非型(NOR Flash)和与非型(NAND Flash)。


或非以字节为单位进行随机存取,存储在里面的程序可以被CPU执行。与非以页为单位进行存取,速度较前者慢。


与非门读出程序或数据时,是先将其预存入RAM,然后才被使用的。虽然速度较慢,但是其寿命,容量成本等方面有很大优势,常用的U盘基本都是NAND Flash。

DDR

DDR - dual data rate - 双倍数据速率


DDR2 - 使原来DDR可预取读取2位变成可预取读取4位或8位,把DDR的数据传输速率又提升了两倍或四倍

USB

USB2.0 的速度可达到 480Mb/s



USB3.0的速度可达到 5Gb/s, 即640MB/s



半双工差分方式通信

[attach]24322[/attach] 编码

ASCII


ASCII共128个字符,96个可打印字符,32个控制字符。


ASCII是7位编码,但在计算机里用一个字节存放(计算机最基本的存储和处理单位)


每个字节多出的1位在计算机内部常保持为0,在数据传输中是奇偶校验位。

汉字编码

GB2312 – 两字节编码(每个字节最高位默认为1),包含常用的中国汉字和图形符号。


GB18030 与国际Unicode相兼容。单字节对应ASCII,双字节对应汉字(GB2312在这完全适用,但是比它范围广),其余四字节对应其他字符。

Unicode

UTF-8 – 单字节可变长编码,单字节向下兼容ASCII,音节文字对应两字节,CJK汉字(china japan koera 中日韩汉字)对应三字节,其余对应四字节。Linux 常用。


UTF-16 – 双字节可变长编码,CJK汉字及常用字符两字节,其余四字节。JAVA .NET 常用。

[attach]24323[/attach] 同步IO和异步IO

CPU的速度远远快于磁盘、网络等IO。在一个线程中,CPU执行代码的速度极快,然而,一旦遇到IO操作,如读写文件、发送网络数据时,就需要等待IO操作完成,才能继续进行下一步操作。这种情况称为同步IO。

在IO操作的过程中,当前线程被挂起,而其他需要CPU执行的代码就无法被当前线程执行了。因为一个IO操作就阻塞了当前线程,导致其他代码无法执行,所以我们必须使用多线程或者多进程来并发执行代码,为多个用户服务。每个用户都会分配一个线程,如果遇到IO导致线程被挂起,其他用户的线程不受影响。

多线程和多进程的模型虽然解决了并发问题,但是系统不能无上限地增加线程。由于系统切换线程的开销也很大,所以,一旦线程数量过多,CPU的时间就花在线程切换上了,真正运行代码的时间就少了,结果导致性能严重下降。

另一种解决IO问题的方法是异步IO。当代码需要执行一个耗时的IO操作时,它只发出IO指令,并不等待IO结果,然后就去执行其他代码了。一段时间后,当IO返回结果时,再通知CPU进行处理。

[attach]24324[/attach] 指令相关

子程序返回调用程序除了MOV PC, LR。还可以MOV R15, LR


汇编语言调用一个名为My的子程序的指令为: BL My 子程序返回调用程序的指令为:MOV PC, LR。


Thumb - 2指令集中关外部中断使用的指令是:CPSID I。开外部中断的指令为:CPSIE I。


EQ表示相等,NE表示不等


RAM汇编程序采用分支指令B


子程序调用指令BL


条件转移指令BX


RAM汇编中没有专门的指令实现循环,一般采用比较指令CMP、ADD、SUB等才能产生条件的指令,然后再通过带状态的条件转移指令BX来实现。


指令后面加个!表示更新基地址寄存器符号


寄存器间接寻址就是以寄存器中的值作为操作数地址,而操作数本身存放在存储器中。用于间接寻址的寄存器必须用[ ] 括起来


Test EQU 50 定义 标号 Test的值为50!


RAM完成有条件无符号加法运算,并更新CPSR中的状态,条件如果是相等,要求指令执行R1+R2,结果放入R3中,则这条指令ADDCEQ R3, R1, R2。如果条件是大于,要求执行R1 - R2,结果放入R3,则该指令是SUBHIS R3, R1, R2

指令的条件码总结






常考指令



LDR 字数据加载指令(存储器到寄存器的数据传送指令)

LDRB 字节数据加载指令

LDRH 半字数据加载指令

STR 字数据存储指令

STRB 字节数据存储指令
STRH 半字数据存储指令





ADC R1, R2, R3 表示 R1 = R2+R3+C(C表示进位)(ADD表示加法)(ADC表示)

[attach]24325[/attach] 置1清0的操作

常见的操作是:or可实现置1,and可实现清0。比如ORR R0,R0,#00000003 该指令设置R0的0、1位,其余位保持不变。再比如AND R0,R0,#FFFFFFFE实现R0的最低位清零。还有一个是用ARM的指令进行位清0,BIC R1, R1 #0X00000088

[attach]24326[/attach] 立即数


汇编语言中中操作数有三种:寄存器操作数、存储器操作数和立即数。



其中立即数相当于高级语言中的常量(常数),它是直接出现在指令中的数,不用存储在寄存器或存储器中的数,如指令ADD AL,06H中的06H即为立即数。

[attach]24327[/attach] 大小端存储

所谓的大端模式就是,低地址存储高位字节。
所谓的小端模式就是,低地址存储低位字节。

[attach]24328[/attach] 计算机存储结构

冯诺依曼,是一种程序指令储存和数据储存在一起的存储器结构
哈佛结构,是一种将程序指令储存和数据储存分开的存储器结构

[attach]24329[/attach] 音频图像


音频

数字音频的正确处理顺序是:取样 -> 量化 -> 编码


数字音频的主要参数:取样频率、量化位数、声道数目、使用的压缩编码方法、比特率


比特率(码率)计算方式:码率 = 取样频率×量化位数×声道数,压缩后的码率和压缩前的码率也就差一个压缩比。



mp3:MPEG - 1层③算法进行有损的压缩编码,以8~12倍的比率大幅度降低了声音的数据量

图像

包括BMP.、TIF、GIF、JPEG、PNG



数字图像的获取过程分为:扫描、分色、取样



GIF是互联网上广泛使用的一种图像文件格式,它的颜色数目较少,不超过256色,文件特别小,适合互联网传输



JPEG是静止图像数据压缩编码的国际标准,特别适合处理各种连续色调的彩色和灰度图像,算法复杂度适中,软硬件皆可实现。

[attach]24330[/attach] 屏幕


触摸屏







LCD显示屏







[attach]24331[/attach] 其他





[attach]24332[/attach]





欢迎光临 嵌入式开发交流网论坛 (http://www.dianzixuexi.com/bbs/) Powered by Discuz! X3.2