嵌入式 -中断

微处理器体系结构

基本概念

  1. 关于汇编语言
  • 汇编语言是机器执行指令的另一种形式,每条汇编语句对应一条机器指令,汇编语言要翻译成 二进制代码才能给微处理器执行。
  • 用 C 语言编写的程序在编译时一条语句可能被转换成多条微处理器能执行的机器指令。
  • 不同系列的微处理器有不同的汇编语言;同一系列微处理器汇编语言一致。
  1. 关于微处理器的内部寄存器
  • 通用寄存器:存放处理器正在计算的值
  • 专用寄存器
    1)程序计数器
    用来跟踪微处理器要执行的下一条指令的地址。
    2)堆栈指针
    用来存放微处理器通用堆栈的栈顶地址。

常见的汇编指令

  1. 存/取数据——MOVE(左边得到右边的值
  • MOVE R3,R2
    读取R2的值,复制到R3中
  • MOVE R5,(iTemperature)
    读取内存中iTemperature的值,复制到R5中
  • MOVE R5, iTemperature
    读取内存中iTemperature的地址,复制到R5中
  1. 算术运算和位运算
    一般情况下,微处理器是在累加器(accumulateor)中做算术运算,但大多数微处理器都能在任一寄存器中进行标准算术运算和位运算。如:
  • ADD R7,R3
  • NOT R4
  1. 跳转指令 —— JUMP
    它使程序指针无条件地跳到跳转指令中的跳转标记处继续执行。例如:
    ADD R1,R2
    JUMP NO_ADD
    MORE_ADDITION:
    ADD R1,R3 ; 这两条语句被跳过
    ADD R1,R4
    NO_ADD:
    MOVE (xyz),R1
    4、条件跳转指令 —— JCOND
    **指令在某个条件为真时才发生跳转。**例如:
    SUBTRACT R1,R5
    JCOND ZERO, NO_MORE
    .
    .
    .
    NO_MORE:
    .
    .
    .
  2. 堆栈访问指令 —— POP, PUSH
    PUSH是将数据项压入堆栈,并调整堆栈指针指向被压入的数据项。
    POP指令则相反,在获取栈顶数据后调整数据指针。
    PUSH 寄存器;将一个寄存器中的数据入栈
    POP 寄存器;出栈,用一个寄存器接收出栈的数据
  3. 函数或程序调用指令 —— CALL/RETURN
    执行call指令一般都会把后面的指令地址压栈,例子中是把MOVE指令的地址压栈;执行return指令,自动弹出栈顶的指令地址。
    CALL ADD_EN_UP
    MOVE (xyz),R1
    .
    .
    ADD_EM_UP:
    ADD R1, R3
    ADD R1, R4
    ADD R1, R5
    RETURN
    在这里插入图片描述
  • MOVE 是把右边的值给到左边
  • ADD 是左边的值获得右边的值,返回的结果是左边ADD的值
  • SUBTRACT 是用右边的值减去左边的值获得结果

中断基础知识

定义

中断是从一个硬件信号开始的,微处理器提供专门的引脚 IRQ 用于判断什么时候需要什么样的中断服务。
在这里插入图片描述

操作

当微处理器检测到某个中断请求时,就会停止当前的指令执行顺序,把下一条要执行的指令地址压入堆栈,马上跳转到中断程序(interrupt routine)。

中断程序

中断程序是一个用户程序,它主要负责处理中断请求信号产生后的一些事务,它们通常是一些紧急事务。例如,串口芯片从外部设备接收到字符。有时中断程序还要一些其它事务,如重启微处理器的中断检测硬件。
中断程序又称为中断处理程序(interrupt handler)或中断服务程序(Interrupt Service Routine)。
中断程序的最后一条指令是RETURN。当程序执行到RETURN时,微处理器就从堆栈中取出下一条要执行的指令的地址,从该地址继续执行指令

共享数据问题

需求

中断程序会与其它任务代码通信,这时,它们必须共享一个或多个变量来实现它们之间的通信。

特征

中断程序和任务代码共享了数据

解决方法

使用中断禁止

解决共享数据问题的一个简单而实用的方法是在任务代码使用共享数据时禁止中断。

原子的 和 临界区

程序中不能被中断的部分代码称为“原子的”。
共享数据问题的更精确的表述:中断程序和任务代码共享数据且使用共享数据的任务代码不是原子的。
临界区:是指必须是“原子的”以保证系统正常运转的指令的集合。

volatile关键字

volatile的作用:警告编译器所标明的变量可能因为中断程序或其它编译器不知道的原因而发生变化。

中断延迟

定义

中断延迟是指系统响应一个中断需要花费的时间。
中断延迟也是一个不太容易测试的性能参数,它受程序运行环境和条件的影响,是多个因素的组合。

影响中断延迟的因素

1)中断(或者所有中断)被禁止的最长时间。
2)任意一个优先级更高(相对于正在讨论的中断)的中断的中断程序的执行时间。
3)微处理器停止当前任务、保存必要的信息以及执行中断程序中的指令需要花费的时间。
4)从中断程序保存上下文到完成一次响应需要的时间。

中断延迟测试与评估

中断延迟的测试与评估通常有以下两种方法:
1)编写代码,然后测量其执行过程所花费的时间。
2)计算统计不同类型的指令及数量,通过查阅微处理器文档,找出每种类型的指令的执行时间,再计算总的执行时间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值