【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱: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)程序首先关闭中断,然后打开中断,打印数据完即结束,仅作为示范使用。

嵌入式操作系统内核原理和开发(系统中断仿真)相关推荐

  1. 嵌入式操作系统内核原理和开发

    嵌入式操作系统内核原理和开发(开篇) 操作系统是很多人每天必须打交道的东西,因为在你打开电脑的一刹那,随着bios自检结束,你的windows系统已经开始运行了.如果问大家操作系统是什么?可能有的人会 ...

  2. 嵌入式操作系统内核原理和开发(总结篇)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 很多朋友都喜欢嵌入式操作系统的内容,但是如何实现和仿真这样一个系统一直是困扰我们的难题.现在郑 ...

  3. 嵌入式操作系统内核原理和开发(地址空间)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 不管是什么样的嵌入式cpu,它必然有自己的访问地址空间.至于这个具体的访问空间是什么,那cpu ...

  4. 嵌入式操作系统内核原理和开发(基础)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 在编写我们的操作系统之前,我们需要明确一些事情.比如说,这个系统的运行环境是什么?怎么编译?基 ...

  5. 嵌入式操作系统内核原理和开发(cpu的那些事)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] cpu是数字处理系统中的一个重要环节.在我看来,单片机.微处理器.dsp都可以称作是cpu,只 ...

  6. 嵌入式操作系统内核原理和开发(开篇)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 操作系统是很多人每天必须打交道的东西,因为在你打开电脑的一刹那,随着bios自检结束,你的wi ...

  7. 嵌入式操作系统内核原理和开发(信号量)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 之前因为工作的原因,操作系统这块一直没有继续写下去.一方面是自己没有这方面的经历,另外一方面就 ...

  8. 嵌入式操作系统内核原理和开发(头文件调整)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 很长一段时间,我个人对头文件的功能了解得不是很明白.虽然在平时的开发中,对于头文件也没有犯过什 ...

  9. 嵌入式操作系统内核原理和开发(实时系统中的定时器)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 关于定时器的内容,其实我们之前也讨论过,也书写过相应的代码,但是表达得比较晦涩,效率也比较低. ...

最新文章

  1. 【Python】turtle库的小应用
  2. python装饰器函数-python装饰器1:函数装饰器详解
  3. 数组遍历 map()、forEach() 及 字符串切割 split() / 字符串截取 slice()、substring()、substr()...
  4. ASP.NET操作文件大全
  5. 【Python金融量化 8- 100 】八、计算投资组合风险
  6. OFD文件结构--Signatures.xml
  7. 取得数组下标_《零基础C++入门教程》——(8)搞定二维数组与循环嵌套
  8. 作用于HTML元素的Vue.js指令
  9. Python入门-行和缩进
  10. 单机环境下(双机或是分布式系统不用考虑这个问题),app_offline.htm是个不错的选择...
  11. python中索引越界的常见原因
  12. 常用的excel函数—汇总
  13. 如何把自己打造成技术圈的papi酱
  14. android代码让手机降温,手机降温神器下载 手机一键降温神器 for Android v1.0.1 安卓版 下载-脚本之家...
  15. php strpos注意问题坑,php小白容易出现的 strpos 逻辑错误
  16. Python Apex YOLO V7 main 目标检测 全过程记录
  17. Android开源库V - Layout:淘宝、天猫都在用的UI框架,赶紧用起来吧!
  18. UI-网站首页轮播图、易拉宝、发布在微信公众号的宣传海报的图片设计信息
  19. top-level object
  20. duolingo 多邻国 安卓版无法使用口语功能

热门文章

  1. 虚拟环境使用自动化软件能够节省成本吗?
  2. Android:如何从堆栈中还原ProGuard混淆后的代码
  3. 一个小学教师建站的不惑与困惑
  4. 将数据库中一张表中数据复制到另一张表
  5. httpd glibc free() 报错解决一例
  6. exit(0)和exit(1)解释
  7. postgresql数据库导入导出
  8. OD使用教程21(上) - 调试篇21
  9. iframe高度自适应的实现
  10. AndroidStudio_开发工具的设置_界面设置_字体设置_使用习惯设置_按钮设置等一些设置的介绍---Android原生开发工作笔记71