一步步写嵌入式操作系统 中断处理

2023-11-02

简单的中断处理程序

// 简单的中断处理程序
// 1.获取被中断模式的将要执行的指令的地址到LR
// 2.将LR压入中断模式栈
// 3.将pc置为公共的中断服务函数入口地址,并记录下一条指令地址到LR
// 4.从公共的中断服务函数返回
// 5.从spsr恢复被中断模式的cpsr(被中断模式允许中断)
// 6.中断模式出栈,恢复LR
// 7.将PC置为LR
// 对应的代码:
// sub lr,lr,#0x4
// stmfd sp!,{lr}
// bl common_irq_handler
// mrs lr,spsr
// msr cpsr_c,lr
// ldmfd sp!,{lr}
// mov pc,lr

复杂的中断处理程序

@ __vector_irq: 

@   sub r14,r14,#0x4

@   stmfd r13!,{r14}

@   mrs r14,spsr

@   stmfd r13!,{r14}

@   CHANGE_TO_SVC

@   stmfd r13!,{r0,r1,r2,r3}

@   bl common_irq_handler

@   ldmfd r13!,{r0,r1,r2,r3}

@   CHANGE_TO_IRQ

@   ldmfd r13!,{r14}

@   msr spsr,r14

@   ldmfd r13!,{pc}^

优秀的中断处理程序

@ __vector_irq: 

@   sub r14,r14,#0x4

@   str r14,[r13,#-0x4]

@   mrs r14,spsr

@   str r14,[r13,#-0x8]

@   str r0,[r13,#-0xc]

@   mov r0,r13

@   CHANGE_TO_SVC

@   str r14,[r13,#-0x8]!

@   ldr r14,[r0,#-0x4]

@   str r14,[r13,#-0x4]

@   ldr r14,[r0,#-0x8]

@   ldr r0,[r0,#-0xc]

@   stmdb r13!,{r0-r3,r14}

@   bl common_irq_handler

@   ldmia r13!,{r0-r3,r14}

@   msr spsr,r14

@   ldmfd r13!,{r14,pc}^

总结:

1.简单的中断处理程序:

保存中断异常发生时的程序指针和寄存器、栈指针

在中断异常模式执行中断服务程序,此时不可被中断,无法中断嵌套

2.复杂的中断处理程序:

保存中断异常发生时的程序指针和寄存器、栈指针

切换到管理模式执行中断服务函数,此时可被中断,巧妙实现中断嵌套

3.优秀的中断处理程序

保存中断异常发生时的程序指针和寄存器、栈指针

切换到管理模式执行中断服务函数,此时可被中断,巧妙实现中断嵌套

系统处于管理模式的时间占比大,可被中断的时间占比大,实时性高

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一步步写嵌入式操作系统 中断处理 的相关文章

随机推荐

  • Java的垃圾回收机制

    一 点睛 当程序创建对象 数组等引用类型实体时 系统都会在堆内存中为之分配一块内存区 对象就保存在这块内存区中 当这块内存不再被任何引用变量引用时 这块内存就变成了垃圾 等待垃圾回收机制进行回收 垃圾回收机制的特点 垃圾回收机制只负责回收堆
  • VMware认证专家(VCP)详细介绍

    VMware认证专家 VCP 适合对象 系统管理员 系统工程师 IT架构师 VMware ESX ESXi vCenter Server 操作员 VMware认证专家 VCP 课程介绍 VMware vSphere安装 配置 管理 包括VM
  • hdoj-1069-Monkey and Banana【动态规划】

    Monkey and Banana Time Limit 2000 1000 MS Java Others Memory Limit 65536 32768 K Java Others Total Submission s 9489 Acc
  • 安装vmware tools不能复制粘贴解决方案

    根据网上大部分教程安装tools结果没办法使用 解决方案 先将之前安装的tools卸载干净 sudo apt get autoremove open vm tools 然后将虚拟机联网在网上去重新下载vmware tools sudo ap
  • selenium小项目实践

    1 斗鱼爬虫 爬取斗鱼直播平台的所有房间信息 https www douyu com directory all 1 1 思路分析 数据的位置 每个房间的数据都在id live list contentbox的ul中 实现翻页和控制程序结束
  • FileInputStream 读取文件内容

    public class Test public static void main String args throws IOException final String path D 1 txt 1 得到数据文件 File file ne
  • 用Java实现阶乘

    阶乘在高中时都学过 比如说5的阶乘用数学表示就是5 在写的通俗一点就是5 4 3 2 1 用一个数学公式表示就是n 1 2 3 n 阶乘也可以用代码实现 Java中有三中循环结构 先看for循环的 import java util Scan
  • Unity光照渲染设置

    先看效果图 下面是设置 1 将 Edit gt Player gt Other Settings Color Space这个调成Linear模式 有更好的阴影效果 2 光照Lighting的设置 Window gt Rendering gt
  • 论文阅读链接

    中文期刊 英文期刊 问题 中文期刊 机械工程学报 自动化学报 计算机学报 机器人 中国科学 系列 中国科学信息科学 中国科学技术科学 英文期刊 IEEE Xplore 出版 IEEE Transactions on Artificial I
  • Redis 查看value大小

    线上会经常遇到大key问题 这时候就需要通过 bigkeys来找出最大的key 但是往往和最大的key前缀相同的一类key都会比较大 所以打算一次性获取此类key中比较大的key 官方文档中查看获取value大小的时间成本较高 于是查看有关
  • docker镜像 ubuntu:22.04 21.04 apt-get update 报错 Problem executing scripts APT::Update::Post-Invoke ‘rm

    docker镜像 ubuntu 22 04 21 04 apt get update 报错 Problem executing scripts APT Update Post Invoke rm f var cache apt archiv
  • 因果推断学习笔记三——Uplift模型

    一 Uplift模型 因果推断在互联网界应用主要是基于Uplift model来预测额外收益提升ROI Uplift模型帮助商家计算人群营销敏感度 驱动收益模拟预算和投放策略制定 促成营销推广效率的最大化 同时如何衡量和预测营销干预带来的
  • 低功耗技术(一)动态功耗与静态功耗

    原创 AndyICer Andy的ICer之路 1月5日 低功耗技术 一 动态功耗与静态功耗 一 动态功耗 翻转功耗 Switching Power 翻转功耗是由充放电电容引起的动态功耗 其推导过程很简单 但是这个最终的结果却十分重要 sw
  • Jedis使用java连接Redis

    Maven创建 创建一个maven的项目 其中pom xml依赖为
  • 在Ubuntu中安装eclipse

    1 下载JDK和eclipse jdk下载网址 http www oracle com technetwork java javase downloads jdk8 downloads 2133151 html eclipse下载网址 ht
  • AD20铺铜操作及设置

    AD20铺铜方法 首先 建议铺铜前 先滴泪 提高信号完整性 1 铺铜 放置 gt 铺铜 2 铺铜时 先设置属性 如果以前设置过 不用重设 点键盘上的 Tab 键 调出 属性 界面 3 操作 沿着四个点 到第4点时 点鼠标左键 完成划区域 如
  • stm32同芯片但不同flash工程更换Device出现报错

    目录 1 问题描述 2 解决方案 1 问题描述 stm32同芯片但不同flash工程更换Device出现报错 2 解决方案 更换Device 我是从ZE换为C8 把这个从HD更换为MD 解决
  • Three.js - 透视相机(PerspectiveCamera)(三)

    简介 在three js中 摄像机的作用就是不断的拍摄我们创建好的场景 然后通过渲染器渲染到屏幕中 想通过不同的角度观看场景 就需要修改摄像机的位置来拍摄场景 本文详细介绍的是透视相机 PerspectiveCamera 它是用来模拟人眼所
  • OpenWrt自定义luci页面来修改配置文件

    在使用OpenWrt路由器的过程中 经常需要根据需要改改配置文件然后重新启动服务什么的 一般的做法是SSH登录路由器后台 使用vi编辑器修改文件 然后使用 etc init d xxxx restart 来重启服务 次数多了就会觉得很繁琐
  • 一步步写嵌入式操作系统 中断处理

    简单的中断处理程序 简单的中断处理程序 1 获取被中断模式的将要执行的指令的地址到LR 2 将LR压入中断模式栈 3 将pc置为公共的中断服务函数入口地址 并记录下一条指令地址到LR 4 从公共的中断服务函数返回 5 从spsr恢复被中断模