嵌入式系统设计师笔记

努力了3个月,终于考过了!

把这阶段的心得和笔记分享到网上

 

指令周期

若干个即周期组成,是取指令、分析、执行所需的全部时间。

过程

CPU从<程序计数器>获取所需的指令地址       (PC上取指令地址)

从内存(cache)读取指令的内容暂存<暂存寄存器>,然后进行分析和执行 (IR暂存指令地址对应的指令)

简称

IR       指令寄存器

GR     通用寄存器

PC     程序计数器

PSW 状态寄存器

流水线计算
建立时间:一个完整的指令周期,T取指+T分析+T执行
K条指令时间:建立时间+(K-1) * T取指

体系结构

哈佛体系结构:一种将程序指令存储和数据存储分开的存储结构,速度快,一般用于数字处理。也成为:普林斯顿结构

冯·诺依曼体系结构:一种将程序指令存储和数据存储合并在一起的存储结构。区分指令和数据在于指令和数据的寻址方式。

大小端

大小超过char 8 字节的内存存储形式。

隐含了一个条件,如果是char类型,无需遵循大小端.

如char t[] = {0x01,0x02};无论大小端方式,t[0],t[1]在内存地址上的位置都不会改变。

大端:高字节存于内存地址高位,低字节存于内存地址低位

如数:0x0400  

 ------------------------------------------------------------->地址增长方向

04 00

小端:相反

如数:0x0400

------------------------------------------------------------>地址增长方向

00 04

逻辑地址和物理地址转换

逻辑地址页号:逻辑地址/页面大小

逻辑地址偏移:逻辑地址%页面大小

物理地址页号<-逻辑页号(查表)

物理地址=物理页号*页面大小+逻辑地址偏移

容量计算

容量 = 2^地址总线位宽 * 数据总线位宽 (bit)

寻址能力:2^地址总线位宽,为地址个数

一个地址大小对应内容大小:数据总线位宽,一次并行传输数据大小。

常用十六进制和十进制对应关系

HEX       DEC                    Bin  
0x10:     16                     2^4

0x100:    256                    2^8

0x400:    1024                   2^10

0x1000:   4K                     2^12

0x10000:  64M                    2^16

0x100000: 1G                     2^20

中断

中断嵌套:中断程序处理中,遇到优先级更高的中断,暂停当前处理,转到跟高的中断处理程序,更高的处理完后,继续处理当前程序。

相同优先级中断同时产生,会按照顺序处理中断程序。

硬件中断触发方式:边沿触发和电平触发

边沿触发:上升沿触发、下降沿触发

电平触发:高电平触发、低电平触发

寻址范围计算

存储容量大小 / (计算机字长*编址方式系数),建议用2^次数计算

如设机器字长为32位,存储容量为16MB,若按双字编址,其寻址范围是

16M /(4 * 2)  = 2M

80X86汇编

常用寄存器

AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES 共 14 个通用寄存器.

AX,BX,CX,DX 称作为数据寄存器.SP 和 BP 又称作为指针寄存器||SI 和 DI 又称作为变址寄存器||IP和FLAG控制寄存器||CS,SS,DS,ES段寄存器.

32位的有

EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI,EIP,EFLAG,就是在16位寄存器上加E.

1:立即寻址

访问地址,如MOV A,[100H]   MOV A, PTR[100],PTR是数据段的某个地址

2:基址寻址

寄存器寻址,MOV ECX,[EAX]

3:变址寻址

在基址寻址基础上加位移,MOV ECX,TABLE[EAX],TABLE是某个变量地址

4:寄存器间接寻址

寄存器给的是指针,MOV [ECX],EAX,不太明白,且记下。

5:基址变址寻址

寄存器寻址基础上,位移是另外一个寄存器地址 MOV ECX,[EAX][EBX]

汇编指令

JMP XX              ##无条件跳转

CMP AX BX           ## 比较大小等同AX- BX ,影响标志位.

    SF符号标志位,结果最高位为1时标志位SF=1
    ZF是否为0标志位,结果为0时ZF = 1.
    ZF和SF就能判断结果正负数,用于跳转判别

JGE XX              ### 大于或者等于时候跳转XX
JG XX               ### 大于时候跳转XX
JI  XX              ##小于转移XX
JZ XX               ##为0转移XX,ZF=0转移
JNZ XX              ##不为0 转移XX
SUB AX,BX           ###AX = AX- BX,不影响进位标志
NEG     AX          ###AX = AX的补码
IN    AX 21H        ###从21端口读一个字节
AND AX BX           ### AX & BX
SHL AX 01H          ### 无符号左移
SAL AX 01H          ### 有符号左移
SHR AX 01H          ### 右移 AX = AX >>1
AND AX 01H          ### AX = AX & 01,为真ZF=1
ANL AX 01H          ### AX = AX & 01

开发过程

开发:客户需求->软件需求分析->软件概要设计->软件详细设计->软件编码

测试:验收测试<-系统配置测试<-  集成测试     <-   功能测试       <-单元测试

             黑盒测试   <-  灰盒测试                                             <-   白盒测试                      

黑白盒概念

白盒测试也称结构测试、逻辑测试或基于程序的测试,这种测试应了解程序的内部构造,并且根据内部构造设计测试用例。

黑盒测试又称功能测试、数据驱动测试或基于需求规格说明的测试,这种测试不必了解被测对象的内容情况,而依靠需求规格说明中的功能来设计测试用例。

白盒覆盖测试

西方人的科学论证法和东方差异好大!刚接触转不过弯。

定义

1.语句覆盖:每条语句至少执行一次。
2.判定覆盖:每个判定的每个分支至少执行一次。
3.条件覆盖:每个判定的每个条件应取到各种可能的值。
4.判定/条件覆盖:同时满足判定覆盖条件覆盖。
5.条件组合覆盖:每个判定中各条件的每一种组合至少出现一次。
6.路径覆盖:使程序中每一条可能的路径至少执行一次。

含义

1.语句覆盖 为了暴露程序中的错误,程序中的每条语句至少应该执行一次。因此语句覆盖(Statement Coverage)的含义是:选择足够多的测试数据,使被测程序中每条语句至少执行一次。语句覆盖是很弱的逻辑覆盖。

2.判定覆盖比语句覆盖稍强的覆盖标准是判定覆盖(Decision Coverage)。判定覆盖的含义是:设计足够的测试用例,使得程序中的每个判定至少都获得一次“真值”或“假值”,或者说使得程序中的每一个取“真”分支和取“假”分支至少经历一次,因此判定覆盖又称为分支覆盖。

3.条件覆盖在设计程序中,一个判定语句是由多个条件组合而成的复合判定。为了更彻底地实现逻辑覆盖,可以采用条件覆盖(Condition Coverage)的标准。条件覆盖的含义是:构造一组测试用例,使得每一判定语句中每个逻辑条件的可能值至少满足一次。

4.多条件覆盖。多条件覆盖也称条件组合覆盖,它的含义是:设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。显然满足多条件覆盖的测试用例是一定满足判定覆盖、条件覆盖和条件判定组合覆盖的。

5.修正条件判定覆盖。修正条件判定覆盖是由欧美的航空/航天制造厂商和使用单位联合制定的“航空运输和装备系统软件认证标准”,在国外的国防、航空航天领域应用广泛。这个覆盖度量需要足够的测试用例来确定各个条件能够影响到包含的判定的结果。它要求满足两个条件:首先,每一个程序模块的入口和出口点都要考虑至少要被调用一次,每个程序的判定到所有可能的结果值要至少转换一次;其次,程序的判定被分解为通过逻辑操作符(and、or)连接的布尔条件,每个条件对于判定的结果值是独立的。

例子:
if (a && b)
    ;


语句覆盖:
    a = true, b = true
    理解为语句都执行到,没办法覆盖所有情况

判断覆盖/分支覆盖:
{
    a = true, b = true
    a = false,b = false
}
或者
{
    a = true,b = true
    a = true,b = false
}
或者
{
    a = true, b = true
    a = false,b=true
}
    理解为每个判断都取一次真和假


条件覆盖:
{
    a = true, b = true
    a = false,b= false;
}
或者
{
     a = true, b = false
     a = false,b= true
}
    每个条件取一次真和假,可能导致分支无法执行到
    小结:判定覆盖只关心判定表达式的值(真/假),而条件覆盖涉及到判定表达式的每个条件的值(真/假)。

判定条件覆盖:
    a = true, b = true
    a = false,b = false
    判定覆盖和条件覆盖的合体,满足两者的要求,条件都取一次真假,判定都取一次真假。

组合覆盖:
    a = true, b=true;
    a = true, b=false;
    a = false,b = true;
    a = false,b = false;
    每个条件可能性的组合
    

PV操作

PV原语通过操作信号量来处理进程间的同步与互斥的问题。

进入临界区

P(S)//进入时候等待

work()

V(S)   //出去时候释放,并且检查唤醒等待队列

出临界区

设信号量S=0;

P(S)先执行S--;如果S<0;阻塞该进程,并插入该信号量的等待队列。如S>=0,继续执行

V(S)先执行S++;如果S<=0;从该信号量的等待队列移出第一个进程,把移出的进程变为就绪态并且插入到该信号就绪队列,然后继续执行(理解为唤醒另外一个使用该信号量等待的进程);S>0,继续执行。

表现为:

P(S){
    S--;
    if (S < 0){
        //加入等待队列
        //阻塞
    }
}

V(S){
    S++;
    i(S <= 0) {
        //移出等待队列的第一个进程,并且唤醒
    }
}

临界

临界资源:一次仅一个进程访问的资源

临界区:访问临界资源的代码

访问临界资源原则:

空闲让进:有就上

忙则等待:没就等

有限等待:在有限的时间进入临界区

让权等待:不能进入,主动释放出处理机器。

定时器计算

定时器位宽W,时钟频率Y(HZ)。(单片机的12个机器周期为一个指令周期)。假设定时长X秒

定时最长时长S: S = 2^W /Y(s)

递增初值A:A= 2^W - XY

递减初值B:B=X*Y

DMA

DMA结构示意图

                                         DMA结构示意图

DMA(Direct Memory Access,直接内存存取) 允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。

一个完整的DMA传输过程必须经过DMA请求、DMA响应、DMA传输、DMA结束4个步骤。

请求

CPU对DMA控制器初始化,并向I/O接口发出操作命令,I/O接口提出DMA请求。

响应

DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。当CPU执行完当前总线周期即可释放总线控制权。此时,总线裁决逻辑输出总线应答,表示DMA已经响应,通过DMA控制器通知I/O接口开始DMA传输。

传输

DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAM与I/O接口进行DMA传输。

在DMA控制器的控制下,在存储器和外部设备之间直接进行数据传送,在传送过程中不需要中央处理器的参与。开始时需提供要传送的数据的起始位置和数据长度。

结束

当完成规定的成批数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。当I/O接口收到结束信号后,一方面停 止I/O设备的工作,另一方面向CPU提出中断请求,使CPU从不介入的状态解脱,并执行一段检查本次DMA传输操作正确性的代码。最后,带着本次操作结果及状态继续执行原来的程序。

由此可见,DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU的效率大为提高。

DMA请求优先级高,大于中断请求

选址

线选法:片内选址高位地址连接至各个存储芯片的高位地址端。低地址连接至片内地址(地址总线)。

译码法:片内选址高位地址作为输入,输出作为片选信号。

触发器

电位出发方式触发器

-----------
| Q    /Q |
|         |
| D     E |
-----------
  锁存器

E = 0,D 和 /D被锁存。
E = 1,D 和 /D进入基本触发器。

 

浮点数

计算机内存上表示:符阶 + 阶码 + 数符 + 尾数

R进制数字表示:尾数 * 数符 * R^(阶符 * 阶码)  

校验

海明码(Hamming Code)是一个能够有多个校验位。具有检测并纠正一位错误代码的纠错码

奇校验:1的个数为偶数,校验位为1,偶数加上校验位本身刚好有奇数个;1个数为奇数,校验位为0,校验个数也为奇数。

偶校验:同理可得

CRC校验:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码

海明码计算

校验码位数
--------------------
N:数据位数+校验位数
R:校验位数 
K:数据位数
满足K + R <= 2^R - 1

校验码插入位置
2^n位置(0,1,2,4,8......)

 

音频格式

MP3:MPEG-1 audio layer 3

WAV:Microsoft开发的一种声音文件格式,是最接近无损的音乐格式,所以文件大小相对也比较大。

邮箱协议

POP:下载邮件,服务器并删除邮件

POP3:POP扩展,支持下载邮件,服务器并不删除邮件.允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上

IMAP:客户端与服务器同步

STMP:要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。

UML常见关系

泛化:继承

实现:类和接口关系

聚合:整体和部分关系,分得开

组合:整体和部分关系,分不开

符号:https://blog.csdn.net/aerchi/article/details/53125847

地址

物理地址:

逻辑地址:程序里的偏移地址,如&a

线性地址:逻辑地址+基地址

银行家算法

一种避免死锁的算法

1:求剩余资源

剩余资源 = 可用资源-已使用资源

2:进程最安全运行顺序

求进程还需资源,与剩余资源比较。剩余资源>还需资源,则从该进程开始

题型

资源R1 R2 R3 R4,最大可用数为9,6,3,3
某一时刻,有4个进程P1~P4,使用资源如下

        资源
进程    需要最大资源  已分配资源
    P1  6 4 2 1      1 1 1 1
    P2  2 2 2 1      2 1 1 1
    P3  8 1 1 1      2 1 0 0
    P4  2 2 1 1      1 2 1 1


剩余资源 
        R1 = 9-1-2-2-1 = 3;
        R2 = 6-1-1-1-2 = 1;
        R3 = 3-1-1-1   = 0;
        R4 = 3-1-1-1   = 0;

还需资源
        P1  5 3 1 0
        P2  0 1 1 0
        P3  6 0 1 1
        P4  1 0 0 0

所以最安全的顺序是:P4->P2->P3->P1            
                

cache效率

CPU平均访问时间=(Cache 存取周期 * Cache存取次数 + 内存存取周期 *内存存取次数)/总次数

效率=Cache存取周期/CPU平均访问时间

题型

某计算机的存储系统由Cache-主存系统构成,Cache的存取周期为10ns,主存的存取周期为50ns。在
CPU执行一段程序时,Cache完成存取的次数为4800次,主存完成存取的次数为200次,则CPU访问存储
系统的平均访问时间是__(1)__ns,该Cache-主存系统的效率是__(2)__。
(1)A.10    B.11.60  C.11.68  D.50
(2)A.0.856 B.0.862  C.0.958  D.0.960

CPU访问存储系统的平均访问时间= (10*4800+50*200)/(4800+200) = 11.60
Cache-主存系统的效率        = 10/11.6                     = 0.856

栈 

后进先出

分为两种,向下增长型和向上增长型

向上增长型
---------栈顶
---------
---------
---------
---------  <---SP
---------栈底
Push操作:SP++,然后压入数据到栈底
Pop 操作:弹出栈底数据,SP--

向下增长型
---------栈顶
---------<---SP
---------
---------
---------  
---------栈底
Push操作:SP--,然后压入数据到栈底
Pop 操作:弹出栈顶数据,SP++

原码和反码是为了说明补码的原理而设定的两个概念,实际在计算机中只有补码。为了减少硬件工作,把减法变为加法。

原码:

反码:正数不变,负数:  ~原码(不含最高位符号位)

补码:正数不变,   负数 : 反码+1

C语言关键字

static:全局变量

auto:局部变量

register:寄存器 register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度

volatile:原子变量,多用于多线程

unsigned :无符号,unsigned char val = 10; while(val -- <= 0);会无限循环。

CPM

关键路径法

关键路径法是用寻找关键路径及其时间长度来确定项目的完成日期与总工期的方法。

关键路径:总工期最长的一条/多条路径

关键路径越多,风险越大

最早开始时间(Early Start,简称ES),在条件具备的情况下,该活动可以开始进行的最早可能
最早结束时间(Early Finish,简称EF),在条件具备的情况下,该活动可以完成的最早可能
最晚开始时间(Late Start,简称LS),在不拖延项目进度的情况下,该活动可以开始进行的最晚可能
最早结束时间(Late Finish,简称LF),在不拖延项目进度的情况下,该活动可以完成的最晚可能
最少时间:关键路径的时间。理解为多个活动并行,最短时间取最长路径.

最晚开始 = 关键路径时间-该路径时间

RSA

RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。可用于数字签名。

非对称加密,私钥自己保管,公匙提供给对方解密。

数字签名用于通信AB双方,A向B发送签名消息,则

B可以验证消息是否来源于A

A不能否认发送消息

B不能编造或者改变消息。

A/D和D/A转换器

D/A转换器的性能指标包括分辨率、稳定时间(转换时间)、绝对精度、线性误差。

分辨率:刻度上最小单位

8位D/A变换器的输出最大电压为5V,其分辨率指标是最低有效位输入时输出的变化程度,那么该D/A变换器的分辨率=5V/2^8 = 5v/256 = 20mv

CMM

CMM即软件能力成熟度模型,是目前国际上最流行、最实用的软件生产过程标准和软件企业成熟度的等级认证标准。CMM是美国卡内-梅隆大学软件工程研究所与企业、政府合作的基础上开发的模型,主要用于评价软件企业的质量保证能力。

CMM把软件开发过程的成熟度由低到高分为初始级、可重复级、已定义级、己管理级和优化级共5个级别,每个成熟度等级被分解成几个关键过程域,共18个关键过程区域,其中初始级无关键过程区域。

可重复级包括6个关键过程区域,为软件配置管理、软件质量保证、软件子合同管理、软件项目跟踪与监督、软件项目策划、软件需求管理;

已定义级包括7个关键过程区域,为同行评审、组间协调、软件产品工程、集成软件管理、培训大纲、组织过程定义、组织过程集点;

己管理级包括2个关键过程区域,为软件质量管理和定量过程管理;

优化级包括3个关键过程区域,为过程更改管理、技术改革管理和缺陷预防。

编译

编译器:生产目标执行文件,C/ C++/ JAVA之类的语言。

解释器:一条条解释,脚本类。

条件编译:C语言中提供控制编译器流程的语句

Cache-内存映射

直接映射

内存地址映射到固定的cache,表现为多个内存地址映射到同一个cache地址

全相联映射

任意内存地址可以映射到cache,表现为映射随意,有cache空间就映射

组相联映射

内存分组、cache分组,组之间的映射为全相联映射,组内间为直接映射,是上述两个的折中做法

Brust

突发访问模式 burst access mode

正常访问:写一个地址,再读取数据;访问n个地址的数据需要2n个周期

Burst:写一个地址,连续读取数据,访问n个地址的数据需要n+1个周期

MTBF

平均故障间隔时间(MTBF)用以表示系统平均无故障可正常运行的时间,是所选时段多次故障间隔时间的平均值,MTBF越大,表示系统越可靠。

实时性

嵌入式实时系统中,有3个主要指标衡量系统的实时性,即响应时间、吞吐量和生存时间。

响应时间是计算机从识别一个外部事件到处理完这个事件的时间;

吞吐量是指在给定的时间内,系统可以处理的事件总数;

生存时间是数据有效等待的时间,在这段时间内数据是有效的。

嵌入式实时系统是指系统能够在指定或者确定的时间内,完成系统功能和外部或内部、同步或异步事件做出响应的系统。因此,单纯使用绝对的响应时间长短,是不能衡量系统的实时性的。

Spooling

Spooling的意思是外部设备同时联机操作,又称为假脱机输入/输出操作,是操作系统中采用的一项将独占设备改造成共享设备的技术。Spooling系统的组成包括三部分:输入井和输出井、输入缓冲区和输出缓冲区、输入进程和输出进程。为了解决CPU输出数据的速度远远高于打印机的打印速度这一矛盾,在操作系统中一般采用Spooling技术。

上拉电阻

在一般的硬件设计尤其是IIC的电路设计中,对于SDA和SCL两线,由于其内部是漏极开路(open-drain),通过上拉电阻外加一个3.3V电源,用于增强系统的驱动能力。

电容

电源设计中,为了去除干扰噪声,需要对电源进行滤波处理,通常采用电容进行滤波处理,以保护系统电源信号的稳定性。

参考:

寄存器:https://www.cnblogs.com/zhaoyl/archive/2012/05/15/2501972.html

http://qiusuoge.com/10004.html

汇编指令:https://blog.csdn.net/wwwwws/article/details/8559174

覆盖测试:https://baike.baidu.com/item/%E7%99%BD%E7%9B%92%E6%B5%8B%E8%AF%95/934440?fr=aladdin

PV:https://baike.baidu.com/item/PV%E5%8E%9F%E8%AF%AD/1882650?fr=aladdin

临界资源:https://blog.csdn.net/liuchuo/article/details/51986201

DMA:https://baike.baidu.com/item/DMA/2385376?fr=aladdin

片选/线选:http://www.docin.com/p-615586033.html

海明码:https://www.cnblogs.com/claireyuancy/p/6892687.html

https://blog.csdn.net/feipeng8848/article/details/50924078

奇/偶校验:https://baike.baidu.com/item/%E5%A5%87%E6%A0%A1%E9%AA%8C/1684279?fr=aladdin

音频:https://baike.baidu.com/item/MPEG/213546?fr=aladdin

https://baike.baidu.com/item/WAV/218914?fr=aladdin

邮件协议:http://edm.ishang.net/faq/detail/the-imap-protocol.html

地址:https://zhidao.baidu.com/question/1821054119642164908.html

编址:https://mp.csdn.net/postedit/83212613
码:https://blog.csdn.net/flycct/article/details/50573832

栈:https://baike.baidu.com/item/%E5%A0%86%E6%A0%88%E6%8C%87%E9%92%88/8770086?fr=aladdin

CPM:https://blog.csdn.net/qq_32317661/article/details/80747828

https://www.jianshu.com/p/1857ed4d8128

https://blog.csdn.net/Key_MQL/article/details/52237595?utm_source=blogxgwz0

RSA:https://baike.baidu.com/pic/RSA%E7%AE%97%E6%B3%95/263310/0/245e8bca80c9f495c9176831?fr=lemma&ct=single#aid=0&pic=245e8bca80c9f495c9176831

映射:https://blog.csdn.net/dongyanxia1000/article/details/53392315

Brust:https://blog.csdn.net/langdao04/article/details/8995216

寻址范围:https://blog.csdn.net/obanaganastar/article/details/83212613

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章