LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1831|回复: 9

关于TC中的 时钟中断的一段程序,看不明白

[复制链接]
发表于 2003-7-9 09:17:59 | 显示全部楼层 |阅读模式
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#define VK_ESC 0x11b
#define TIMER 0x1c
#ifdef __cplusplus
    #define __CPPARGS ...
#else
        #define __CPPARGS
#endif

int TimerCounter=0;
void interrupt ( *ldhandler)(__CPPARGS);/*看不明白,CPPARGS是什么来的,还有这个函数参数的定义*/
void interrupt newhandler(__CPPARGS)
{
   TimerCounter++;
   ldhandler();/*看不明白,这个函数跟上面有什么联系*/
}


void SetTimer(void interrupt (*IntProc)(__CPPARGS))/*看不明白参数的定久*/
{
        ldhandler=getvect(TIMER);
        disable();
        setvect(TIMER,IntProc);
        enable();
}


void KillTimer()
{
        disable();
        setvect(TIMER,ldhandler);
        enable();
}


void main(void)
{
        int key,time=0;
        SetTimer(newhandler);
        for (;;)
        {
                if (bioskey(1))
                {
                        key=bioskey(0);
                        if (key==VK_ESC)
                        {
                                printf("User cancel!\n");
                                break;
                        }
                }
                if (TimerCounter>18)
                {

                        TimerCounter=0;
                        time++;
                        printf("%d\n",time);
                        if (time==10)
                        {
                                printf("rogram terminated normally!\n");
                                break;
                        }
                }
        }
        KillTimer();

}

发表于 2003-7-9 10:59:38 | 显示全部楼层
你可以先看看有关函数指针的章节,另外,你对中断的理解怎么样?
 楼主| 发表于 2003-7-9 11:06:53 | 显示全部楼层
最初由 viper 发表
你可以先看看有关函数指针的章节,另外,你对中断的理解怎么样?



中断的概念我懂,可是要实际操作是另一回事

__CPPARGS是什么来的


我不明白那几个函数
发表于 2003-7-9 12:24:45 | 显示全部楼层
主要的操作就是设置和读取中断向量。
保存中断向量用了一个函数指针,ldhandler
Turbo C 里面有一个关键子 interrupt,说明函数是一个中断处理用的。

__CPPARGS 没有什么特别的意思,主要是为了在C++编译。
 楼主| 发表于 2003-7-9 12:56:14 | 显示全部楼层
最初由 viper 发表
主要的操作就是设置和读取中断向量。
保存中断向量用了一个函数指针,ldhandler
Turbo C 里面有一个关键子 interrupt,说明函数是一个中断处理用的。

__CPPARGS 没有什么特别的意思,主要是为了在C++编译。




谢谢版主你的解答.让我明白许多
有这方面的详细资料吗?给个地址,太感谢了
 楼主| 发表于 2003-7-9 15:04:41 | 显示全部楼层
ldhandler();

这个还是不明白,我不知这个有什么功能?怎么用?
发表于 2003-7-9 20:04:09 | 显示全部楼层
ldhandler() 是一个函数指针,程序里面用来保存原来的中断处理程序,基本上该程序自己的中断处理过程就是把 TimerCounter++,然后再去叫原来的中断处理程序继续处理。

资料的地址我就没有了,用TC都是好长时间以前的事儿了。
发表于 2006-11-7 11:02:51 | 显示全部楼层
这个程序我也看的不是很明白,想向大家请教一下:
1.#define TIMER 0x1c   我想问问定义这个的作用是什么?
2.#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif

关于上面这一段代码它的含义是什么?有什么作用?
3.搂主的问题也是我想问的!! 请各位大哥帮帮忙!! 谢谢
回复 支持 反对

使用道具 举报

发表于 2006-11-8 02:55:00 | 显示全部楼层
Turbo C的程序还有人搞,我服了。在实践中有用吗,这个?
回复 支持 反对

使用道具 举报

发表于 2008-3-31 00:30:21 | 显示全部楼层
TC现在用的还是很广泛的!
你的这个程序应该是一个秒表记时,因为你更改了原来系统0x1c应该执行的程序,所以你在这里就必须手动调用!
ldhandler();保存了原来的中断程序!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表