1

我必须编写关于定时器中断的 ac 文件。程序将在 DosBox 上运行。程序的特点很简单:

程序为每个定时器中断调用一个函数(由我输入)。这些中断将使用 setvect 和 getvect 函数进行编程。

例如,如果我有 ac 代码可以在没有任何睡眠或延迟功能的情况下每秒打印一次“Hello world\n”到屏幕上,那就太好了。我的意思是打印“hello world”的代码必须在一个函数中并且用于每个中断程序都必须调用这个函数。

很难找到这个案例的例子,你能转发任何例子链接吗?谢谢大家的帮助。。

4

2 回答 2

1
#include<signal.h>
#include<sys/time.h>
#include <unistd.h>
#include <assert.h>
#include <stdio.h>

#define PERIOD 999999
static sigset_t block ;
void timer_handler ();

static void init( ) __attribute__((constructor));
void init(){
    sigemptyset(&block);
    sigaddset(&block,SIGVTALRM);

struct sigaction act={0};
struct timeval interval;
struct itimerval period;

act.sa_handler=timer_handler;
assert(sigaction(SIGVTALRM,&act,NULL)==0);

interval.tv_sec=0;
interval.tv_usec=PERIOD;
period.it_interval=interval;
period.it_value=interval;
setitimer(ITIMER_VIRTUAL,&period,NULL);

    
}

void timer_handler(int sig){
write(1,"Hi\n",3); 


}
int main(){
  while(1);
  return 0;
}
于 2021-01-04T23:22:43.950 回答
0

只是一个建议。

一般来说,最好不要在中断中使用打印之类的功能。在您的情况下,因为您的代码很简单,所以这并不是一个真正的问题,但是如果您在中断上花费大量时间,您可能会在更复杂的程序上遇到一些优先级问题......

于 2013-04-16T12:39:33.763 回答