Raspberry - Timer

Gast #6554070
Lesenswert?

Hallo, für eine Anwendung in C benötige ich einen Softwaretimer.
Der Handler "timer_handler" wird allerdings nicht jede 10ms ausgeführt.
Der Timer läuft viel langsamer.
1
void timer_handler (int signum)
2
{
3
   /* do something */     
4
}
5
 
6
void Init(void)
7
{
8
    struct sigaction sa;
9
    struct itimerval timer;
10

11
    /* Installiere timer_handler als Signal Handler fuer SIGVTALRM. */
12
    memset(&sa, 0, sizeof (sa));
13
    sigemptyset(&sa.sa_mask);
14
    sa.sa_handler = &timer_handler;
15
    sigaction(SIGVTALRM, &sa, NULL);
16

17
    /* Timer konfigurieren fuer 10 ms ... */
18
    timer.it_value.tv_sec = 0;
19
    timer.it_value.tv_usec = 10000;
20

21
    /* ... und alle 10 ms danach */
22
    timer.it_interval.tv_sec = 0;
23
    timer.it_interval.tv_usec = 10000;
24

25
    /* Timer starten */
26
    setitimer(ITIMER_VIRTUAL, &timer, NULL);
27
}
#6558123
Lesenswert?

Was für ein Scheduler? Muss der Auslöser asynchron sein? Gehen auch 
Threads?

Zu deinem Code: Was du willst ist doch ITIMER_REAL/SIGALRM statt 
ITIMER_VIRTUAL/SIGVTALRM, oder nicht?

Ob der es dann schafft wirklich alle 10ms auszulösen, oder gar jede 1ms, 
und ob du die Signale schnell genug verarbeiten kannst musst du halt 
ausprobieren.

https://linux.die.net/man/2/setitimer

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren