下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、嵌入式操作系统内核原理和开发(中断)在我个人看来,中断是 cpu最重要的特色。从某种意义上来说,没有中断就没有嵌入式操作系统。一旦你明白了中断的真正含义,你对操作系统的了解就算真正入门了。什么是中断呢?我们可以看看单片机下面是怎么做的。1#include <REG51.h>2sbit LED = P1 人 6;3unsigned int led_enable = 0;4void Delay(unsignedint a)56unsignedint i;7while (a)S9a -;10for (i = 0; i < 1200; i+);111213void led_switc
2、h(void ) interrupt 0using 11415if (0 = led_enable)1617led_enable = 1;1S19else卫21led_enable = 0;23EX0 = 1;void main( void )苫27EA = 1;袈EX0 = 1;29while (1)30if (led_enable)3132LED = 0;33Delay(100);峯LED = 1;35Delay(100);363738 上面的代码是一段真实的 51单片机代码。它完成的功能很简单,就是对led灯进行点亮 处理。怎么解释呢?在单片机上电后,我们发现一开始led二极管没有发生闪
3、烁。在我们单击按键之后,led开始出现间隙性闪烁的现象,之后再一次单击按键,又可以发现led的闪烁现象消失了。为什么会出现这种现象?主要是因为我们单击按键的时候,在单片机的引脚处产生了中断。查看到中断的单片机此时就会跳转到中断向量表里面查找中断处理函数。这里的按键中断处理函数就是led_switch。处理完led_switch之后,单片机又会回到原来的main函数继续执行,所以整个中断的过程就像没有发生过一样。因为在led_switch中我们对led_enable进行了处理,所以就出现了我们在前面说过的各种现象。说到这,也许有的朋友会说,cpu的这种中断属性怎么才能在pc上面仿真出来呢?其实很
4、简单。linux系统本身就有一个优秀的特性,那就是信号。只要我们设定相应的信号和 处理函数,那么linux系统就会在系统调度返回之前调用相应的信号函数来处理。整个信号 处理的过程和中断是一模一样的。因为在处理中断的时候,我们需要对cpu的现场进行保存和恢复处理,而信号的处理也是一样。 在信号处理前,系统肯定是处于内核态, 那么linux 系统肯定已经为我们做好了现场的保护工作,处理完信号之后,系统本身又会恢复到原来的用户态,继续执行下面的代码。所以linux自身也会默认对原来的场景进行恢复处理,就好象中断返回一样。39 #include <stdio.h>#include <
5、time.h>4| #include <sys/time.h>二.#include <stdlib.h>43 #include <signal.h>-!-! static int count = 0;-f: static struct itimerval oldtv; 筋 void set_timer()-思 struct itimerval itv;4?50515253 setitimer(ITIMER_REAL, &itv, & oldtv);55 void signal_handler( int m):亍count +;5&
6、;printf("%dn" , count);-1 int main()念signal(SIGALRM, signal_handler);(Sset_timer();6'while (count< 10000);住exit(0);迫return 1;(gdb) bt#0 signal_handler(m=14) at code.c: 23#1 <signal handler caller>#2 main() at code.c:32#include <stdio.h>#include <stdlib.h>#include &
7、lt;signal.h>#include <tchar.h>#include <Windows.h>void SignalHandler( int signal);printf( "Application over.n""J int main()< :i:-:typedef void (*SignalHandlerPointer)(int );齐 SignalHandlerPointer previousHandler;previousHandler = signal(SIGINT, SignalHandler);迫 while (1)囲Sleep(0);-如 exit(1);91 下面,我们首先编译这一段代码。接着在程序run之后,我们可以在 SignalHandler之处设置一个断点。一切就绪完毕,再按下ctrl+c之后,系统就会在SignalHandler之处断住。 此时单击【Debug】->【Threads】,就可以看到这个情况。相信看到这里,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025 我体验的书法作品展示作文课件
- 数字化转型下J公司中国区财务共享服务中心的困境突破与优化策略研究
- 2025 好玩的排球扣球技巧训练作文课件
- 数字化赋能:乌拉特中旗农村信用社信贷管理系统的创新设计与实践
- 建筑焊工(建筑特殊工种)试题及答案
- 数字化浪潮下电子商务企业内部控制体系的构建与优化-以J公司为例
- 数字化浪潮下中国电子生产运营管理系统的深度剖析与创新实践
- 数字化浪潮下S公司巴西市场营销方案的创新与实践:基于本土洞察与国际竞争的策略转型
- 2025年前台问询服务礼仪试卷
- 矿区原煤运输项目商业计划书
- 个人自我批评和相互批评意见100条
- 三年级下册语文期末复习教案参阅五篇
- 初中体育-篮球绕杆运球教学课件设计
- 五星级酒店客房配置设计要求
- 2023年江西环境工程职业学院高职单招(数学)试题库含答案解析
- GB/T 1420-2015海绵钯
- 《物理(下册)》教学课件-第六章-光现象及其应用
- 焊接技能综合实训-模块六课件
- 苯氨基与硝基化合物中毒
- 下睑内翻、倒睫患者的护理课件
- 联苯二氯苄生产工艺及产排污分析
评论
0/150
提交评论