【复习资料】单片机与嵌入式系统原理及应用

时间:2022-11-14 18:58:31

嵌入式系统的概念

  1. 第一种定义:嵌入式系统是以应用为中心、计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
  2. 第二种定义:把基于处理器(通用处理器和嵌入式处理器)的设备成为计算机,把计算机分为两大部分,即通用计算机和嵌入式计算机。嵌入式系统也被成为嵌入式计算机,因此嵌入式系统被定义为非通用计算机系统。
  3. 嵌入式系统应定义为:嵌入到对象体系中的专用计算机系统,“嵌入式”、“专用性”与“计算机系统”是嵌入式系统的三个基本要素,对象系统则是指嵌入式系统所嵌入的宿主系统。

嵌入式系统的分类

  1. 按嵌入式微处理器的位数分类:8位、16位、32位和64位。
  2. 按实时性分类:嵌入式实时系统(硬实时系统和软实时系统)、嵌入式非实时系统。
  3. 按嵌入式软件结构分类
    • 循环轮询系统。
    • 前后台系统:中断驱动机制。
    • 多任务系统:降低系统复杂度,保证系统的实时性和可维护性。
  4. 按应用领域分类:信息家电类、汽车电子类、航空电子类、军事电子类等。

按软件结构分三种系统的优缺点

系统分类 优点 缺点
循环轮询系统 编程简单,没有中断,不会出现随机问题。 应用领域有限,不适合有大量输入输出的服务,软件规模增大后不便于调试。
前后台系统 可并发处理不同的异步事件,设计简单,无须学习操作系统的相关知识。 对于复杂系统,其主程序设计复杂,可靠性降低。实时性只能通过中断来保证,一旦主程序介入处理事件,其实时性难以保证。中断服务程序与主程序之间共享、互斥的问题需要自身解决。
多任务系统 复杂的系统被分解成相对独立的多个任务,降低了系统的复杂度。可以保证系统的实时性。系统模块化,可维护性高。 需要引入新的软件设计方法。需要对每个共享资源进行互斥。任务间存在竞争。嵌入式操作系统的使用将会增加系统开销。

嵌入式系统的组成

  1. 嵌入式处理器:嵌入式系统的核心部件。
  2. 外围设备:用于完成存储、通信、调试、显示灯辅助功能。
  3. 嵌入式操作系统:软件模块的集合。
  4. 应用软件: 完成用户预期任务的计算机软件。

嵌入式操作系统的概念:

嵌入式操作系统是用以完成任务调度、任务间通信与同步、任务管理、时间管理、内存管理等的软件模块集合。嵌入式操作系统的引入大大提高了嵌入式系统的性能、方便了应用软件的设计、但同时也占用了嵌入式系统的资源。

嵌入式操作系统的分类:

  1. 按源代码类型:可分为商用型和开源型。
  2. 按实时性能:可分为强实时型和普通实时型。
  3. 按内核结构:单内核型(串行)和微内核型(并列式)。

嵌入式操作系统的优点

  1. 提高了嵌入式系统的性能。
  2. 方便了应用软件的设计。
  3. 可裁剪和可移植性强,支持开放性和可伸缩性的体系结构。
  4. 内核精简,占用空间小,内核比传统的操作系统小很多。
  5. 高实时性,可用于各种设备控制中。
  6. 为设备提供统一的驱动接口。
  7. 高可靠性,嵌入式操作系统可长期稳定运行。

使用嵌入式操作系统的必要性:

  1. 首先,嵌入式实时操作系统提高了系统的可靠性。
  2. 其次,提高了开发效率,缩短了开发周期。
  3. 再次,嵌入式实时操作系统充分发挥了32位CPU的多任务潜力。

A/D转换:

定义:A/D转换是将模拟量转换成数字量的器件。模拟量可以是电压、电流等电信号,也可以是声、光、压力和温度等随时间连续变化的非电物理量。

转换方法

  1. 电压频率式:精度高、价格低,但转换速度不高。
  2. 积分式:抗干扰能力好,转换速度低。
  3. 逐次逼近式:转换速度较快。
  4. 并行转换。
  5. 串行转换。

D/A转换:

定义:D/A转换器是实现数模转换功能的部件。

衡量D/A转换器性能的主要参数有:

  1. 分辨率:即输出的模拟量的最小变化量。
  2. 满刻度误差:即输入为全1时输出电压与理想值之间的误差。
  3. 输出范围。
  4. 转换时间:指从转换器的输入改变到输出稳点的时间间隔。
  5. 是否容易和CPU接口。

ARM的概念

  1. ARM是Advanced RISC Machines公司的缩写。各半导体公司根据ARM内核技术开发出ARM内核的嵌入式SOC系统的系列芯片。
  2. 从编程角度来看,ARM处理器的工作状态一般有两种:ARM状态和Thumb状态。处理器工作状态的转变不影响处理器的工作模式和相应寄存器中的内容。
    • ARM状态:处理器执行32位的字对齐的ARM指令。
    • Thumb状态:处理器执行16位的半字对齐的Thumb指令。

ARM的运行模式

用户模式、系统模式、管理模式、未定义模式、快速中断模式、外部中断模式、数据访问中止模式。


任务的定义

  1. 在嵌入式系统中,一个任务也称作一个线程,即为一个程序。线程分为用户级线程和内核级线程。
  2. 该程序在运行时可以认为CPU完全属于自己。
  3. 在实时应用程序的设计过程中,要考虑如何将应用功能合理地划分为多个任务,让每个任务完成一定的功能,成为整个应用的一部分。
  4. 每个任务都被赋予一定的优先级,有一套CPU存储器和栈空间。
  5. 任务越重要,赋予的优先级越高。就大多数内核而言,任务的优先级由用户决定。

任务的分类:

  1. 按照到达情况的可预测性,任务可划分为周期任务和非周期任务。周期任务每隔一个固定的时间间隔就会执行一次,非周期任务执行的间隔时间不确定。
  2. 按照重要程度, 可分为关键任务和非关键任务。关键任务为需要得到及时执行的任务,否则将可能出现灾难性的后果,非关键任务如果没有及时执行,不会产生严重的后果,拥有关键任务的实时系统又被称为强实时系统,否则称为弱实时系统。

任务的调度

  • 是内核的主要职责之一,就是决定该轮到哪个任务运行。任务调度器从当前就绪的所有任务中依照任务调度算法选择一个最符合算法要求的任务,使其获得CPU的使用权,从就绪态进入运行态。通常,基于优先级调度法的内核有两种:抢占式内核和非抢占式内核。
  • 在多任务系统中,都会提供一个系统函数来进行进程(任务)间的切换。
    1. 由进程(任务)本身直接调用任务切换函数进行进程(任务)切换。
    2. 延迟调用任务切换函数进行进程(任务)切换。

任务的5种状态

  1. 休眠态(Dormant):任务驻留在内存的程序空间中,并未被多内核所调度。
  2. 就绪态(Ready):任务已经准备好,可以运行,但是由于该任务的优先级比正在运行的任务的优先级低,暂时还不能运行。
  3. 运行态(Running):任务获得了CPU的控制权,正在运行中。基于优先级调度的实时内核总是让处于就绪态的优先级最高的任务运行。
  4. 挂起态(Pending):也叫等待事件态(waiting),是指任务在等待某一事件的发生(如等待某外设的IO操作、等待定时脉冲的到来、等待超时信号的到来)。正在运行的任务由于调用了延时函数或等待某事件发生而将自身挂起,就转变成了挂起态。
  5. 被中断态(Intermpt):是指发生中断时,CPU提供相应的中断服务,原来正在运行的任务暂时不能运行,而进入了被中断态。

任务切换

  1. 概念:任务转换是指CPU寄存器内容切换。
  2. 过程
    1. 当多任务内核决定运行另外的任务时,它保存正在运行的任务的当前状态,即当前CPU寄存器中的全部内容。
    2. 内核将这些内容保存在该任务的当前状态保存区,也就是该任务自己的栈区中(这个过程称为“入栈”)。
    3. 把将要运行的任务的当前状态从该任务的栈中装入CPU寄存器(这个过程称为“出栈”),并开始这个任务的运行。
  3. 特点:任务切换过程增加了应用程序的额外负荷,CPU的内部寄存器越多,额外负荷就越重。任务切换所需要的时间取决于CPU有多少寄存器要入栈。

单片机应用系统

单片机的应用系统由硬件和软件所组成。

  1. 硬件指单片机、扩展的存储器、扩展的输入输出设备。
  2. 软件是各种工作程序的总称。硬件和软件只有紧密配合、协调一致,才能提高系统的性能。
  3. 单片机应用系统的研制过程包括总体设计、硬件设计与加工、软件设计、联机调试、产品定型等几个阶段,但它们不是绝对分开的,有时是交叉进行的。


P17重点

SPI

SPI实际上是一种串行总线接口标准。SPI方式可允许同时同步传送和接受8位数据,他的工作时传输速率最高可达到几十兆位/秒。SPI用以下3个引脚来完成通信:

  • 串行数据输出SDO(Serial Data Out)。
  • 串行数据输入SDI (Serial Data In)。
  • 串行时钟SCK (Serial Clock)。


主机、从机之间SPI总线连接示意图


SPI通讯的时序图


I2C

也是一种串行总线的外设接口,它采用同步方式串行接收或发送信息,两个设备在同一个时钟下工作。与SPI不同的是I2C只用两根线:

  • 串行数据SDA(Serial Data)。
  • 串行时钟SCL(Serial Clock)。

    由于I2C只有一根数据线,因此其发送信息和接收信息不能同时进行。信息的发送接收只能分时进行,I2C串行总线工作时传输速率最高位400K位/秒。



计算题


一、轮询方式得到键值(独立键盘实验)

实验现象:下载程序后按下K1按键可以对D1小灯状态取反。
注意事项:无。

#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;     //对数据类型进行声明定义
typedef unsigned char u8;

sbit k1=P3^1;    //定义P31口是k1
sbit led=P2^0;   //定义P20口是led

// 函 数 名 : delay
// 函数功能 : 延时函数,i=1时,大约延时10ms
void delay(u16 i){
    while(i--); 
}

// 函 数 名 : keypros
// 函数功能 : 按键处理函数,判断按键K1是否按下
void keypros(){
    if(k1==0)   {                //检测按键K1是否按下 
        delay(1000);            //消除抖动 一般大约10ms
        if(k1==0)   {             //再次判断按键是否按下
            led=~led;                //led状态取反
        }
        while(!k1);              //检测按键是否松开
    }       
}

void main(){    
    while(1){   
        keypros();  //按键处理函数 
    }       
}

二、中断方法(1、2二选一)

2. LED灯闪烁(T0)

定时器0实验
实现现象:下载程序后D1小灯循环点亮1秒,熄灭1秒。使用单片机内部定时器可以实现准确延时。
注意事项:无。

#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;     //对数据类型进行声明定义
typedef unsigned char u8;
sbit led=P2^0;   //定义P20口是led
//* 函 数 名 : Timer0Init
//* 函数功能 : 定时器0初始化
void Timer0Init(){
    TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
    TH0=0XFC;   //给定时器赋初值,定时1ms
    TL0=0X18;   
    ET0=1;//打开定时器0中断允许
    EA=1;//打开总中断
    TR0=1;//打开定时器 
}
//* 函 数 名 : main
//* 函数功能 : 主函数
void main(){    
    Timer0Init();  //定时器0初始化
    while(1);       
}
//* 函 数 名 : void Timer0() interrupt 1
//* 函数功能 : 定时器0中断函数
void Timer0() interrupt 1{
    static u16 i;
    TH0=0XFC;   //给定时器赋初值,定时1ms
    TL0=0X18;
    i++;
    if(i==1000){
        i=0;
        led=~led;   
    }   
}