嵌入式操作系统内核原理和开发(系统中断仿真)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
在嵌入式操作系统中,最难模仿的是系统中断的问题。在windows下面,这是没有办法的事情。但是在linux下面,却有一个非常便利的条件,那就是linux的信号处理。因为用户程序处理的时候,signal的处理和用户线程的处理堆栈是一致的,这和中断是完全吻合的。所以,如果你需要关闭中断,可以这么写,
sigprocmask(SIG_BLOCK, &new_set, &old_set);
当然,如果需要再次打开中断了,还可以这么写,
sigprocmask(SIG_UNBLOCK, &new_set, NULL);
所以,这里我们可以编写一个完整的程序说明问题。
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <stdlib.h>
#include <signal.h>
static int count = 0;
static struct itimerval oldtv;
void set_timer()
{
struct itimerval itv;
itv.it_interval.tv_sec = 1;
itv.it_interval.tv_usec = 0;
itv.it_value.tv_sec = 1;
itv.it_value.tv_usec = 0;
setitimer(ITIMER_REAL, &itv, &oldtv);
}
void signal_handler(int m)
{
count ++;
printf("%d\n", count);
}
void signal_int()
{
printf("hello!\n");
}
int main()
{
sigset_t new_set;
sigset_t old_set;
signal(SIGALRM, signal_handler);
signal(SIGINT, signal_int);
set_timer();
sigemptyset(&new_set);
sigaddset(&new_set, SIGALRM);
sigaddset(&new_set, SIGINT);
sigprocmask(SIG_BLOCK, &new_set, &old_set);
sleep(10);
sigprocmask(SIG_UNBLOCK, &new_set, NULL);
while(count < 10 ) sleep(1);
return 0;
}
基本说明如下:
(1)我们的系统暂时只负责SIGINT和SIGALRM,前者负责I/O的仿真,后则负责线程的调度;
(2) sigprocmask函数用来实现中断的打开和关闭;
(3)程序首先关闭中断,然后打开中断,打印数据完即结束,仅作为示范使用。
嵌入式操作系统内核原理和开发(系统中断仿真)相关推荐
- 嵌入式操作系统内核原理和开发
嵌入式操作系统内核原理和开发(开篇) 操作系统是很多人每天必须打交道的东西,因为在你打开电脑的一刹那,随着bios自检结束,你的windows系统已经开始运行了.如果问大家操作系统是什么?可能有的人会 ...
- 嵌入式操作系统内核原理和开发(总结篇)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 很多朋友都喜欢嵌入式操作系统的内容,但是如何实现和仿真这样一个系统一直是困扰我们的难题.现在郑 ...
- 嵌入式操作系统内核原理和开发(地址空间)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 不管是什么样的嵌入式cpu,它必然有自己的访问地址空间.至于这个具体的访问空间是什么,那cpu ...
- 嵌入式操作系统内核原理和开发(基础)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 在编写我们的操作系统之前,我们需要明确一些事情.比如说,这个系统的运行环境是什么?怎么编译?基 ...
- 嵌入式操作系统内核原理和开发(cpu的那些事)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] cpu是数字处理系统中的一个重要环节.在我看来,单片机.微处理器.dsp都可以称作是cpu,只 ...
- 嵌入式操作系统内核原理和开发(开篇)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 操作系统是很多人每天必须打交道的东西,因为在你打开电脑的一刹那,随着bios自检结束,你的wi ...
- 嵌入式操作系统内核原理和开发(信号量)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 之前因为工作的原因,操作系统这块一直没有继续写下去.一方面是自己没有这方面的经历,另外一方面就 ...
- 嵌入式操作系统内核原理和开发(头文件调整)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 很长一段时间,我个人对头文件的功能了解得不是很明白.虽然在平时的开发中,对于头文件也没有犯过什 ...
- 嵌入式操作系统内核原理和开发(实时系统中的定时器)
[ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 关于定时器的内容,其实我们之前也讨论过,也书写过相应的代码,但是表达得比较晦涩,效率也比较低. ...
最新文章
- 【Python】turtle库的小应用
- python装饰器函数-python装饰器1:函数装饰器详解
- 数组遍历 map()、forEach() 及 字符串切割 split() / 字符串截取 slice()、substring()、substr()...
- ASP.NET操作文件大全
- 【Python金融量化 8- 100 】八、计算投资组合风险
- OFD文件结构--Signatures.xml
- 取得数组下标_《零基础C++入门教程》——(8)搞定二维数组与循环嵌套
- 作用于HTML元素的Vue.js指令
- Python入门-行和缩进
- 单机环境下(双机或是分布式系统不用考虑这个问题),app_offline.htm是个不错的选择...
- python中索引越界的常见原因
- 常用的excel函数—汇总
- 如何把自己打造成技术圈的papi酱
- android代码让手机降温,手机降温神器下载 手机一键降温神器 for Android v1.0.1 安卓版 下载-脚本之家...
- php strpos注意问题坑,php小白容易出现的 strpos 逻辑错误
- Python Apex YOLO V7 main 目标检测 全过程记录
- Android开源库V - Layout:淘宝、天猫都在用的UI框架,赶紧用起来吧!
- UI-网站首页轮播图、易拉宝、发布在微信公众号的宣传海报的图片设计信息
- top-level object
- duolingo 多邻国 安卓版无法使用口语功能
热门文章
- 虚拟环境使用自动化软件能够节省成本吗?
- Android:如何从堆栈中还原ProGuard混淆后的代码
- 一个小学教师建站的不惑与困惑
- 将数据库中一张表中数据复制到另一张表
- httpd glibc free() 报错解决一例
- exit(0)和exit(1)解释
- postgresql数据库导入导出
- OD使用教程21(上) - 调试篇21
- iframe高度自适应的实现
- AndroidStudio_开发工具的设置_界面设置_字体设置_使用习惯设置_按钮设置等一些设置的介绍---Android原生开发工作笔记71