目录
概述
1 异常和中断的概念
1.1 异常
1.1.1 同步异常
1.1.2 异步异常
1.2 中断
2 了解异常和中断
2.1 可编程中断控制器和外部中断
2.2 异常的分类
2.3 异常的优先权
2.4 中断和异常处理
3 处理一般异常的方法
概述
本文主要介绍嵌入式系统中的异常和中断的一些知识和概念,这些知识点对于深入认识MCU和操作系统的运行原理有一个比较深刻的了解,对实际编程时非常有帮助的。
1 异常和中断的概念
1.1 异常
异常是指任何打断MCU正常执行,并且破事MCU进入一个又特殊指令执行的事件。异常分为两类。
1.1.1 同步异常
由内部事件引起的异常,称之为同步异常,例如:
1)读写内存的错误
2)零除运算引起的错误
1.1.2 异步异常
由外部事件引起的异常,称之为异步异常。典型的实例如下:
1)按下嵌入式板卡上的复位按钮,系统复位
2)MCU使用外部中断触发接收数据
1.2 中断
中断也被称之为外部中断,它是由外部硬件引起的异步异常。严格的说,中断也是异常的一个类型。中断时硬件与嵌入式MCU进行通信的一种重要的方式。其在嵌入式系统中应用非常广泛。
2 了解异常和中断
一般异常具有分类,并且基于分类的特点,给定优先权。外部中断也有优先级之分,它由MCU内核强加大,可进行编程分配。
2.1 可编程中断控制器和外部中断
对于MCU而言,其可能由多个中断源,并且每一个中断源被设置过优先级别。并且,在MCU内部有一个专门的中断控制器( PIC),其主要作用如下:
1)给每个中断源分配中断优先级
2)判断中断的准确来源,降低核心CPU的负载压力
2.2 异常的分类
异常可以分为如下类型:
1)异步-不可屏蔽类型:不可以被软件enable / disable 的异步异常
2)异步-可屏蔽类型:可以被软件enable / disable 的异步异常
3)同步-精确类型:MCU程序计数器知道哪里出现问题,并且知道从哪里恢复运行。
4)同步-不精确类型:程序计数器不能确切的知道犯错误的指令,进而也无法处理该异常。
2.3 异常的优先权
异常的最高优先级通常留给系统复位
从应用程序的观点看,所有异常具有比操作系统对象更高的优先权,包括任务、队列和信号灯。
2.4 中断和异常处理
在嵌入式系统中,所有任务对象都有一个任务控制块(TCB)
当发生任务上下文切换时,活动的堆栈指针(sp)重新初始化活动任务的栈指针。
3 处理一般异常的方法
MCU处理一般异常的步骤如下:
1) 存储处理器当前的状态
2)把异常或者中断函数装入程序计数器
3)把控制转移到处理程序函数中,并开始执行
4)在处理程序函数运行完之后,回复处理器之前的状态
5)从异常或中断返回,恢复跳转前的运行状态。