最近在研究TSR驻留程序的编写,今天稍微有点眉目,写了个事件发生器之类的程序。不过有个问题无法解决,就是如何使程序退出驻留还有就是使程序不会反复的驻留内存,望各位高手指点迷津,谢谢。。 下面是我的程序: #include <dos.h> #include <stdio.h>
#define TIMER 0x1C
#ifdef __cplusplus #define __CPPARGS ... #else #define __CPPARGS #endif
/* 将应用程序弄得小一点,以便在内存中驻留 */ extern unsigned _heaplen = 1024; extern unsigned _stklen = 512;
/* 用于接收旧的时钟中断 */ void interrupt (*int1C)(__CPPARGS); /* 自定义一个新的时钟中断 */ void interrupt timer(__CPPARGS) { static int count=0; /* 每一秒钟产生一次Hello,world事件 (估算 54毫秒*20=1004毫秒=1秒) */ if(count<20) count++; else { puts("Hello,world!"); count=0; } /* 调用旧的时钟中断事件 */ int1C(); }
int main(void) { int1C=getvect(TIMER); /* 获得旧的时钟中断事件 */ disable(); setvect(TIMER,timer); /* 设置新的自定义时钟事件 */ enable(); /* 驻留内存(引用TC3.0帮助手册中Keep函数的范例 */ keep(0, (_SS + (_SP/16) - _psp)); return 0; /* 注意这个return,据我研究好像是用于驻留后再次调用main()函数*/ }