Forum: PC-Programmierung Raspberry - Timer


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Manni (Gast)


Bewertung
0 lesenswert
nicht 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
}

von Mikro 7. (mikro77)


Bewertung
0 lesenswert
nicht lesenswert
Du benutzt ITIMER_VIRTUAL: "This timer counts down against the user-mode 
CPU time consumed by the process. (The measurement includes CPU time 
consumed by all threads in the process.) At each expiration, a SIGVTALRM 
signal is generated."

Ist das was du wirklich willst?

von Manni (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ja das mit dem Timer (setitimer) ist doch nicht so eine gute Idee.
Ich bräuchte quasi einen 1ms Tick für meinen Scheduler. Was für 
Möglichkeiten gibt es da für den raspberry pi?

von Mikro 7. (mikro77)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.