只不过这个开关中断的操作要回复之前的中断状态,起始实现这样的操作又很多不同的方法,这里只是照搬了郑钢先生的代码。

// intr_status_op.h#ifndef __INTR_STATUS_H
#define __INTR_STATUS_H// 中断状态操作
#define EFLAGS_IF 0x00000200
#define GET_EFLAGS(EFLAG_VAR) __asm__ volatile("pushf;pop %0":"=g"(EFLAG_VAR))enum intr_status {INTR_OFF,INTR_ON
};enum intr_status intr_enable(void);
enum intr_status intr_disable(void);
enum intr_status intr_set_status(enum intr_status status);
enum intr_status intr_get_status(void);#endif
// intr_status_op.c
#include "intr_status_op.h"// 中断状态操作
enum intr_status intr_enable(void) {enum intr_status old_status;if(INTR_ON == intr_get_status()) {old_status = INTR_ON;return old_status;} else {old_status = INTR_OFF;__asm__ volatile("sti");return old_status;}
}enum intr_status intr_disable(void) {enum intr_status old_status;if(INTR_ON == intr_get_status()) {old_status = INTR_ON;__asm__ volatile("cli":::"memory");return old_status;} else {old_status = INTR_OFF;return old_status;}
}enum intr_status intr_set_status(enum intr_status status) {return status & INTR_ON ? intr_enable() : intr_disable();
}enum intr_status intr_get_status(void) {unsigned int eflags = 0;GET_EFLAGS(eflags);return (EFLAGS_IF & eflags) ? INTR_ON : INTR_OFF;
}

SnailOS 0.03 的intr_status_op目录就是开关中断的操作相关推荐

  1. 拼一个自己的操作系统(SnailOS 0.03的实现)

    拼一个自己的操作系统 SnailOS 0.03的实现 拼一个自己的操作系统SnailOS0.03源代码-Linux文档类资源-CSDN下载 操作系统SnailOS学习拼一个自己的操作系统-Linux文 ...

  2. Snail OS 0.03的thread目录是内核线程

    内核线程参考的是郑钢先生<操作系统真相还原>,主要是觉得这种实现线程和进程的方式非常的巧妙,另外在这方面想要创新的话,空间也是很小的. 为了编程方便,thread当中包含了进程的阻塞和唤醒 ...

  3. FreeRTOS 临界段和开关中断

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 临界段 代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码 的执行不被 ...

  4. JDK5.0新特性系列---目录

    JDK5.0新特性系列---目录 JDK5.0新特性系列---1.自动装箱和拆箱 JDK5.0新特性系列---2.新的for循环 JDK5.0新特性系列---3.枚举类型 JDK5.0新特性系列--- ...

  5. matlab e 精确到,matlab中用0.618法求minf(x)=e^(-x)+x^2在区间(0,1)上的极小值,精确到0.03....

    共回答了15个问题采纳率:86.7% clc clear all; elp=0.03; tao=0.618; N=fix(log(elp)/log(tao))+1; k=1; a(k)=0; b(k) ...

  6. .net framework 4.0 在 VS2010 安装目录下位置 dotNetFx40_Full_x86_x64.exe在磁盘哪个目录?...

    .net framework 4.0 在 VS2010 安装目录下位置 dotNetFx40_Full_x86_x64.exe在磁盘哪个目录? 使用VS2010开发应用程序完毕后,在发布应用程序时,常 ...

  7. TOMCAT6.0配置(虚拟目录的设置+多域名绑定)

    TOMCAT6.0配置(虚拟目录的设置+多域名绑定) Tomcat6.0配置(虚拟目录的设置+多域名绑定) Tomcat6.0配置(虚拟目录的设置+多域名绑定) 优点:tomcat6.0可以自动更新类 ...

  8. 假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10. 试为这8个字母设计赫夫曼编码.

    哈夫曼编码 [问题描述] 假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07, 0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10. 试为这8个字母 ...

  9. Atittit HDFS hadoop 大数据文件系统java使用总结 目录 1. 操作系统,进行操作 1 2. Hdfs 类似nfs ftp远程分布式文件服务 2 3. 启动hdfs服务start

    Atittit HDFS hadoop 大数据文件系统java使用总结 目录 1. 操作系统,进行操作 1 2. Hdfs 类似nfs ftp远程分布式文件服务 2 3. 启动hdfs服务start- ...

最新文章

  1. Bitcoin0.21版 公链开发(3) 网关PHP windows上安装
  2. Python中的字符串与字符编码:编码和转换问题
  3. lsof deleted java,lsof__强大的系统监控、诊断命令
  4. ()IT 职场经验)一位10年Java工作经验的架构师的经验分享,感觉很受用。
  5. scala案例_Scala案例类和案例对象深入(第2部分)
  6. CImageList 透明贴图解决方案
  7. 免费且好用的GIF录制软件LICEcap
  8. 拆一台微型计算机步骤,台式微型计算机拆装.doc
  9. 微信服务号菜单栏跳转网页配置方法(非接口写法)
  10. 小程序开发:完整发布上线流程
  11. python中init函数详解_Python 中__init__函数以及参数self
  12. TortoiseSVN官方中文语言包下载
  13. 破解仓储难题?看WMS如何解决
  14. android手机如何拥有苹果表情包,安卓手机emoji表情怎么改成苹果的
  15. DB2 开启归档模式
  16. NLP学习笔记41-递归神经网络
  17. Linux 入门概述
  18. 如何使用Scihub Eva对Scihub进行批量下载?
  19. 0604、nginx问题处理、
  20. 项目经理跨部门沟通,如何避免踢皮球?

热门文章

  1. 网络安全—arp欺骗原理数据包分析
  2. 2020年十大最佳自动化测试工具
  3. 论计算机的维修策略论文,论计算机的维护维修策略.doc
  4. 计算机室维修制度,计算机教室多功能室制度
  5. mes管理系统php原码,SPC工业制程管理(MES)源码
  6. 在各大Linux发行版中如何安装Docker及设置加速器?
  7. Oracle-处理百万级以上的数据查询提高效率的办法
  8. 计算机基础调查问卷,计算机基础调查问卷.doc
  9. HTML编写计算器样式
  10. 快速提取网页中的文字