01_嵌入式硬件基础

目录

嵌入式微处理器结构

冯·诺依曼结构

哈佛结构

计算机硬件组成

基本的计算机硬件系统

运算器

控制器

数据的表示

进制的转换

数的表示

浮点数的运算

算术运算和逻辑运算

短路计算方式

校验码

奇偶校验码

CRC

海明校验码


嵌入式微处理器结构

冯·诺依曼结构

传统计算机采用冯·诺依曼(Von Neumann)结构,也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构,如图所示。

冯·诺依曼结构的计算机程序和数据共用一个存储空间,程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置。采用单一的地址及数据总线,程序指令和数据的宽度相同。

处理器执行指令时,先从储存器中取出指令解码,再取操作数执行运算,即使单条指令也要耗费几个甚至几十个周期,高速运算时,在传输通道上会出现瓶颈效应。

哈佛结构

哈佛结构是一种并行体系结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个相互独立的存储器,每个存储器独立编址、独立访问,如图所示。

与两个存储器相对应的是系统中的两套独立的地址总线和数据总线。这种分离的程序总线和数据总线可允许在一个机器周期内同时获取指令字(来自程序存储器)和操作数(来自数据存储器),从而提高了执行速度,使数据的吞吐率提高了1倍。又由于程序和数据存储器在两个分开的物理空间中,因此取指和执行能完全重叠。

计算机硬件组成

基本的计算机硬件系统

硬件系统由运算器、控制器、存储器、输入设备(如鼠标、键盘)、输出设备(如显示器)五大部分组成。

存储器:分为内部存储器(即内存,容量小、速度快、临时存放数据)和外部存储器(即硬盘、光盘等,容量大、速度慢、长期保存数据)。

外设:输入设备和输出设备合并称为外设。鼠标、键盘等输入设备都是通过中断的原理来实现控制,点击后触发中断,首先进入中断处理程序。

主机:CPU(运算器、控制器)+主存储器。

CPU:由运算器、控制器、寄存器组和内部总线组成。其功能是实现程序控制、操作控制、时间控制、数据处理等。

运算器

运算器的组成:算术逻辑单元(Arithmetic and Logic Unit,ALU),实现对数据的算术和逻辑运算;累加寄存器(Accumulator,AC),运算结果或源操作数的存放区;数据缓冲寄存器(Data Register,DR),暂时存放内存的指令或数据;状态条件寄存器(Program Status Word,PSW),保存指令运行结果的条件码内容,如溢出标志等。

运算器的功能:执行所有的算术运算,如加、减、乘、除等;执行所有的逻辑运算并进行逻辑测试,如与、或、非、比较等。

控制器

控制器组成:指令寄存器(Instruction Register,IR),暂存CPU执行指令;程序计数器(Program Counter,PC)存放指令执行地址;地址寄存器(Address Register,AR), 保存当前CPU所访问的内存地址;指令译码器(Instruction Decoder,ID),分析指令操作码。

控制器功能:控制整个CPU的工作,包括程序控制、时序控制等。

CPU依据指令周期的不同阶段来区分二进制的指令和数据,因为在指令周期的不同阶段,指令会命令CPU分别去取指令或者数据。

数据的表示

进制的转换

n进制可表示0~(n-1)个数。十六进制的0~15分别用0~9、A~F来表示。十六进制符号为0x或H,如0x18F或18FH都表示十六进制的18F。

R进制整数转十进制:位权展开法。用R进制数的每一位乘以R的n次方,n是变量,从R进制数的最低位开始,依次为0,1,2,3,…累加。

例如,有六进制数5043,此时R=6,用六进制数的每一位乘以6的n次方,n是变量,从六进制数的最低位开始(5043从低位到高位排列:3,4,0,5),n依次为0,1,2,3,那么六进制的5043转化为十进制数的结果为:3*6⁰+4*6¹+0*6²+5*6³=1107。

十进制整数转R进制:除以R倒取余数。用十进制整数除以R,记录每次所得余数,若商不为0,则继续除以R,直至商为0,而后将所有余数从下至上记录,排列成从左至右顺序,即为转换后的R进制数。

十进制小数转R进制小数:乘R正取整数。用十进制小数乘以R,记录每次所得整数,若结果小数部分不为0,则将小数部分继续乘以R,直至没有小数,而后将所有整数从第一个开始排列为从左至右顺序,即为转换后的R进制数。

m进制转n进制:先将m进制转化为十进制数,再将十进制数转化为n进制数,中间需要通过十进制中转,但下面两种进制间可以直接转化。

二进制转八进制:每三位二进制数转换为一位八进制数,二进制数位个数不是三的倍数,则在前面补0,如二进制数01101有五位,前面补一个0就有六位,为001101,每三位转换为一位八进制数,001=1,101=1+4=5,也即01101=15。

二进制转十六进制:每四位二进制数转换为一位十六进制数,二进制数位个数不是四的倍数,则在前面补0,如二进制数101101有六位,前面补两个0就有八位,为00101101,每四位转换为一位十六进制数,0010=2,1101=13=D,也即101101=2D。

数的表示

各种数值在计算机中表示的形式称为机器数,其特点是使用二进制计数制,数的符号用0和1表示,小数点则隐含,不占位置。

机器数有无符号数和带符号数之分。无符号数表示正数,没有符号位。带符号数最高位为符号位,正数符号位为0,负数符号位为1。定点表示法分为纯小数和纯整数两种,其中小数点不占存储位,而是按照以下约定:

(1)纯小数:约定小数点的位置在机器数的最高数值位之前。

(2)纯整数:约定小数点的位置在机器数的最低数值位之后。

(3)真值:机器数对应的实际数值。

为了简化计算机对于减法的处理,带符号数规定了下列编码方式:

原码:一个数的正常二进制表示,最高位表示符号,数值0的原码有两种形式:+0(00000000)和-0(10000000)。

反码:正数的反码即原码;负数的反码是在原码的基础上,除符号位外,其他各位按位取反。数值0的反码也有两种形式:+0(00000000),-0(11111111)。

补码:正数的补码即原码;负数的补码是在原码的基础上,除符号位外,其他各位按位取反,而后末位+1,若有进位则产生进位。因此数值0的补码只有一种形式+0=-0=00000000。

移码:用作浮点运算的阶码,无论正数负数,都是将该原码的补码的首位(符号位)取反得到移码。

符号表示:要注意的是,原码最高位是代表正负号,且不参与计数;而其他编码最高位虽然也是代表正负号,但参与计数。

机器字长为n时各种码制表示的带符号数的取值范围见表。

由于原码和反码对于0的表示分为+0和-0,而补码对于0的表示只有一种,即0,因此同样字长的补码可以多表示一个数。

示例:若机器字长为8,求45和-45的原码、反码、补码和移码。结果如图所示。

浮点数的运算

浮点数:表示方法为N=F×2E,其中E称为阶码,F称为尾数;类似于十进制的科学计数法,如85.125=0.85125×10²,二进制如101.011=0.101011×2³。

在浮点数的表示中,阶码为带符号的纯整数,尾数为带符号的纯小数,要注意符号占最高位(正数0,负数1),其格式如图所示。

很明显,与科学计数法类似,一个浮点数的表示方法不是唯一的,浮点数所能表示的数值范围由阶码确定,所表示的数值精度由尾数确定。

尾数的表示采用规格化方法,也即带符号尾数的补码必须为1.0xxxx(负数)或者0.1xxxx(正数),其中x可为0或1。

浮点数的运算步骤:

(1)对阶:使两个数的阶码相同,小阶向大阶看齐,较小阶码增加几位,尾数就右移几位。

(2)尾数计算:相加,若是减运算,则加负数。

(3)结果规格化:即尾数表示规格化,带符号尾数转换为1.0xxxx或0.1xxxx。

算术运算和逻辑运算

数与数之间的算术运算包括加、减、乘、除等基本算术运算,对于二进制数,还应该掌握基本逻辑运算,包括:

逻辑与(&&):0和1相与,只要有一个为0结果就为0,两个都为1才为1。

逻辑或(||):0和1相或,只要有一个为1结果就为1,两个都为0才为0。

异或:同0非1,即参加运算的二进制数同为0或者同为1结果为0,一个为0另一个为1结果为1。

逻辑非(!):0的非是1,1的非是0。

逻辑左移(<<):二进制数整体左移n位,高位若溢出则舍去,低位补0。

逻辑右移(>>):二进制数整体右移n位,低位溢出则舍去,高位补0。

算术左移、算术右移:乘以2或者除以2的算术运算,涉及加减乘除的都是算术运算,与逻辑运算区分。

短路计算方式

指通过逻辑运算符(&&、Ⅱ)左边表达式的值就能推算出整个表达式的值,不再继续执行逻辑运算符右边的表达式。

校验码

奇偶校验码

码距:就单个编码A(00)而言,其码距为1,因为其只需要改变一位就变成另一个编码。在两个编码中,从A码到B码转换所需要改变的位数称为码距,如A(00)要转换为B(11),码距为2。一般来说,码距越大,越利于纠错和检错。

在编码中增加1位校验位来使编码中1的个数为奇数(奇校验)或者偶数(偶校验),从而使码距变为2。

奇校验可以检测编码中奇数位出错,即当合法编码中的奇数位发生了错误时,即编码中的1变成0或者0变成1,则该编码中1的个数的奇偶性就发生了变化,从而检查出错误。例如,奇校验编码中,含有奇数个1,发送给接收方,接收方收到后,会计算收到的编码有多少个1,如果是奇数个,则无误,是偶数个,则有误。

对于奇偶校验,是由若干位有效信息,再加上一个二进制位(校验位)组成校验码,其中奇校验“1”的个数为奇数,而偶校验“1"的个数为偶数,以此校验,如果其中传输过程中有偶数个数发生错误(即1变成0或0变成1),则“1”的个数其奇偶就不会发生改变,也就无法发现错误了,只有奇数个数据位发生错误,才能发现错误。同时,奇偶校验只能查错不能纠错。

偶校验同理,只是编码中有偶数个1,由上述,奇偶校验只能检1位错,并且无法纠错。

CRC

CRC只能检错,不能纠错,其原理是找出一个能整除多项式的编码,因此首先要将原始报文除以多项式,将所得的余数作为校验位加在原始报文之后,作为发送数据发给接收方。

使用CRC编码,需要先约定一个生成多项式G(x)。生成多项式的最高位和最低位必须是1。假设原始信息有m位,则对应多项式M(x)。生成校验码思想就是在原始信息位后追加若干校验位,使得追加的信息能被G(x)整除。接收方接收到带校验位的信息,然后用G(x)整除。余数为0,则没有错误;反之则发生错误。

例:假设原始信息串为10110,CRC的生成多项式为G(x)=x4+x+1,求CRC校验码。

(1)在原始信息位后面添0,假设生成多项式的阶为r,则在原始信息位后添加r个0,本题中,G(x)阶为4,则在原始信息串后加4个0,得到的新串为101100000,作为被除数。

(2)由多项式得到除数,多项式中x的幂指数存在的位置1,不存在的位置0。本题中,x的幂指数为0,1,4的变量都存在,而幂指数为2,3的不存在,因此得到串10011。

(3)生成CRC校验码,将前两步得出的被除数和除数进行模2除法运算(即不进位也不借位的除法运算)。除法过程如图所示。

得到余数1111。

注意:余数不足r,则余数左边用若干个0补齐。如求得余数为11,r=4,则补两个0得到0011。

(4)生成最终发送信息串,将余数添加到原始信息后。上例中,原始信息为10110,添加余数1111后,结果为101101111。发送方将此数据发送给接收方。

(5)接收方进行校验。接收方的CRC校验过程与生成过程类似,接收方接收了带校验和的帧后,用多项式G(x)来除。余数为0,则表示信息无错;否则要求发送方进行重传。

注意:收发信息双方需使用相同的生成多项式。

海明校验码

海明校验码本质也是使用奇偶校验方式检验,下面通过例题详解。

例:求信息1011的海明码。

(1)校验位的位数和具体的数据位的位数之间的关系。所有位都编号,从最低位编号,从1开始递增,校验位处于2的n(n=0,1,2,…)次方中,即处于第1,2,4,8,16,32,…位上,其余位才能填充真正的数据位,若信息数据为1011,则可知,第1,2,4位为校验位,第3,5,6,7位为数据位,用来从低位开始存放1011,得出信息位和校验位分布如图所示。

实际考试时可以依据公式n+k<=2k-1快速得出答案(n是已知的数据位个数,k是未知的校验位个数,依次取k=1代入计算,得出满足上式的最大的k的值)。

由图可知,7=4+2+1,表示7由第4位校验位(r2)和第2位校验位(r1)和第1位校验位(r0)共同校验,同理,第6位数据位6=4+2,第5位数据位5=4+1,第3位数据位3=2+1,前面知道,这些2的n次方都是校验位,第4位校验位校验第7、6、5三位数据位,因此,第4位校验位r2等于这三位数据位的值异或,第2位和第1位校验位计算原理同上,最终得到的校验位如图所示。

计算出三个校验位后,可知最终要发送的海明校验码为1010101。

(3)检错和纠错原理。接收方收到海明码之后,会将每一位校验位与其校验的位数分别异或,即做如下三组运算:

如果是偶校验,那么运算得到的结果应该全为0,如果是奇校验,应该全为1,假设是偶校验,且接收到的数据为1011101(第四位出错),此时,运算的结果为:

这里不全为0,表明传输过程有误,并且按照r2r1r0排列为二进制100,这里指出的就是错误的位数,表示第100,即第4位出错,找到了出错位,纠错方法就是将该位逆转。

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值