SnailOS 0.03 的intr_status_op目录就是开关中断的操作
只不过这个开关中断的操作要回复之前的中断状态,起始实现这样的操作又很多不同的方法,这里只是照搬了郑钢先生的代码。
// 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目录就是开关中断的操作相关推荐
- 拼一个自己的操作系统(SnailOS 0.03的实现)
拼一个自己的操作系统 SnailOS 0.03的实现 拼一个自己的操作系统SnailOS0.03源代码-Linux文档类资源-CSDN下载 操作系统SnailOS学习拼一个自己的操作系统-Linux文 ...
- Snail OS 0.03的thread目录是内核线程
内核线程参考的是郑钢先生<操作系统真相还原>,主要是觉得这种实现线程和进程的方式非常的巧妙,另外在这方面想要创新的话,空间也是很小的. 为了编程方便,thread当中包含了进程的阻塞和唤醒 ...
- FreeRTOS 临界段和开关中断
以下转载自安富莱电子: http://forum.armfly.com/forum.php 临界段 代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码 的执行不被 ...
- JDK5.0新特性系列---目录
JDK5.0新特性系列---目录 JDK5.0新特性系列---1.自动装箱和拆箱 JDK5.0新特性系列---2.新的for循环 JDK5.0新特性系列---3.枚举类型 JDK5.0新特性系列--- ...
- 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) ...
- .net framework 4.0 在 VS2010 安装目录下位置 dotNetFx40_Full_x86_x64.exe在磁盘哪个目录?...
.net framework 4.0 在 VS2010 安装目录下位置 dotNetFx40_Full_x86_x64.exe在磁盘哪个目录? 使用VS2010开发应用程序完毕后,在发布应用程序时,常 ...
- TOMCAT6.0配置(虚拟目录的设置+多域名绑定)
TOMCAT6.0配置(虚拟目录的设置+多域名绑定) Tomcat6.0配置(虚拟目录的设置+多域名绑定) Tomcat6.0配置(虚拟目录的设置+多域名绑定) 优点:tomcat6.0可以自动更新类 ...
- 假设用于通信的电文仅由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个字母 ...
- 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- ...
最新文章
- Bitcoin0.21版 公链开发(3) 网关PHP windows上安装
- Python中的字符串与字符编码:编码和转换问题
- lsof deleted java,lsof__强大的系统监控、诊断命令
- ()IT 职场经验)一位10年Java工作经验的架构师的经验分享,感觉很受用。
- scala案例_Scala案例类和案例对象深入(第2部分)
- CImageList 透明贴图解决方案
- 免费且好用的GIF录制软件LICEcap
- 拆一台微型计算机步骤,台式微型计算机拆装.doc
- 微信服务号菜单栏跳转网页配置方法(非接口写法)
- 小程序开发:完整发布上线流程
- python中init函数详解_Python 中__init__函数以及参数self
- TortoiseSVN官方中文语言包下载
- 破解仓储难题?看WMS如何解决
- android手机如何拥有苹果表情包,安卓手机emoji表情怎么改成苹果的
- DB2 开启归档模式
- NLP学习笔记41-递归神经网络
- Linux 入门概述
- 如何使用Scihub Eva对Scihub进行批量下载?
- 0604、nginx问题处理、
- 项目经理跨部门沟通,如何避免踢皮球?