计算机三级嵌入式笔记

计算机三级嵌入式笔记

ARM内核

  • 按照AMBA总线规范,以ARM内核为基础的嵌入式处理器芯片采用系统总线与外围总线两层结构的方式构建片上系统。

  • AMBA是ARM公司为连接ARM内核与处理器芯片中的其他各种组件而定义的总线规范,即先进的微控制器总线体系结构

  • AMBA是ARM公司公布的用于连接和管理片上系统中各功能模块的开放标准和片上互连规范

  • AMBA规定了ARM处理器内核与处理器内部RAM、DMA以及高带宽外部存储器等快速组件的接口标准

  • ARM处理器内核与外围端口及慢速设备接口组件的接口标准包含在AMBA规范中

  • AMBA有多个版本,性能随版本的发展而逐步提高

  • ARM处理器芯片内部的模拟组件包括ADC和DAC,有的还带有比较器等。这对于既需要处理数字信号又需要处理模拟信号的混合系统的设计提供了较好的解决方案。

  • S3C2410是三星公司基于ARM2OT核的两款嵌入式微处理照,属于中高档32位嵌入式做处理器,内部具有分离的16KB大小的指令Cache和16KB大小的数据Cache,使用ARM公司特有的AMBA总线,对于高速组件采用AHB总线,而对于低速外设接口则采用AB总线,AHB通过桥接器链接AFE,芯片内部集成了许多硬件组件,包括了内部SRAM、外部存储器控制器等等。

  • ARM Cortex-A系列都基于ARMV7-A体系结构。

  • ARM9TDMl-S中的T的含义是支持高密度的16位的Thumb指令集,D表示支持片上调试。

ARM处理器

  • ARM采用RISC精简指令集,采用冯诺依曼体系或哈佛结构
  • ARM的总线结构称为AMBA (先进微控器制总线结构)
  • 是ARM推出的开放式总线结构,是目前流行的一种工业标准片止结构;
  • ARM处理器具有耗电省、功能强、成本低等特点
  • ARM7~ARM1 1为经典ARM处理器
  • RM11以后则以Cortex命名,分为三个系列,-A, -R, -M系列
    – 分别面向高端应用、实时控制和微控制器;
    – 其中Cortex-M 系列针对成本和功耗敏感的MCU和终端应用(如智能测量、人机接口设备、汽车和工业控制系统、大型家用电器、消费性产品和医疗器械)的混合信号设备进行过优化。
  • ARM7采用的是冯·诺依曼结构,而ARM9~ARM11均采用哈佛(Harvard)结构。
  • ARM处理器采用单周期操作
  • ARM处理器都采用流水线技术
  • ARM Cortex-A系列都基于ARMV7-A体系结构。
  • ARM7采用冯·诺依曼结构,3级流水线,无MMU
  • ARM9采用哈佛结构,5级流水线
  • ARM Cortex-A15采用哈佛结构,13级流水线,MPCore为多核,超标量,可变长度,乱序执行指令流水线,动态分支指令预测,4路相关二级Cache。
  • Cortex-M3采用3级流水线,
  • 在ARM Cortex实时嵌入式处理理器中,Cortex-R4采用8级流水线。
  • Cortex-M0采用了冯·诺依曼结构,

ARM处理器工作状态

  • 在ARM的体系结构中,处理器可以工作在3种不同的状态
  • ①ARM状态
    – ARM状态是ARM处理器工作于32位指令的状态,即32位状态,所有指令均为32位宽度。
  • ②Thumb/Thumb-2状态
    – Thumb状态是ARM执行16位指令的状态,即16位状态。
    – 在Thumb模式下, 指令代码只有16位,使代码密度变大,占用内存空间减小,提供比32位程序代码更佳的效能。
  • ③调试状态
  • ARM处理器复位后自动进入ARM状态。
  • Thumb-2指令集有专门提供开关中断的专用指令,其中开可屏蔽中断的指令为CPSIE l
    ,关闭可屏蔽中断的指令为CPSID l
  • 在ARM的体系结构中,处理器可以工作在种不同的状态①ARM状态②Thumb状态及Thunb-2状态③调试状态。其中,除支持Thumb-2的ARM处理器外,其他所有ARM处理器都可以工作在ARM状态,而Cortex-M3只有Thumb-2状态和调试状态
  • ARM体系结构支持7种工作模式,取决于当前程序状态寄存器CPSR的低5位值。
  • 用户模式是程序正常执行工作模式,当处理器处于用户模式时,如果没有异常发生不能改变工作模式;
  • 系统模式运行特权级的操作系统任务;
  • 管理模式是操作系统的保护模式,处理软中断。

异常

ARM处理器7种异常:
(1) 复位RESET
(2) 未定义指令UND
(3) 软件中断SWI
(4) 指令预取中止PABT
(5) 数据访问中止DABT
(6) 外部中断IRQ
(7) 快速中断FIQ

指令作用
CPSID I关中断
CPSIE I开中断
CPSID F关异常
CPSIE F开异常

异常中断响应过程

ARM对异常的响应过程如下:

  • 将CPRS的情保存到将要执行的异常中断对应的各自SPSR中;
  • 设置CPSR的相应位;
  • 将引起异常指令的下一条地址(断点地址)保存到R14中;
  • 给PC强制赋值,转入向量地址,以便执行相应的处理程序。

I:IRQ中断; F:FIQ中断

  • 顺序需要备注背诵,用于确定中断的异常地址
  • 异常所对应的模式也需要背诵在这里插入图片描述

运行模式切换

在这里插入图片描述
在这里插入图片描述

  • 模式位需要背诵,需要知道切换到任意模式的操作方法
    在这里插入图片描述

直接寻址、间接寻址、立即寻址

  • 直接寻址、间接寻址、立即寻址,只是CPU在通过总线与内存交互时的不同交互方法,而产生的三种概念词!
  • 直接寻址
    直接寻址即直接给出内存单元的物理地址/虚拟地址直接寻址!
  • 间接寻址
    间接寻址是建立在直接寻址之上的一种概念,地址不是直接寻址那样直接给出,而是通过某个特定的内存单元得出,第一次是得到某个特定内存单元里的地址数据,第二次在将得出的地址进行偏移的运算直接寻址!
  • 立即寻址
    立即寻址即立即数寻址!
    立即寻址要快于其它寻址,因为它无需进行寻址!

ARM汇编指令

ARM指令格式
操作码+(条件域)+(更新S)+寄存器
在这里插入图片描述
在这里插入图片描述
BX是操作码,EQ是条件域
BX是分支类指令,带状态切换的跳转指令
BXEQ 则是带状态和条件跳转

SUBVS表示溢出时相减
SUBEQ表示相等时相减
SUBLS表示无符号数小于或等于时相减
SUBNE表示不相等时相减.

  • LDR 字数据加载指令
  • LDRB 字节数据加载指令
  • LDRH 半字数据加载指令
  • STR 字数据存储指令
  • STRB 字节数据存储指令
  • STRH 半字数据存储指令

LDR/STR

ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。
LDR,STR是用于寄存器和外部存储器交换数据指令,注意与MOV的区别,后面只在寄存器或常数交换.

  • LDR(load)用于把一个32Bit的WORD数据从外部存储空间装入到寄存器中.
  • STR(Store) 用于把一个寄存器的值存入外部存储空间,是LDR的逆操作.

若想把数据从内存中某处读取到寄存器中,只能使用ldr:

ldr r0, 0x12345678

把0x12345678这个地址中的值存放到r0中
mov不能实现这个功 能,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中
还有一个就是ldr伪指令,虽然ldr伪指令和ARM的ldr指令很像,但是作用不太一样。ldr伪指令可以在立即数前加上=,以表示把一个值(一般是一个地址)写到某寄存器中

ldr r0, =0x12345678 

把0x12345678这个值写到r0中,所以,ldr伪指令和 mov是比较相似的。只不过mov指令限制了立即数的长度为8位,也就是不能超过512。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的 立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为mov指令的。

LDR加载指令

  • LDR(load)用于把一个32Bit的WORD数据从外部存储空间装入到寄存器中.

LDR指令的格式为: LDR{条件} 目的寄存器,<存储器地址>

LDR指令用亍从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用亍从存储器中读取32位的字数据到通用寄存器,然后对数据迕行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。

指令示例:
LDR R0,[R1] ;将存储器地址为R1的字数据读入寄存器R0。
LDR R0, [R1] ;R1的值当成地址,再从这个地址装入数据到R0 (R0=*R1)
LDR R1,=0x30008000 ; 把地址0x30008000的值装入到R1中,LDR中用常数要用=打头.
LDR R0,[R1,R2] ;将存储器地址为R1+R2的字数据读入寄存器R0。
LDR R0,[R1,#8] ;将存储器地址为R1+8的字数据读入寄存器R0。
LDR R0,[R1,R2]! ;将存储器地址为R1+R2的字数据读入寄存器R0,并将新地址R1+R2写入R1。
LDR R0,[R1,#8]! ;将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1。 
LDR R0,[R1],R2 ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2写入R1。
LDR R0,[R1,R2,LSL#2]! ;将存储器地址为R1+R2×4的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。
LDR R0,[R1],R2,LSL#2 ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。”

LDR伪指令

ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令。
LDR伪指令的形式是“LDR Rn,=expr”。

例子:
COUNT EQU       0x40003100
……
LDR       R1,=COUNT
MOV      R0,#0
STR       R0,[R1]

COUNT是定义的一个变量,地址为0x40003100。
LDR R1,=COUNT是将COUNT这个变量的地址,也就是0x40003100放到R1中。
MOV R0,#0是将立即数0放到R0中。最后一句STR R0,[R1]是一个典型的存储指令,将R0中的值放到以R1中的值为地址的存储单元去。实际就是将0放到地址为0x40003100的存储单元中去。可 见这三条指令是为了完成对变量COUNT赋值。用三条指令来完成对一个变量的赋值,

LDR 的两种用法

1)LDR PC, =MyHandleIRQ 表示将MyHandleIRQ符号放入PC寄存器中
2)LDR PC,MyHandleIRQ 表示将读取存储器中MyHandleIRQ符号所表示的地址中的值,及需要多读一次存储器。

综述所述:ldr伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,ldr伪指令被编译器替换成一条合适的指令。若加载的常数 未超出mov或mvn的范围,则使用mov或mvn指令代替该ldr伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的ldr指令从文字池读 出常量。

STR存储指令

  • STR(Store) 用于把一个寄存器的值存入外部存储空间,是LDR的逆操作.

STR指令的格式为:

STR{条件} 源寄存器,<存储器地址>

STR指令用亍从源寄存器中将一个32位的字数据传送到存储器中。该指令在程序设计中比较常用,寻址方式灵活多样.

指令示例:
STR R0,[R1],8  ;将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1.
STR R0,[R1,8]  ;将R0中的字数据写入以R1+8为地址的存储器中。
STR r1,[r0]      ;将r1寄存器的值,传送到地址值为r0的(存储器)内存中
STR R0,[R1] ; 把R0的值,存入到R1对应地址空间上(*R1 = R0)
STR R0,=0x30008000 ;把R0中值存入到地址0x30008000
  • S2C2440的中CPU内核以外的模块的控制寄存器空间也是属于外部空间,所以也得用如下指令LDR R0,=GPFDAT

LDM(加载多个寄存器指令)

LDMIA R0,{R1,R2}

LDM是加载多个寄存器指令,后缀IA表示在每次执行完加载/存储操作后,R0按字长度增加.

比较指令(CMP、TST、BNE、BEQ)

CMP算数处理指令

CMP:算数处理指令,用于把一个寄存器的内容和另一个寄存器的内容或立即数进行减法比较,不存储结果,都会更改标志位
假设现在AX寄存器中的数是0002H,BX寄存器中的数是0003H。
执行的指令是:CMP AX, BX
执行这条指令时,先做用AX中的数减去BX中的数的减法运算。
列出二进制运算式子:
     0000 0000 0000 0010
    -0000 0000 0000 0011
    _________________________________
  (借位1) 1111 1111 1111 1111
所以,运算结果是 0FFFFH
根据这个结果,各标志位将会被分别设置成以下值:

  • CF=1,因为有借位
  • OF=0,未溢出
  • SF=1,结果是负数
  • ZF=0,结果不全是零
  • 还有AF, PF等也会相应地被设置。

CMP 比较指令做了减法运算以后,根据运算结果设置了各个标志位。
标志位设置过以后,0FFFFH这个减法运算的结果就没用了,它被丢弃,不保存。

执行过了CMP指令以后,除了CF,ZF,OF, SF,等各个标志位变化外,其它的数据不变.
对照普通的减法指令 SUB AX, BX,它们的区别就在于:

  • SUB指令执行过以后,原来AX中的被减数丢了,被换成了减法的结果。
  • CMP指令执行过以后,被减数、减数都保持原样不变。

TST逻辑处理指令

  • TST:逻辑处理指令,用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新CPSR中条件标志位的值。当前运算结果为1,则Z=0;当前运算结果为0,则Z=1.

BNE数据跳转指令

  • BNE: 数据跳转指令,标志寄存器中Z标志位不等于零时, 跳转到BNE后标签处.

BEQ数据跳转指令

  • BEQ: 数据跳转指令,标志寄存器中Z标志位等于零时, 跳转到BEQ后标签处.

TST r0 , #0x2       ;进行and运算,如果bit_2为1,zero==0
					;如果bit_2为0,则zero==1,即该指令测试bit_2是否为0
BNE led_blink       ;非零则跳转,若zero==1,跳转到led_blink处执行
					;若zero==0,则继续执行下一步指令
SUB r1 , r1 , #1     ;r1=r1-1
CMP r1 , #0           ;r1是否等于0,并更改标志位     
BNE led_blink         ;zero==1时跳转至led_blink处,zero==0时则继续执行

MVN

  • MVN是数据取反传送指令

位移

  • LSL 逻辑左移
  • ASL 算术左移
  • LSR 逻辑右移
  • ASR 算术右移
  • ROR 循环右移
  • RRX 带扩展的循环右移
  • ASL 和 LSL 是等同的,可以自由互换。
  • 可以用一个立即值(从0到31)指定移位数量,或用包含在0和31之间的一个值的寄存器指定移位数量

http://blog.sina.com.cn/s/blog_13ced11ce0102v63n.html

跳转指令(B/BL/BX)

  • B 跳转指令

  • BL 带返回的跳转指令

  • BLX 带返回和状态切换的跳转指令

  • BX 带状态切换的跳转指令

复合

  • ADDCEQ R3,R1,R2 如果条件相等,则R3=R1+R2
  • SUBHIS R3,R1,R2 如果条件相等,则R3=R1-R2

一些伪指令

数据定义( Data Definition )伪指令
数据定义伪指令一般用于为特定的数据分配存储单元,同时可完成已分配存储单元的初始化。

  • DCD 伪指令用于分配一片连续的存储单元并用指定的数据初始化。
  • DCB 伪指令用于分配一片连续的字节存储单元并用伪指令中指定的表达式初始化。
  • DCD Ox12;在内存区域分配一个32位字的内存空间并初始化为0x00000012
    DCD为ARM汇编器所支持的数据定义伪指令,用于分配一片连续的字存储单元并用指定的数据初始化
  • CODE16;伪指令通知编译器,其后的指令序列为16位的Thumb指令
  • CODE32;伪指令通知编译器,其后的指令序列为32位的ARM指令
  • EQU是等于伪指令,用于为程序中的常量、标号等定义一个等效的字符名称,Test EQU 50定义标号Test的值为50
  • IMPORT Main;该伪指令通知编译器当前文件要引用标号Main,但Main在其他源文件中定义
    IMPORT伪指令用于通知编译器要使用的标号在其他源文件中定义,但要在当前源文件中引用,而且无论当前源文件是否引用该标号,该标号均会被加入到当前源文件的符号表中.
  • 引用一个在其它文件中的标号Lable1的伪指令为IMPORTLable1,
  • 声明一个全局标号Lable2以便其它文件引用,该伪指令为EXTERN Lable2.

程序状态寄存器与通用寄存器之间的传输

  • 传送CPSR或SPSR的内容到通用寄存器指令用MRS;
  • 传送通用寄存器到CPSR或SPSR的指令用MSR。

嵌入式内核分类

  • 嵌入式处理器的体系结构按指令集可分为两大类: CISC和RISC;
    – CISC(复杂指令集)
    – RISC(精简指令集)
  • 按存储机制分为冯诺依曼结构及哈佛结构;
    (1)采用存储程序方式,指令和数据不加区别混合存储在同一个存储器中,
    数据和程序在内存中是没有区别的,它们都是内存中的数据,
    当EIP指针指向哪.
    CPU就加载那段内存中的数据,如果是不正确的指令格式,CPU就会发生错误中断.
    在现在CPU的保护模式中,每个内存段都有其描述符,
    这个描述符记录着这个内存段的访问权限(可读,可写,可执行).
    这就变相的指定了哪些内存中存储的是指令哪些是数据)
    指令和数据都可以送到运算器进行运算,即由指令组成的程序是可以修改的。
    (2)存储器是按地址访问的线性编址的一维结构,每个单元的位数是固定的。
    (3)指令由操作码和地址码组成。操作码指明本指令的操作类型,地址码指明操作数和地址。操作数本身无数据类型的标志,它的数据类型由操作码确定。
    (4)通过执行指令直接发出控制信号控制计算机的操作。指令在存储器中按其执行顺序存放,由指令计数器指明要执行的指令所在的单元地址。指令计数器只有一个,一般按顺序递增,但执行顺序可按运算结果或当时的外界条件而改变。
    (5)以运算器为中心,I/O设备与存储器间的数据传送都要经过运算器。
    (6)数据以二进制表示。
    – 哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和存储的,执行时可以预先读取下一条指令。
    哈佛结构是指程序和数据空间独立的体系结构,目的是为了减轻程序运行时的访存瓶颈。
  • 按字长分为8位、16位、 32位和64位。
  • 哈佛结构(Harvard architecture)是一种将程序指令储存和数据储存分开的存储器结构。
  • 冯.诺伊曼结构(von Neumann architecture),也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的电脑设计概念结构。
  • 嵌入式处理器的体系结构按指令集可分为两大类:复杂指令集结构(CISC)及精简指令集结构(RISC);
  • 按存储机制分为冯诺依曼结构及哈佛结构;
  • 按不同内核系列可分为51、AVR、MSP430、MIPS、PowerPC、MC68K、ARM等。
  • 其中,PowerPC、MC68K、MIPS采用RISC、哈佛结构,ARM也采用RISC,多数为哈佛结构。

数据处理操作

在这里插入图片描述

寄存器

ARM 处理器一般共有 37 个寄存器,其中包括:
(1) 31 个通用寄存器,包括 PC(程序计数器)在内,都是 32 位的寄存器。
(2) 6 个状态寄存器,都是 32 位的寄存器。
ARM 处理器共有 7 种不同的处理器模式:

  • 用户模式(User)
  • 快速中断模式(FIQ)
  • 普通中断模式(IRQ)
  • 管理模式(Svc)
  • 数据访问中止模式(Abort)
  • 未定义指令中止模式(Und)
  • 系统模式(Sys)
    在这里插入图片描述
  • R0~R3 主要用于子程序间传递参数
  • R4~R11 主要用于保存局部变量
  • 在Thumb 程序中,通常只能使用 r4~r7 来保存局部变量
  • R12 用作子程序间 scratch 寄存器,即 IP 寄存器
  • R13 通常用做栈指针,即 SP
  • R14 寄存器又被称为连接寄存器 LR,用于保存子程序以及中断的返回地址
  • R15 用作程序计数器 PC,由于 ARM 采用了流水线机制,当正确读取了 PC 的值后,该值为当前指令地址加 8 个字节,即 PC 指向当前指令的下两条指令地址, PC = 当前程序执行地址 + 8个字节.
  • CPSR和SPSR都是程序状态寄存器,其中SPSR是用来保存中断前的CPSR中的值,以便在中断返回之后恢复处理器程序状态

CPSR(32位)

  • 状态寄存器就是CPSR(current program status register)寄存器
  • 程序状态寄存器CPSR在用户级编程时用于存储条件码:
    – CPSR包含条件码标志,中断禁止位,当前处理器模式以及其他状态和控制信息。

在这里插入图片描述
在这里插入图片描述

  • CPSR的低8位(包括I、F、T和M[4:0])称为控制位,程序无法修改,除非CPU运行于特权模式下,程序才能修改控制位!
  • N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行!
    各个条件码的含义如下:

N:在结果是有符号的二进制补码情况下,如果结果为负数,则N=1;如果结果为非负数,则N=0。

Z:如果结果为0,则Z=1;如果结果为非零,则Z=0。

C:其设置分一下几种情况:

对于加法指令(包含比较指令CMN),如果产生进位,则C=1;否则C=0。
对于减法指令(包括比较指令CMP),如果产生借位,则C=0;否则C=1。
对于有移位操作的非法指令,C为移位操作中最后移出位的值。
对于其他指令,C通常不变。

V:对于加减法指令,在操作数和结果是有符号的整数时,如果发生溢出,则V=1;如果无溢出发生,则V=0;对于其他指令,V通常不发生变化。
在这里插入图片描述

CPSR_CXSF

在这里插入图片描述

大小端模式

  • 大端模式
    所谓的大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中.
  • 小端模式
    所谓的小端模式(Little-endian),是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中.
    在这里插入图片描述

USB

  • USB接口提供了内置电源,主机的USB接口向从设备提供电源;
  • USB总线接口支持设备的即插即用和热插拔功能;
  • USB2.0采用半双工差分方式传送信息;
  • 目前USB2.0的速度为480Mb/s,USB3.0达到5Gb/s即640MB/s;
  • USB2.0的最大传输带宽为480Mbps(即60MB/s),而USB3.0的最大传输带宽高达5.0Gbps(500MB/s)。请注意5Gb/s的带宽并不是5Gb/s除以8得到的625MB/s而是采用与SATA相同的10 Bit传输模式(在USB2.0的基础上新增了一对纠错码),因此其全速只有500MB/s。
  • USB3.0利用了双向数据传输模式,而不再是USB2.0时代的半双工模式;
  • USB OTG的作用是可以摆脱主机,直接在具有OTG的USB总线上完成点对点通信,实现在没有主机的情况下从设备之间直接进行数据传送

操作系统

实时操作系统(RTOS)是一种专门服务于实时系统应用请求的操作系统。它的实时性能指标主要根据三个指标来衡量

  • 响应时间
  • 吞吐量
  • 生存时间

在实时系统中,在给定时间内系统可以处理的事件总数称为吞吐量;
实时系统中的另一个指标用于衡量输入数据的有效等待时间是生存时间,超过了这个时间,处理器即使接收到输入数据,也不能够给出有用的输出数据。

实时操作系统特征

IEEE的实时UNIX分委会认为实时操作系统应该具备7个特征:

  • 具有异步I/O和中断处理能力;
  • 任务切换时间和中断延迟时间确定;
  • 优先级中断和调度;
  • 抢占式调度;
  • 内存锁定;
  • 连续文件
  • 同步;
    IEEf(美国电气电子工程师会)给出的实时系统定义是:那些正确性不仅取决于计算的逻辑结果,也取决于产生结果所花费的时间的系统。因此实时系统对外界的响应是否正确不仅取决于功能正确性,而且取决于时间正确性。

强实时操作系统

一般按照对外部事件的响应时间快慢,将嵌入式操作系统分成强实时型和普通实时型。
强实时嵌入式操作系统有

  • VxWorks
    – VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统.
  • pSOS
    – pSOS是美国系统集成公司(Integrated Systems, Inc. 简称ISI公司)根据几十年从事嵌入式实时系统理论研究与实践活动而设计开发的,该公司已经被风河公司(windriver)兼并.
  • μC/OS-II
    – μC /OS-II是一个完整的、可移植、可固化、可裁剪的抢占式实时多任务内核。μC/OS-II绝大部分的代码是用ANSII的C语言编写的,包含一小部分汇编代码,使之可供不同架构的微处理器使用.

实时系统的属性包括可靠性、可预测性和时间约束性。

μC/OS-II

  • uC/OS-II操作系统的任务构成。主要由三部分构成:程序代码任务堆栈任务控制块

  • μC/OS-II是抢占式实时操作系统内核,只能管理64个任务

  • 目前的版本保留8个任务给系统

  • 用户编写的应用程序最多可以有56个任务

  • 不支持时间片轮转调度法,因此赋给每个任务的优先级是不相同的

  • 每个任务拥有自用栈

  • μC/OS-II允许中断嵌套,嵌套层数可达255层。

  • uC/OS-II能够提供周期性时钟信号(即所谓的时钟节拍) ,用于实现任务的正确延时和超时确认。节拍率应在每秒10次到100次之间,即10~ 100Hz.

  • μC/OS-II内核只提供任务调度任务间通信与同步任务管理时间管理存储管理等基本功能,资源消耗非常小

  • uC/OS-II系统内核所提供的5个基本功能:任务管理任务间通信与同步任务调度时间管理内存管理

  • 移植时需要修改的文件
    – OS_CPU.H
    – OS_CPU_A.S
    – OS_CPU_C.C

  • 在uC/OS-II操作系统中,内核对任务的管理通过任务控制块OS_TCB进行;

  • 任务切换也称为上下文切换,实际含义是任务的CPU寄存器内容切换。

  • 当uC/OS-内核决定运行别的任务时,正在运行任务的工作现场被保存到任务的自由栈之中。

  • 用户必须在多任务调度启动以后再使能时钟节拍中断;

  • 在中断返回之前,必须调用退出中断函数void OSIntExit(void)

  • 互斥信号量可以解决优先级反转问题;

  • 一个任务或中断服务子程序可以通过事件控制块来向另外的任务发信号。

  • uC/OS-II的任务间通信。uC/OS-II系统中主要利用

    • 信号量、
    • 互斥信号量、
    • 消息邮箱
    • 消息队列
    • 事件标志组
  • 进行任务间通信。

μC/OS-Il的层次位置,

基于μC/OS-II的嵌入式系统软件架构是一个建立在硬件系统上的四层软件结构,从上到下的顺序是:应用软件层,应用程序接口(API)层,uC/OS-ll内核,设备驱动层。

  • uC/OS-II基本不包合设备驱动程序,只是一个纯内核。

  • pCOS-H驱E动程序属于底层,需要系统开发商自行开发。

  • 使用pC/OS-I的栈空间校验函数,可以确定每个任务到底需要多少栈空间。

  • 基于uC/OS-II的嵌入式系统,其一般具有四层软件结构:最上层是应用软件层,然后是应用程序接口层,内核层,最下面是设备驱动层。

OSSched ()函数

OSSched ()函数是任务调度的前导函数,判断进行任务调度的三个条件是否满足。这三个条件是:

  • (1)中断嵌套层数共享全程变量OSItNesting=0,也就是所有的ISR已经执行完毕。
  • (2)任务调度加锁层数共享全程变量OSLockNesting=0,也就是调度没有被禁止。调度器上锁函数OSSchedlock()对共享变量OSlockNlestngt加1操作,用于禁止任务调度,直到任务完成后,再调用给调度器开锁函数OSSchedUnlock ()对共享变量OSLockNesting做i减1操作。
  • (3)就绪表查找到的最高优先级任务的优先级比当前任务的优先级高。

任务调度

uC/OS-II的任务调度就绪表。pC/OS-的就绪任务等级在就绪表中,OSRdytbI[]是就堵表的位图映像矩阵,每一位代表了一个优先级任务的就绪状态,称为就绪位,该矩阵最多可有64位。

  • uC/OS-Il支持两种方式的任务调度,分别是任务级的任务调度和中断级的任务调度

任务优先级

在这里插入图片描述

  • 创建任务时OSTaskCreate()的最后一个参数表示任务优先级,其值越小,优先级越高.
  • uC/OS-I预定义的两个系统任务中,优先级低的是空闲任务,优先级高的是统计任务。

任务状态

uC/OS-II的每个任务都是一个无限的循环。每个任务都处在以下5种状态之一的状态下。这5种状态是

  • 休眠态、
  • 就绪态、
  • 运行态、
  • 挂起态(等待某一事件发生)
  • 被中断态。
    uC/OS-II就绪表为每一个优先级的任务提供了一个位元,登记该任务是否就绪,就绪时取值为1,没有就绪时取值为0.

任务间通信

uCOS-II中有多种方法可以保护任务之间的共享数据和提供任务之间的通信。
其中主要有以下三种:

  • 利用宏OS _ENTER _CRITICAL()和OS _EXIT _CRITICAL()来关闭中断和打开中断
  • 利用函数OSSchedLock()和OSSchedUnlock()对任务调度函数上锁和开锁
  • 利用信号量、互斥信号量、邮箱和消息队列、事件标志组进行任务间通信

代码临界区

  • 代码的临界区(Critical Section)是指处理时不可分割的代码。

  • 为确保临界区代码的执行,在进入临界区之前必须关中断,执行完临界区代码之后要立即开中断。

  • uC/OS-系统调用宏OS_ENTER_CRITICAL()执行关中断操作。

  • 代码的临界区是指处理时不可分割的代码;一旦这部分代码执行,不允许任何中断打入。任务级的调度是由函数OSSchedLock()完成的。

常用函数

  • OSInit() 系统初始化
  • OSTaskCreate() 创建任务
  • OSStart() 开始任务调度
  • OSTaskDel() 删除任务
  • OSTaskSuspend() 任务挂起
  • OSTaskResume() 任务恢复
  • OSTimeDly() 延时
  • OSTimeDlyHMSM() 延时
  • OSTimeDlyResume() 延时唤醒
  • OSSemCreate() 创建信号量
  • OSSemDel() 删除信号量
  • OSSemPost() 释放信号量
  • OSSemPend() 等待信号量
  • OSSemAccept() 请求/等待信号量
  • OSSemQuery() 查询信号量
  • OSMutexCreate() 创建互斥信号量
  • OSMutexDel() 删除互斥信号量
  • OSMutexPost() 释放互斥信号量
  • OSMutexPend() 等待互斥信号量
  • OSMutexAccept() 请求/等待互斥信号量
  • OSMutexQuery() 查询互斥信号量
  • OSFlagCreate() 创建事件标志组
  • OSFlagDel() 删除事件标志组
  • OSFlagPost() 释放事件标志组
  • OSFlagPend() 等待事件标志组
  • OSFlagAccept() 请求/等待事件标志组
  • OSFlagQuery() 查询事件标志组
  • OSMboxCreate() 创建消息邮箱
  • OSMboxDel() 删除消息邮箱
  • OSMboxPost() 释放(发送)消息邮箱
  • OSMboxPend() 等待(接收)消息邮箱
  • OSMboxAccept() 请求消息邮箱
  • OSMboxQuery() 查询消息邮箱
  • OSQCreate() 创建消息队列
  • OSQDel() 删除消息队列
  • OSQPost() 释放(发送)消息队列
  • OSQPostFront() 释放(发送)消息队列(从消息队列头部插入)
  • OSQPend() 等待(接收)消息队列
  • OSQAccept() 请求消息队列
  • OSQQuery() 查询消息队列
  • OS_TASK_SW() 任务级的任务切换
  • OSIntExit() 中断返回前调用 ,导致OSIntNesting + 1
  • OSIntEnter() 进入中断调用,导致OSIntNesting - 1
  • OSSchedLock() 任务调度器上锁
  • OSSchedUnlock() 任务调度器解锁

VxWorks

VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS) ,是嵌入式开发环境的关键组成部分,支持基于抢占式优先级调度的任务管理。
它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空航天等高精尖技术及实时性要求极高的领域中。

  • VxWorks操作系统属于硬实时微内核嵌入式操作系统。

Ting OS

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

  • 轻线程
  • 主动消息
  • 事件驱动
  • 组件化编程。

Android

Android(安卓)是一种以Linux为基础的半开放源代码操作系统,主要用于移动便携设备;如果使用不同的软件开发包,则使用的编程语言也不同。
谷歌公司不对基于Android操作系统的第三方软件进行严格控制,从而促使第三方应用软件发展迅速。

从低层到高层依次是

  • Linux内核、
  • 系统运行库、
  • 应用程序框架(Application Framework)
  • 应用程序四层。

iOS

iOS的系统架构分为四个层次;

  • 核心操作系统层(Core OS layer)、
  • 核心服务层(Core Services layer)、
  • 媒体层(Medialayer)
  • 触控界面层(Cocoa Touch layer,Cocoa是苹果公司为MacQSX所创建的面向对象编程环境)。

QNX

QNX是由加拿大QSSL公司(QNXSoftware System Ltd.)开发的分布式实时操作系统,
符合POSIKA基本标准和实时标准,使其应用可以方便的进行移植;
它具备一个很小的内核,即微内核的操作系统;
内核提供4种服务︰

  • 进程调度、
  • 进程间通信、
  • 底层网络通信、
  • 中断处理。

HAL硬件抽象层

  • 硬件抽象层(HAL)最早由微软公司在研发Windows NT操作系统时提出,在嵌入式领域,硬件抽象层主要用来简化嵌入式操作系统的移桔作业,其定义与微软公司在indowsSNT开发动的实现目标基本一致,指的是嵌入式软件中直接访问底层硬件的例程集合。
  • 在嵌入式系统软件结构中增加的HAL位于硬件电路板和操作系统内核之间,它是嵌入式硬件电路板的最基本软件
  • HAL的函数是移植操作系统的基础。
  • 在嵌入式领域,HAL主要用来简化嵌入式操作系统的移植作业,它对底层硬件的初始化程序或者控制程序进行封装,向上提供了访问底层硬件的函数接口,隐藏了硬件的差异性,避免了操作系统对硬件的直接访问。
  • HAL位于内核操作系统和硬件平台之间。

文件说明

  • OS_CPU_C.C用于创建任务的自用找空间、定义用户接口hook函数原型等。
  • OS_CORE.C为核心调度代码,功能包括系统初始化、启动多任务调度开始运行、任务创建管理与调度、TCB初始化、就绪表初始化、ECB初始化、任务事件就绪表、空闲任务等。
  • OS_MEM.C为内存管理,包括创建分区、获得存储块等。
  • OS_TASK.C为任务管理,包括改变一个任务的优先级、创建或者删除—个任务、挂起—个任务、恢复一个被挂起的任务等。

空白数据链表

在uC/OS-II中,OSInit())函数先建立最初的任务就绪表,然后建立4个空白的数据链表。它们分别是

  • 任务控制块链表、
  • 事件控制块链表、
  • 标志链表、
  • 内存控制块链表。

RTOS特点

RTOS响应中断请求并且完成相应中断服务子程序(ISR)的时间非常快,且这个时间必须具有某种程度的一致性。精细衡量这个时间一致性变化的术语是抖动。

RTOS(实时操作系统)有3个主要的实时指标:响应时间、吞吐量和生存时间。响应时间的具体指标是:中断延迟时间和任务切换时间。

RTOS响应时间的具体指标是:

  • 中断延迟时间(Interrupt Latency)

  • 任务切换时间(Task Switching Latency)

  • RTOS的实时性能指标,其中响应时间的具体指标有中断延迟时间和任务切换时间。从接收到可屏蔽中断清求信号到操作系统作出响应并转入中断服务程序所需要的最长时间,称为中断延迟时间。该时间包括两部分:

  • 一是最长关中断时间,是指系统因执行临界区代码等原因不允许响应中断清求的时间;

  • 二是从硬件开始响应中断到开始执行中断服务程序第一条指令

嵌入式系统

通常嵌入式系统的软件配备没有通用系统多;嵌入式系统软件和通用计算机系统软件都可以实现图形用户界面,嵌入式系统应用软件的特点是∶内部结构精简化、代码轻量化、占用存储资源少;多数嵌入式系统具有时间约束性,因而至少是软实时系统,通用计算机系统像因特网域名服务系统也是典型的实时系统。

互联网接入技术

互联网接入技术。用户安装ADSL时,只需在已有电话线的用户端配置一个ADSLMODEM和一个语音分离器,计算机中需要安装一块以太网网卡。

堆层式软件架构的组成

堆层式软件架构的组成,分为四层,从低层到高层分别是

  • 内核、
  • 系统运行库、
  • 应用程序框架
  • 应用。

嵌入式WEB服务器

  • 典型的嵌入式WEB服务器应用软件至少有4个重要的组件:客户端浏览器,WEB服务器、WEB页面、设备操控程序等.
  • 其中WEB页面是用于设备操控命令提交或设备状态信息显示
    的人机界面,它需要通过CGI接口来与设备操控程序进行信息交互。

计算机网络组成

  • 计算机网络一般由计算机等智能电子设备、数据通信链路、通信协议和网络软件等组成。网络中的每个终端设备都需要配置以太网卡,每个网卡都有全球唯一的48个二进制位组成的MAC地址。
  • 以太网交换机是一种高速电子开关,连接在交换机上的所有终端设备都可同时相互通信。因为交换机从发送设备接收了一帧数据之后,它会直接按照目的地址发送给接收终端,而不向其他无关终端设备发送。

单(宏)内核与微内核

单内核

单内核结构是传统操作系统采用的结构,也称为宏内核(Macro Kernel).
其缺点是

  • 占内存空间大
  • 缺乏可扩展性
  • 维护困难
  • 任务执行时间的可预测性较低
  • 可靠性较低
  • 排除故障和增加新功能需要重编译
    其优点是
  • 应用程序生成效率高
  • 系统花在内核功能切换上的开销非常小
  • 对外来事件反应速度快
  • 操作系统内核的运行效率高

微内核

微内核操作系统是对单内核做了结构改进后推出的

  • 内核小巧
  • 传统操作系统内核中的许多部分都被移出内核
  • 采取服务器方式实现;
  • 接口一致,所有进程请求使用统一接口,
  • 进程不区分内核模式和用户模式服务
  • 各个功能模块之间松散耦合,只完成服务功能
  • 系统管理功能交给一 个或多个特权服务程序
  • 微内核功能扩充方便,但是各个功能之间的切换而引起的开销比较大

微内核操作系统是对单内核做了结构改进后推出的,在这种操作系统内核机构中,将任务管理、调度器、中断管理和进程间通信模块编译成一个功能精简、空间紧凑的模块,称为微内核;内核小巧,传统操作系统内核中的许多部分都被移出内核,采取服务器方式实现;所有进程请求使用统一接口,进程不需要区分内核模式和用户模式服务。

  • 所谓微内核,是将任务管理、调度器、中断管理和进程间通信模块编译成一个功能精简、空间紧凑的模块。

属于微内核的典型嵌入式操操作系统

RTAL是典型的嵌入式Linux操作系统之一

属于微内核结构的典型嵌入式操作系统有

  • Symbian
  • VxWorks
  • QNX
  • μC/OS-II
  • iOS
    等。

属于单内核的典型操作系统

  • 单内核结构是传统操作系统采用的结构,也称为宏内核(Macro Kernel)
  • Unix、
  • 嵌入式linux、
  • WinCE、
  • MacOS、
  • Android OS
  • DOS操作系统
    都是典型的单内核操作系统

BootLoader

U-Boot

U-Boot,全称Universal Boot Loader,是德国DENX公司开发的,用于多重嵌入式CPU的Bootloader程序,它遵循GPL条款, 源代码完全开放。从FADSROM、 8XxROM、
PPCBOOT逐步发展演化而来

U-Boot是一种通用的引导加载程序,对PowerPC系列处理器支持最为丰富,对Linux操作系统的支持最为完善。

U-Boot以POCBoot和ARMBoot计划为基础。
支持

  • Power PC系列处理器
  • X86
  • ARM
  • Mips
  • Alpha
  • IA64
  • SupcrHSPARC
    等多种常用体系结构处理器.

系统中引导加载程序主要完成

  • 加电自检
  • 外设存在自检
  • 内存地址映射
  • 初始化外围设备
  • 内存寻址定位
  • 加载并启动操作系统

Botoader的基本步骤

引导加载程序所完成的相应操作。嵌入式系统加电后执行的第一批最初操作称为引导或者自举,对应的程序称为引导程序或者引导加载程序。

引导加载程序主要完成内存加电自检,外设存在自检,内存地址映射,初始化外围设备,内存寻址定位,加载和启动操作系统

Botoader的stage 1的基本步骤(按执行先后顺序列出)为:

  • 基本硬件初始化。
  • 为加款stage2准备RAM空间。
  • 拷贝stage2的执行代码到RAM空间中。
  • 设置栈区指计SP。
  • 跳转到stage2的C程序入口点。

常用函数名/宏名

中断和任务切换

  • OS _ENTER _CRITICAL()OS _EXIT _CRITICAL() 关闭中断和打开中断
  • 函数OSSchedLock()OSSchedUnlock() 对任务调度函数上锁和开锁
  • 真正实现任务切换的函数是OSCtxSw()
  • 任务级的调度是由函数OSSched() 完成
  • 中断级的调度是由函数OSIntExit() 完成

消息

  • OSQPend() 函数用来等待并获得消息.
  • OSQPost() 函数用来发送消息.

事件控制块

μC/OS-II的事件控制块有4种类型,需要使用4个不同的函数来创建。
4个不同的函数分别是:

  • OSSemCreate ()
  • OSMutexCreate ()
  • OSMboxCreate ()
  • OSQCreate()

移植相关

  • OS_CPU.H
  • OS_CPU_A.S
  • OS_CPU_C.C

其他

  • 按照IC设计文件的类型,IP核通常分为三种:软核、固核和硬核
  • 当前数码相机中用于存储相片的大多是闪存卡,即Flash存储器
  • WLAN所采用的主要通信协议是802.11;数据传输速率可达到11 Mbps. 54Mbps、 108Mbps甚至更高.

经典ARM处理器有7种异常:主要包括

  • 复位RESET
  • 未定义指令UND
  • 软件中断SWl
  • 指令预取中止PABT
  • 数据访问中止DABT
  • 外部中断请IRQ
  • 快速中断FIQ
指令作用
CPSID I关中断
CPSIE I开中断
CPSID F关异常
CPSIE F开异常

I:IRQ中断; F:FIQ中断

当调用子程序时,子程序调用指令为BL fun_name
子程序返回调用程序的指令为MOV PC,LR(注意逗号)

按照AMBA总线规范,基于ARM内核的嵌入式处理器芯片采用系统总线与外围总线两层结构的方式构建片上系统。其中的系统总线主要用于连接高带宽快速组件。

嵌入式系统的存储器以半导体存储器为主,FRAM和MRAM,分别称为铁电随机存取存储器和磁性随机存取存储器

l2C总线的仲裁机制。I2C总线被启动后,多个主机在每发送一个数据位时都要对SDA信号线电平进行检测,只要检测的电平与自己发出的电平相同就会继续占用总线。
总线的控制遵循"低电平优先”的原则。

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

基于操作系统的外围工具软件运行在嵌入式系统上,往往具有内部结构精简代码轻量化占用存储资源少的特点。

任务时限的两种类型。实时系统的任务时限有两种:截止时间,也就是任务开始执行时间到任务必须完成的时间间隔。任务执行预设时间,或者叫做任务最快完成时间,这是无中断响应情况下的任务最快执行时间。

实时系统对时间约束要求的严格性,使可预测性成为实时系统的-项重要性能要求,它是指RTOS能够对外部事件的响应时间实时任务的执行时间进行判断,以确定被事件触发的实时任务能否在规定的时间内完成。

实时系统按响应时间一般分成三类:

  • 强实时系统,其响应时间一般在毫秒级或微秒级;
  • 普通实时系统,其响应时间一般在秒级;
  • 弱实时系统,其响应时间一般在数十秒级;

一般嵌入式系统的开发过程,通常分为:

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

等4个阶段。

  • 系统设计也称为概要设计或总体设计,这个阶段要根据视格说明书中所描述的系统需要实现的功能,确定如何实现这些功能的硬件和软件结构,即围哪些功能由硬件完成,哪些功能由软件完成,还必须同时描述非功能上的需求如何实现,即不仅需要描述系统需求如何实现,且必须要符合系统需求中关于处理速度、功耗、成本和其他性能的约束;在
  • 构件设计阶段,设计者需要设计或选择符合系统结构和规格说明中所需要的具体构件,既包括硬件也包括软件模块,
  • 系统集成时,应该分步的、按阶段的构建系统,并且每次只对一部分构建或漠块所集成的系统进行测试,各部测试完成后,再整体测试。

嵌入式系统的分类

  • 按系统的软硬件技术复杂度,嵌入式系统分为低端系统、中端系统和高端系统。

嵌入式系统基本组成

  • 在嵌入式操作系统的核心部分称为内核(kernel),而对硬件设备进行控制和管理的程序模块称为驱动程序(driver)

以太网传输数据计算

10Mbps理论速度是每秒1.25MB,算上损耗后在计算时当做1Mbyte每秒计算.

最小系统

嵌入式最小硬件系统一般包括

  • 嵌入式处理器
  • 时钟电路
  • 电源电路
  • 复位电路
  • 存储器
  • 调试测试接口。

前向通道和后向通道

  • 前向通道通常指的是输入接口,由模拟量输入接口和数字量输入接口组成
  • 模拟输入接口包括传感器,信号调节电路(滤波,放大器等), A/D转换器等构成
  • 后向通道是输出接口,由模拟量和数字量接口组成,
  • 包括D/A转换器,功率放大器,执行器等

系统总线相关

按照AMBA总线规范,以ARM内核为基础的嵌入式处理器芯片采用系统总线与外围总线两层结构的方式构建片上系统。
连接到系统总线上高带宽组件主要包括:

  • 电源管理与时钟控制器
  • 测试接口
  • 外部存储器控制接口
  • DMA控制器
  • USB主机
  • 中断控制器等
    AMBA是ARM公司为连接ARM内核与处理器芯片中的其他各种组件而定义的总线规范,即先进的微控制器总线体系结构

总线带宽和存储器带宽

  • 存储器带宽计算公式: (储存器工作频率MHzx 数据线宽度/8)x 1B/s= 带宽 MB/S;
  • 存储器总线采用串行总线,以10位为一个数据帧(包含一个字节的存储数据),则总线带宽=总线频率/10。[总线带宽=总线频率/数据帧大小]

跳转进入操作系统内核

  • 指令BL_ main来引导应用程序的主函数main()
  • 引导加载程序在引导加载操作系统时,设置相关的寄存器和资源,跳转到操作系统所在的空间,执行其引导,这个过程中可以给内核传递参数,可以控制系统启动的模式。

网页设计

  • 网页设计时通常采用HTML语言来进行编程。
  • 客户机一般用浏览器访问因特网。

Web服务器和CGI概述

CGI概述
  CGI(公用网关接口)规定了Web服务器调用其他可执行程序(CGI程序)的接口协议标准。Web服务器通过调用CGI程序实现和Web浏览器的交互,
也就是CGI程序接受Web浏览器发送给Web服务器的信息,进行处理,将响应结果再回送给Web服务器及Web浏览器。CGI程序一般完成Web网页中表单(Form)数据的处理、数据库查询和实现与传统应用系统的集成等工作。CGI程序可以用任何程序设计语言编写,如Shell脚本语言、Perl、Fortran、Pascal、C语言等。但是用C语言编写的CGI程序具有执行速度快、安全性高(因为C语言程序是编译执行且不可被修改)等特点。

  • CGI接口程序可以用任何语言编程,在HTML网页中嵌入CGI接口程序可以完成与设备操控组件的信息交互

家庭服务网关上的应用程序主要包括应用网页设计CGI接口程序设计2大部分。
其应用网页设计时通常采用HTML语言来进行编程。

在这里插入图片描述

数据位宽

  • 控制芯片AX88796的数据总线宽度为16位。
  • 存储器带宽与存储器总线的工作频率(周期)有关,也与数据线的位数(位宽、宽度)和每个总线周期的传输次数有关。
  • 存储器容量是指每一个存储芯片或模块能够存储的二进制位数,大小取决于存储单元的个数和存储器各单元的位数。容量V=2m×n,其中m是地址线条数,n是数据线位数,本题中V=2^20×16=16 Mb=2MB.

内存及存储器相关

  • DDR是Dual Data Rate的缩写,指双倍数据速率;
  • DDR2使原来DDR可预读取2位变成可预读取4位(或8位),把DDR的数据传输速率又提高了两倍(四倍);
  • DDR3是DDR2 SDRAM(同步动态动态随机存取内存)的后继者(增加至八倍;
  • DDR4相比DDR3最大的区别有三点:16bit预取机制(DDR3为8bit),同样内核频率下理论速度是DDR3的两倍;更可靠的传输规范,数据可靠性进一步提升;工作电压降为1.2V,更节能。
  • 磁性随机存取存储器MRAM是一种非易失性存储器,拥有SRAM的高速存取能力,以及DRAM的高集成度;
  • 铁电存储器FRAM既具有只读存储器非易失性的特点,又具有随机存储器可快速随机读写的特点,而且速度快,功耗低;

嵌入式系统使用的存储器有多种类型,按照其存取特性可分为

  • 随机存取存储器(RAM)
  • 只读存储器(ROM)

按照所处物理位置可分为

  • 片内存储器(芯片内置的存储器)
  • 片外存储器(外部扩展的存储器)
  • 外部存储设备

按照存储信息的不同可分为

  • 程序存储嚣
  • 数据存储器。

存储器容量是指每一个存储芯片或模块能够存储的二进制位数,它以存储1位二进制位为最小单位(b),容量单位有

  • 字节(B)、

  • 千字节(KB)、

  • 兆字节(MB)、

  • 吉字节(GB)、

  • 太字节(TB)、

  • 拍字节(PB)、

  • 艾字节(EB)、

  • 泽字节(ZB)、

  • 尧字节(YB)等.
    这些容量单位之间的相互关系均以1024倍表示;对于外存容量而言,这些容量单位之间的相互关系却以1000倍表示。

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

  • NANDFlash主要用于片外程序存储器,为了节省引脚,降低体积,地址线和数据线一般采用分时复用技术。ALE、CE、RE、RB分别表示地址锁存允许、低电平有效的芯片使能低电平有效的读使能、准备就绪/忙输出。

  • 存储器保护单元(MPU)是对存储器进行保护的可选组件。它允许ARM处理器的4GB地址空间定义8对域,分别控制8个指令和8个数据内存区域。

触摸屏

  • 目前的触摸屏有两种形式,一种是电阻式触摸屏(俗称软屏),另一种是电容式触摸屏(俗称硬屏)。
  • 电阻式触摸屏是一种电阻传感器,它将矩形区域中触摸点(Y)的物理位置转换为代表X坐标和坐标的电压,基本原理是利用压力感应进行控制,结构简单,价格低。
  • 电容式触摸屏结构复杂,价格高,带多点触摸或滑动操作的触摸屏均属于电容式。
  • LCD显示屏自身不带控制器,没有驱动电路,仅仅是显示器件,价格最低
  • LCD显示模块内置LCD显示屏、控制器和驱动模块,有字符型、有图形点阵型等
  • PC机通常使用的是LCD显示器,除具备显示屏外,还包括驱动器、控制器以及外壳等,是完整的LCD显示设备

实时时钟 RTC

  • 实时时钟(RTC)组件是一种能提供日历付钟等功能的内置硬件.
  • S3C2410的RTC具有的主要功能包括BCD数据、闰年产生器、告警功能、独立的电源端口、支持毫秒滴答时钟中断作为RTOs核的滴答时钟、循环复位功能等。
  • 实时时钟摸块RTC采用单独的供电引脚和单独的时钟源,实时时钟控制高存器RTCCON共4位,控制时钟计数复位、BCD计数、时钟选择以及确定是否允许RTC读/写等;
  • RTC内部的数据寄存器都是8位寄存器,存放相应的BCD码值。

电源管理

S3C2410内部的电源管理模块所具有的四种模式:

  • 正常模式
  • 慢速模式
  • 休眠摸式(空闲模式)
  • 掉电模式
  • 慢速模式下不使用PLL时钟(MPLL关闭不使用),这样功耗降低,仅使用外部晶体或外部时钟直接提供给其他组件使用,不通过锁相环电路(低速情况无需锁相处理)
  • 休眠摸式下,电源管理模块仅断开ARM内核时钟FCLK,让CPU处于休期状态,但仍为外围硬件组件提供时钟;
  • 掉电模式下电源管理模块将断开内部电源,除非唤醒逻辑有效,否则内核不产生功耗。

电源管理模块提供了4种模式: Normal模式、Slow模式、Idle模式、Power_Off模式。

  • Normal Mode
    该模式下如果所有外围设备都打开时电流消耗最大,允许用户通过软件关闭外围设备达到省电目的。
  • Slow Mode
    不采用PLL的模式,能量消耗仅取决于外时钟的频率。由外部提供的时钟源作FCLK。
  • Idle Mode
    关掉了给cpu的FCLK时钟,但外围设备时钟仍存在,任何到CPU的中断请求可以将cpu唤醒。
  • Power_off Mode
    这种模式关掉了内部供电,仅有给wake_up部分的供电还存在。可以通过外部中断或实时时钟中断可以唤醒。

汉字编码

  • 我国大陆地区目前广泛使用的汉字编码国家标准有GB2312和GB1 8030两种

  • 常用汉字采用2个字节表示。

  • GB2312采用双字节进行存储和传输汉字

  • GB18030采用双字节或四字节存储和传输汉字

  • Unicode/UTF-8采用三个字节存储和传输汉字

  • Unicode/UTF-16采用双字节可变长编码

  • GB2312中的所有字符在GB18030中也都存在,且编码相同

  • GB18030与UCS/Unicode均包含中日韩统—汉字(CJK)约7万多个

  • UTF-8和UTF-16是实现UCS/Unicode的两种不同的编码方案

  • GB18030字符集与国际标准UCS/Unicode字符集基本兼容。

  • GB18030采用双字节编码表示汉字,而UCS/Unicode在表示汉字时有两种不同的编码方案,UTF-8使用3字节表示,UTF-16则采用双字节编码

GPIO

  • S3C2410的GPIO端口有GPA/GPB/GPC/GPD/GPE/GPF/GPG/GPH多个并行I/O接口。

串口

S3C2410有三个UART接口UARTO、UART1和UART2,
其对应的线路控制寄存器为ULCON0、ULCON1和ULCON2用于确定传输帧的格式;
UART的波特率由除数寄存器决定,也取决于外部时钟,还可以是UEXTCLK,由相应控制寄存器决定;
通过对UART的控制器寄存器进行编程可确定每个UART的相关中断是否允许;

中断

SRCPND相应的位被写1,通过优先级仲裁当前最高优先权的S3C2410有两个中断挂起寄存器:

  • 源中断挂起寄存器SRCPND和中断挂起寄存器INTPND;
  • 当多个中断源请求服务时中断源对应的INTPND位写入1;
  • 每一个ARM芯片,除了内核异常外,还有多种内置硬件组件的中断,基于ARM内核的嵌入式芯片中的中断控制器的功能是对芯片中相关硬件组件的中断请求进行管理和控制,一般采用向量中断(VIC)或嵌套向量中断(NVIC)方式管理中断。

嵌入式框图

在这里插入图片描述
在这里插入图片描述

路由器

路由器是一台高性能的嵌入式计算机系统,是遵循IP协议把异构网络互相连接起来的关键设备,工作在网络层,主要有以下几种功能:

  • 第一,网络互连,实现不同网络互相通信;
  • 第二,数据处理,提供包括分组过滤、分组转发、优先级、复用、加密、压缩和防火墙等功能,
  • 第三,网络管理,路由器提供包括配置管理、性能管理、容错管理和流量控制等功能
    路由器是用于连接异构网络的设备,工作在网络层,屏蔽不同物理网络的差异,确保异构网络的数据交换顺畅进行。路由器拥有多个输入端口和输出端口,可以连接多个网络,或者多个路由器。一个路由器为每个端口分配一个IP,同一个路由器拥有多个不同的IP地址。转发数据时,路由器按照端口接入的网络号判断。

HDMI

高清晰度多媒体接口(英文: High Defiriton Mutimnedia lterface, HDMI)是一种数字化视频/音频接口技术,是适合影像传输的专用型数字化接口,其可同时传送音频和影像信号,最高数据传输速度为10.2Gb/s;目前已有多个ARM芯片内置了HDMI控制器接口。

CAN

CAN总线是针对实时性要求很强的工业控制领域推出的适应多主系统的有线通信接口,能够实现多主通信;
CAN总线的数据帧由7个不同的域组成,其中域的长度可选为0-8位;
CAN总线的数据帧由7个不同的域组成:

  • 帧起始、
  • 仲裁域、
  • 控制域、
  • 数据域、
  • CRC域、
  • 应答域、
  • 帧结尾。

CAN协议采用CRC检验并可提供相应的措误处理功能,保证了数据通信的可靠性,一般面向控制应用领域的ARM芯片内部已经嵌入了CAN总线控制器,外部仅需要连接CAN的收发器即可构建完整的CAN网络。

无线局域网

所谓“热点”其正式的名称是无线接入点,它实际上是一个无线交换机或无线路由器,室内覆盖距离一般仅为30m左右,室外通常可达100~300m

局域网按照传输介质使用的访问控制方法,可以分为以太网、FDDI网和令牌网,目前广泛使用的是以太网,它以集线器或交换机为中心构成。

IP协议第4版(IPv4)规定,每个IP地址使用4B(32个二进制位)表示,其中包含有网络号和主机号两部分。IP地址分为A类、B类、C类三个基本类,另有两类分别作为组播地址和备用地址(D类和E类)。C类网络地址数量较多,适用于小规模的局域网络,每个网络最多只能包含254台计算机。

目前采用无线方式接入互联网的技术主要有三类:

  • 无线局域网(WLAN)接入;

  • GPRS移动电话网接入;

  • 3G移动电话网接入。
    其中第一类必须在安装有接入点(AP)的热点区域中才能接入。

  • 无线局域网采用的协议主要是IEEE802.11a,俗称WiFi。其中最早的IEEE.802.11b(2.4GHz频段)采用调频扩频技术传输速度可根据环境而调整。

  • Bluetooth最早是由瑞典爱立信公司提出的,后来被IEEE作为个人无线区域网协议(IEEE 802.15)的基础。

  • 局域网采用分组交换技术。发送设备必须把要传输的数据分成小块(称为帧),一次只能传输1帧。

嵌入式虚拟仿真

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

文本

若根据数字文本是否具有排版格式来分,

  • 可分为简单文本(纯文本)
  • 丰富格式文本
    两大类;
    若根据文本内容的组织方式来分,可以分为
  • 线性文本
  • 超文本
    两大类。
    简单文本通常也称为纯文本,其文件后缀名是.txt

GPRS

GPRS是通用分组无线服务的简称,它是GSM移动电话用户可用的一种移动数据业务。通常支持用AT命令集进行呼叫、短信、传真、数据传输等业务。

图像处理

从现实世界中获得数字图像的过程称为图像的获取,使用的设备主要有数码相机和扫描仪两种。获取过程的核心是模拟信号的数字化。其处理步骤大体分为4步∶

  • 扫描,
  • 分色,
  • 取样,
  • 量化

无线传输

无线通信中,信息是通过电磁波进行传输的,可以省去线路的架设,允许终端设备在一定范围内移动,但是电波通过自由空间时能量较分散,传输效率低。
同时,无线通信存在着易被窃听、易受干扰等缺点。

IP核

  • IP核中的IP是中文知识产权的英文缩写;

SOC

  • 目前SoC芯片中32/64位CPU大多数采用的是ARM内核。

编码格式

  • 目前数字有线电视和卫星电视所传输的数字视频采用的编码格式是MPEG-2,
  • 在互联网视频应用中最新也是应用最多的视频编码格式是

TCP/IP

要想极大地发挥网络的作用又必须把许多同构和异构的网络互相连接起来,这就必须解决诸如计算机统一编址、数据包格式转换等一系列问题。解决这一问题的途径是使用TCP/IP中的IP协议(网络互连协议)和路由器(router)
以太网采用的通信协议是802.3,连接在以太网中的每台计算机必须至少有一个全球唯一的MAC地址。

互联的各个物理网络,它们使用的数据包(或帧)的格式可能互不兼容,因此不能将一个网络送来的包直接传送给另一个网络。为了克服这种异构性,IP协议定义了一种独立于各种物理网的数据包的格式,称为IP数据报(IP Datagram)。IP数据报由两部分组成:头部和数据区

中断助记符

ARM常用指令中的中断指令助记符。
ARM处理器异常中断指令中用于

  • 软中断的指令助词符为SWI,
  • 用于断点中断指令助词符为BKPT。

中断消耗时间周期

在ARM Cortex-M3中可实现中断嵌套,中断可以改为比之前的中断服务程序更高的优先级,并且可以在运行时改变优先级状态,

  • 使用末尾连锁连续中断需要消耗3个时钟周期,
  • 而普通中断需要32个时钟周期。

中断控制器

S3C2410中断控制器支持所有内置硬件各组件的硬件中断,复位后,除屏蔽寄存器初始值为全1外,其他寄存器初始值均为0;
S3C2410的中断源可以是有子寄存器的中断源,也可以是没有子寄存器的中断源,S3C2410中断控制寄存器中包含中断屏蔽寄存器和子源中断屏蔽寄存器,作为S3C2410中断控制高存器之一的中断模式高存器用于决定中断源的中断属于普通中断IRQ还是快速中断FlQ。

  • NVIC称为嵌套向量中断控制器,
  • WIC称为唤醒中断控制器。

数字信号处理器

数字信号处理器的英文缩写是DSP,是一种专用于数字信号处理的微处理器,指令系统中增加单指令多数据(SIMD)并行处理的特殊指令.

内存映射

在这里插入图片描述
在这里插入图片描述
上面的每个bank最大支持128M,除了bank0,其它的每个bank都支持8/16/32位操作,bank0只支持16/32位操作.
在这里插入图片描述

网络

TCP/IP

TCP/IP协议簇中的IP协议,在Internet中负责选择合适的路由,使发送的数据分组(packet) 能够正确无误地按照地址找到目的计算机
以太网采用的通信协议是802.3,连接在以太网中的每台计算机必须至少有一个全球唯一的MAC地址。

以太网数据帧

  • 前导码(7字节)
  • 帧起始定界符(1字节)
  • 目的MAC地址(6字节)
  • 源MAC地址(6字节)
  • 类型/长度(2字节)
  • 数据(46~1500字节)
  • 帧校验序列(4字节)
    https://blog.csdn.net/GarfieldGCat/article/details/81435742
    以太网采用的通信协议是802.3,连接在以太网中的每台计算机必须至少有一个全球唯一的MAC地址。

IP地址中A类、B类、C类地址的区别

1、IP地址表示方法不同:

A类

一个A类IP地址是指, 在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。如果用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成网络地址的最高位必须是“0”。A类IP地址中网络的标识长度为8位主机标识的长度为24位

B类

一个B类IP地址是指,在IP地址的四段号码中,前两段号码为网络号码。如果用二进制表示IP地址的话,B类IP地址就由2字节的网络地址和2字节主机地址组成,网络地址的最高位必须是“10”。B类IP地址中网络的标识长度为16位,主机标识的长度为16位。

C类

一个C类IP地址是指,在IP地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。如果用二进制表示IP地址的话,C类IP地址就由3字节的网络地址和1字节主机地址组成,网络地址的最高位必须是“110”。C类IP地址中网络的标识长度为24位,主机标识的长度为8位。
在这里插入图片描述

2、IP地址范围不同:

A类IP地址 地址范围从1.0.0.1到127.255.255.254
(二进制表示为:
00000001 00000000 00000000 00000001 - 01111111 11111111 11111111 11111110)。
最后一个是广播地址。
B类IP地址地址范围从128.0.0.1-191.255.255.254
(二进制表示为:
10000000 00000000 00000000 00000001 - 10111111 11111111 11111111 11111110)。
最后一个是广播地址。
C类IP地址范围从192.0.0.1-223.255.255.254
(二进制表示为:
11000000 00000000 00000000 00000001 - 11011111 11111111 11111111 11111110)。
最后一个是广播地址。

3、子网掩码不同:

A类IP地址的子网掩码为255.0.0.0

B类IP地址的子网掩码为255.255.0.0

C类IP地址的子网掩码为255.255.255.0

4、适用范围不同:

A类适用的类型为大型网络,A类网络地址数量较少,有126个网络,每个网络支持的最大主机数为256的3次方-2=16777214台;
B类适用的类型为中型网络,B类网络地址数量适中,有16384个网络,每个网络支持的最大主机数为256的2次方-2=65534台;
C类适用的类型为小型网络,C类网络地址数量较多,有209万余个网络,适用于小规模的局域网络,每个网络支持的最大主机数为256的1次方-2=254台。

开发工具

GUN

  • GNU是一种用于开发基于Linux操作系统的工具软件套件。
    它包括了编译器、连接器、调试器以及文本编辑器、语法除错等工具。
  • 其中GCC是编译器、GDB是调试器工具。
  • GCC是GNU套件中的编译连接器,它能编译C语言、汇编语言编目的程序代码
  • 设计者要对源程序进行调试通常需要在GCC命令中加入-g参数
  • 在GDB调试环境下
    file 命令是装入需要调试的可执行文件
    run命令执行当前被调试的程序

GCC调试

  • 要对源程序进行调试,通常需要在GCC命令中加入参数-g
  • GNU开发工具的使用,调试命令。其装入需要调试的可执行文件命令是file命令,终止当前被调试程序运行的命令是kill命令。

由于Linux操作系统中可执行文件没有统一的文件后缀,操作系统是从文件的属性来区分可执行文件和不可执行文件,的因此GCC生成可执行文件时若用户未指定文件名,则GCC生成一个名为a.out的可执行文件。

  • 针对ARM硬件平台的目标机,其GCC的基本命令格式是:
    arm_linux_gcc [options][filenames]
  • 利用GNU中的调试器GDB进行程序调试时,可用命令watch来观察被调试程序中的变量值。

RVDS

  • RVDS支持 所有ARM芯片,包括Cortex全系列,还支持其他内核的处理器,如51系列
  • RVDS中包括工程管理器、编译连接器、调试器和指令集仿真器
  • RVDS支持对Flash存储器的编程
  • RVDS编译的代码比ADS1.2编译的代码执行效率高

RVDS开发工具套件中,主要包括

  • 工程管理器(IDE)、
  • 编译连接器(RVCT)、
  • 调试器(RVD)
  • 指令集仿真器(RVISS)等。

RVDS调试暇支持硬件在线调试和软件仿真调试,通过它可以进行单步、断点调试,并观察程序运行中的变量、寄存器、主存储器单元等的内容,使设计者能够据此判断程序运行的状况是否正常。

ADS1.2工具软件

一个工程项目中至少应包含一个生成目标,ARM提供的可执行输出文件的模板包括了下面3个生成目标:

  • Debug、

  • Release、

  • DebugRel
    ADS1.2采用工程项目形式来管理应用程序中涉及的源文件、库文件、头文件等,工程项目中可以按照一定的逻辑关系来分组管理文件。
    当地址映射关系比较简单时,使用编译、连接选项来确定输入文件的连接顺序。
    当地址映射关系比较复杂时,使用scatter(分散加载)格式的文件来确定输入文件的连接顺序。
    利用ADS1.2工具来进行地址映射,即在编译连接其工程项目时,有两种方式,即

  • Simple连接类型

  • Scattered连接类型;
    在采用Scattered连接类型时,需要提供一个scatter格式的配置文件,该配置文件是一个文本文件,描述ARM连接器在完成连接操作时所需要的分组及定位信息等。
    一个scattr文件中通常要描述一个下载时域的

  • 首地址、

  • 域的大小、

  • 域的属性,
    以及若干个运行时域的

  • 首地址、

  • 域的大小、

  • 域的属性、

  • 包含的输入段
    等信息。

  • 在ADS1.2的集成开发环境中,若生成的输出文件需要包含所有的调试信息,那么,生成目标应该选择为Debug。

  • 若目标系统地址映射关系比较复杂时,应使用scatter格式的文件来说明地址映射方式。

使用ADS1.2工具软件对嵌入式系统进行开发时的相关设置。利用ADS12工具套件进行基于AM硬件平台的软件开发,在进行编译连接时,地址缺的连接类型有2种方式.
分别是

  • Simple连接类型
  • Scattered连接类型。
    采用Scattered连接类型时需要提供一个scatter格式的配置文件。

ADS1.2地址映射

嵌入式系统主要开发工具软件ADS1.2如何进行地址映射配置。
ADS1.2把目标文件中的信息按照3种存储区域类型来进行划分,即划分为

  • RO段
    只读的代码段和常量被称作 RO 段(ReadOnly);
  • RW段
    可读写的全局变量和静态变量被称作 RW段(ReadWrite);
  • ZI段
    RW段中要被初始化为零的变量被称为 ZI段(ZeroInit)。

对于加载域中的输出段,一般来说 RO 段后面紧跟着 RW段,RW 段后面紧跟着 ZI 段。在运行域中这些输出段并不连续,但 RW 和 ZI 一定是连着的。
ZI段和RW段中的数据其实可以是 RW属性。

下载

  • 嵌入式应用程序经过交叉工具链生成映像文件之后需要下载到目标机进行调试。
  • 调试完毕后映像文件必须存储在目标机的非易失性存储器中,即要求生成软件的固化版本,烧写到目标机的ROM中。
  • 将程序代码烧写到ROM中去的专用设备和工具程序俗称“编程器”。

指令集模拟器(Istuction Set Simulator.ISS)

  • 指令集模拟器(Istuction Set Simulator.ISS)是在宿主机上模拟应用程序在目标机上运行行为的一个软件工具。
  • 指令集模拟器的操作界面与通用机的集成开发环境类似。
  • 运行时,它接受编译器或汇编程序生成的目标代码及其指令输入,模仿目标机CPU的取值、译码和执行操作,并将中间执行结果或最终执行结果存入目标机硬件映射数据结构中。
  • 调试人员可以在指令集模拟器界面的控制下,通过观察目标机映射寄存器显示框、映射存储器显示框、变量观察窗口等了解目标代码的执行结果。

调试

  • 嵌入式系统的调试,驻留监控软件调试。所谓驻留监控软件是一段固化在目标机ROM中的程序。它是一种成本较低的调试方法,不需要专门的硬件调试和仿真设备。
  • GNU开发工具的使用,调试命令。其装入需要调试的可执行文件命令是file命令,终止当前被调试程序运行的命令是kill命令。
  • 调试的目的是发现错误并定位错误。调试工具的作用是控制程序代码的执行,使系统中看不见的信息成为可视。
  • 利用GNU中的调试器GDB进行程序调试时,可用命令watch来观察被调试程序中的变量值。

JTAG

  • 人们常用JTAG来表示满足IEE 1149规范的边界扫描测试方法和TAP接口(称为JTAG接口),是一种用于片上调试技术的统称。
  • JTAG标准中规定TAP接口使用以下5根信号线:
    • TCK、
    • TMS、
    • TDI、
    • TDO、
    • TRST

由于传统CE难以胜任高速嵌入式系统的开发,目前越来越多的嵌入式处理器借助于片上调试技术(On-Chip Debugging, OCE)进行嵌入式系统的调试。
边界扫描(boundary Scan)测试技术是对芯片或印制电路板进行片上调试最常用的一种技术。JTAG是IEE的一个下属组织,任务是研究测赋访问端口和边界扫描结构的标准,JAG标准允许多个芯片(电路)的边界扫描寄存器BSR通过JAG接口库联在一起,实现对多个器件的测试。串接起来的扫描链包合的串行数据流可能长达几百位。使用JAG进行嵌入式系统的调试,无需目标存储器,也不占用目标机任何I/O端口。

协议

SPI

  • SPI总线是一种同步串行外设接口总线
  • SPI的信号线MISO称为主机输入从机输出数据线, MOSI称为主机输出从机输入数据线
  • SPI一般使用4条信号线:串行时钟线SCK、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线SSEL.

操作系统理论

响应时间

响应时间(Response Time)是计算机从识别一个外部事件到做出响应的时间,其具体指标包括:中断延迟时间和任务切换时间

Linux

  • Linux内核第一次问世是在1991年10月
  • Linux系统最初以Unix为原型,以实现POSIX标准作为其目标
  • 同一个应用程序在UNIX环境下的运行速度和效率往往高于Linux环境
  • Linux是—种单(宏)内核结构
  • 嵌入式Linux操作系统主要由用户进程、OS服务组件和Linux内核三大子系统组成
  • Linux操作系统遵从GNU计划下的通用公共许可协议,而GNU开发的编程语言编译器称为GCC。

Linux内核的组成

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

  • 进程调度(SCHED)
  • 内存管理(MM)
  • 虚拟文件系统(VFS)
  • 网络接口(NET)
  • 进程间通信(IPC)
    在这里插入图片描述
    在这里插入图片描述

Linux进程间通信机制

嵌入式Linux进程间的通信机制。包括

  • 信号
  • 管道
  • 消息队列
  • 信号量
  • 共享内存
  • 套接字

Linux启动

启动嵌入式Linux时,通常Bootloader程序会提供几种不同的OS装载方式

  • 串口
  • 以太网
  • USB接口装载
  • 非易失性存储器(主要指Flash存储器)装载。

Linux网络

Linux操作系统内核的网络模块可分为两部分:

  • 一部分提供对各种网络资源访问的控制,称为网络协议
  • 另一部分提供对各种网络硬件的支持,称为网络驱动程序

需要掌握的计算以及参数

  • 波特率计算
  • 定时器计算
  • 以太网传输数据量计算
  • 波特率传输数据量计算
  • 图片占用大小计算
  • 存储器容量计算
  • 总线和带宽计算
  • 语音采样频率计算
    • 根据奈奎斯特定理(香农定理)
      在进行模拟/数字信号的转换过程中,
      当采样频率fs.max大于信号中最高频率fmax的2倍时(fs.max>2fmax)
  • 人的语音信号是频率范围为300Hz ~ 3400/4000Hz的模拟信号
  • 设计语音回放软件时,为了使回放时语音不会失真,需定时把数字语音信号输出到D/A芯片中,这个定时时间间隔应该是一个采样周期
  • 存储器容量是指每一个存储芯片或模块能够存储的二进制位数,大小取决于存储单元的个数和存储器各单元的位数。容量V=2m×n,其中m是地址线条数,n是数据线位数,本题中V=2^20×16=16 Mb=2MB.
  • 数字音频比特率(码率)的计算
    数字音频的主要参数包括取样颍率、量化位数、声道数目、使用的压缩编码方法以及比特率。数字音频未压缩前,其比特率(码率)的计算公式为:波形声音的码率=取样频率x量化位数×声道数。压缩编码后的码率则为压缩前的码率除以压缩倍数(压缩比)。

需要会配置的外设寄存器

各个模式都需要会配置(*为重点)
*IIC
*RTC(报警功能)
*UART
*LCD
*GPIO
*TIME(PWM)
红外
ADC
DAC
DMA
SPI

串口配置

波特率计算

在这里插入图片描述
在这里插入图片描述

  • 当题目要求设置的波特率采用四舍五入的方式时需要在最后+0.5再-1
//例	设置波特为9600,时钟源为PCLK
UBRDIVu = ((int)(PCLK)/(9600*16+0.5)-1);
//因为*/的优先级比+,所以会再计算完后四舍五入再减一

定时器配置

相关参数计算

  • 定时器输入时钟频率 = { 微处理器的系统频率参数 / ( 预分频系数+1 ) } / 分割器值
    – 注意此处是连除,不能当做除以一个分子来处理
  • 计数常数 = 定时时间间隔 / ( 1 / 定时器输入时钟频率 )
    – 此处可以当做除以一个分子等价于 = > 定时时间间隔 * 定时器输入时钟频率
//例   需设置定时间隔0.01秒 
系统的主频参数PCLK为264MHz,分频器值选择为16,预分频系数选择为3,Timer0的计数常数为
1.定时器输入时钟频率 = 微处理器的系统频率参数/(预分频系数+1)/分割器值
				    = (264*1000000Hz)/(3+1)/16
				    = 4125000 Hz
2.计数常数 = 定时时间间隔/(1/定时器输入时钟频率)
		   = 0.01*4125000 Hz
		   = 41250
3.所求结果41250位计数常数的结果

寄存器设置

在这里插入图片描述
在设置该寄存器时需注意顺序
例设置定时器0的预分频系数为4,则TCFG0 = 0X40;
因为Prescaler 0的顺序从低到高是定时器1,定时器0

LCD控制器

相关管脚

  • s3c2410
    – GPIOC和GPIOD
    – 管脚全部复用 配置数值为0xAAAAAAAA和0xAAAAAAAA

寄存器设置

RTC实时时钟

  • 一般寄存器均为8位
  • TICNT设置为0xFF(0X7F)则时间间隔为1秒
  • RTCALM设置为0则禁止所有报警功能
  • RTC读写操作完成后对RTCCON“使能位”操作,不需要复位即设置为0X0E

RTCEN 位可以控制所有 CPU 与 RTC 之间的接口,因此在系统复位后在 RTC 控制程序中必须设置为 1 来使
能数据的读/写。同样的在掉电前,RTCEN 位应该清除为 0 来预防误写入 RTC 寄存器中。

  • 注意在写之前需要将RTCEN 置1,即对寄存器RTCCON = RTCCON | 0x01
  • 注意在写之后需要将RTCEN 清0,即对寄存器RTCCON = RTCCON & 0xFE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值