PDA

Visualizza la versione completa : [C] Timer e interrupt in C


kean
19-12-2005, 18:50
Prima di tutto un ciao a tutti! visto che sono nuovo...


Sto scrivendo un programma per il quale mi occorre usare un timer. Qualcuno non avrebbe in giro qualche file .c un link o qualcosa da darmi per capire come funzionano gli interrupt in C?

grazie

ibykos
20-12-2005, 14:08
esempio 1:



/*
* alarm.c
*
* Simple synchronous alarm program. This is used as a
* reference for progressive examples of asynchronous
* alarm programs.
*/
#include "errors.h"

int main (int argc, char *argv[])
{
int seconds;
char line[128];
char message[64];

while (1) {
printf ("Alarm> ");
if (fgets (line, sizeof (line), stdin) == NULL) exit (1);
if (strlen (line) <= 1) continue;

/*
* Parse input line into seconds (%d) and a message
* (%64[^\n]), consisting of up to 64 characters
* separated from the seconds by whitespace.
*/
if (sscanf (line, "%d %64[^\n]",
&seconds, message) < 2) {
fprintf (stderr, "Bad command\n");
} else {
sleep (seconds);
printf ("(%d) %s\n", seconds, message);
system("date");
}
}
}


esempio 2



/*
* alarm_fork.c
*
* This version of alarm.c uses fork to create a new process to
* wait for each alarm to expire.
*/
#include <sys/types.h>
#include <sys/wait.h>
#include "errors.h"

int
main (int argc, char *argv[])
{
char line[128];
int seconds;
pid_t pid;
char message[64];

while (1) {
printf ("Alarm> ");
if (fgets (line, sizeof (line), stdin) == NULL)
exit (0);
if (strlen (line) <= 1)
continue;
system ("date");
/*
* Parse input line into seconds (%d) and a message
* (%64[^\n]), consisting of up to 64 characters
* separated from the seconds by whitespace.
*/
if (sscanf (line, "%d %64[^\n]", &seconds, message) < 2) {
fprintf (stderr, "Bad command\n");
}
else {
pid = fork ();
if (pid == (pid_t) - 1)
errno_abort ("Fork");
if (pid == (pid_t) 0) {
// If we are in the child, wait and then print a message
sleep (seconds);
system ("date");
printf ("(%d) %s\n", seconds, message);
exit (0);
}
}
}
}


sono entrambi in c per Unix, spero di esserti stato utile.
ciao!

kean
21-12-2005, 15:21
Io ho bisogno un interrupt vero e proprio, ho guardato in fretta i due source, ma mi pare che contengano solamente dei semplici ritardi...correggimi se sbaglio.

grazie comunque

oregon
21-12-2005, 15:32
Non si capisce:

1) con quale sistema operativo stai lavorando

2) con quale compilatore

3) perche' dovresti usare l'interrupt per un timer

kean
22-12-2005, 21:35
Questo programma lo sto scrivendo su windows e uso devcpp.
Ora sarebbe abbastanza lungo descrivere per cosa ho bisogno l' interrupt. ti faccio un altro esempio, metti che fai una scanf, io vorrei farsì che se non viene inserito niente dopo un certo tempo, il programma passa ad eseguire delle altre istruzioni.

oregon
23-12-2005, 01:57
Quello che vuoi non si ottiene certamente gestendo gli interrupt.

Mentre con il DOS poteva essere ancora una cosa proponibile, con Windows non puoi gestire gli interrupt in codice utente ma lo devi fare attraverso codice che gira in modalita' kernel, in genere in un device driver.

Cio' che può servirti sono i timer messi a disposizione dal sistema operativo e gestibili tramite le API SetTimer e KillTimer (a cui ti rimando per il semplice funzionamento).

kean
26-12-2005, 17:37
grazie

Loading