标题:
C语言经典算法之底层编程:时间陷阱
[打印本页]
作者:
苹果也疯狂
时间:
2014-5-9 17:12
标题:
C语言经典算法之底层编程:时间陷阱
/********
使用过
basic
语言的朋友都知道
,basic
中有一种重要的功能
,
就是时间陷阱
.
它能是主程序的运行和对事件的处理异步进行
.
通过设置时间陷阱
.
可以在规定的时间间隔到达后自动执行某个子程序
.
子程序运行结束后又回到主程序的断点处继续执行
.basic
语言提供了有关时间陷阱的语句
.
可以直接调拥獵语言没有这样的功能
,
为了能实现上述功能
,
这里给出了几个子函数以帮助实现
.
on_timer(t,p):
设定定时时间间隔为
t(
以秒为单位
).
并规定了事件处理子函数的入口点
.t
是整型数
,p
是指向子函数的指针
.
timer_on():
启动定时器开始计时
.
以后每个
t
秒
,
指针
p
所指向的子函数运行一次
.
timer_off():
关闭定时器
.
下面是子函数清单
.
***************/
/*timer
模块源程序清单
*/
#include<dos.h>
#define Sizeprogram 375
void interrupt (*oldtimer)();
void interrupt newtimer();
static struct SREGS seg;
unsigned intsp,intss;
unsigned myss,stack;
unsigned vseg;
int running=0;
int m1,m2,m3=0;
int (*sub_ptr)();
void on_timer();
void timer_on();
void timer_off();
void on_timer(t,pp)
int t;
int (*pp)();
{
sub_ptr=pp;
m1=t;
segread(&seg);
stack=(Sizeprogram-(seg.ds-seg.cs))*16-300;
myss=_SS;
oldtimer=getvect(0x1c);
}
void timer_on()
{
m2=0;
m3=1;
setvect(0x1c,newtimer);}
void timer_off()
{
m3=0;
setvect(0x1c,oldtimer);
}
void interrupt newtimer()
{
(*oldtimer)();
if(running==0)
running=1;
disable();
intsp=_SP;
intss=_SS;
_SP=stack;
_SS=myss;
enable();
if(m3==1){
if(m2==m1*18){
m2=0;
(*sb_ptr)();
}
m2+=1;
}
disable();
_SP=intsp;
_SS=intss;
enable();
running=0;
}
}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0