Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: C (alle ISO-Standards) ::  Alle 100ms funktion aufrufen     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Recounter
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.03.2017
Beiträge: 3
Beitrag Recounter Mitglied 16:58:18 20.03.2017   Titel:   Alle 100ms funktion aufrufen            Zitieren

Hallo zusammen,

ich würde gerne alle 100ms eine Funktion ausführen um Daten zu senden. Die 100ms müssen nicht so genau eingehalten werden, so +-10ms wären ausreichend.
Hardwarebasis ist ein PhyboardWega mit AM335x ARM Cortex-A8 Prozessor. Betriebssytem ist Yocto Linux.

Wie mache ich das am besten?
Ich steh da im Augenblick auf dem Schlauch wie man das realisieren kann und bin daher für Vorschläge dankbar. :rolleyes:
SeppJ
Global Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 27497
Beitrag SeppJ Global Moderator 17:50:42 20.03.2017   Titel:              Zitieren

Ich vermute mal, das eigentliche Programm soll parallel weiter laufen? In dem Fall: Steuerthread aufmachen. Dieser startet alle 100 ms einen weiteren Thread mit der Funktion. Zu klärende Fragen: Was ist, wenn der vorherige Sendevorgang noch nicht fertig ist bzw. ob die Abschlusszeit des vorherigen Sendevorgangs eine Rolle spielt.


Das geht eventuell auch wesentlich einfacher, wenn es ausreicht, falls der Abstand vom Abschluss des vorherigen Sendevorgang zum Beginn des nächsten Sendevorgangs 100 ms betragen soll, bzw. dass die Dauer des Sendevorgangs vernachlässigbar kurz ist. In dem Fall reicht es, einfach 100 ms zu warten.

_________________
Korrekte Rechtschreibung und Grammatik sind das sprachliche Äquivalent zu einer Dusche und gepflegter Kleidung.
Andromeda
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.12.2006
Beiträge: 2021
Beitrag Andromeda Mitglied 18:05:20 20.03.2017   Titel:   Re: Alle 100ms funktion aufrufen            Zitieren

Recounter schrieb:

Wie mache ich das am besten?


Zum Beispiel über einen periodischen Timer-Interrupt. Wie man den einrichtet, müsste in der Doku zu dem Board stehen.

_________________
My Browser User Agent String is Mozilla/5.0 (X11; SunOS i86pc; rv:10.0.6) Gecko/20100101 Firefox/10.0.6
Recounter
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.03.2017
Beiträge: 3
Beitrag Recounter Mitglied 18:50:16 20.03.2017   Titel:              Zitieren

Zitat:
Ich vermute mal, das eigentliche Programm soll parallel weiter laufen? In dem Fall: Steuerthread aufmachen. Dieser startet alle 100 ms einen weiteren Thread mit der Funktion. Zu klärende Fragen: Was ist, wenn der vorherige Sendevorgang noch nicht fertig ist bzw. ob die Abschlusszeit des vorherigen Sendevorgangs eine Rolle spielt.


Das geht eventuell auch wesentlich einfacher, wenn es ausreicht, falls der Abstand vom Abschluss des vorherigen Sendevorgang zum Beginn des nächsten Sendevorgangs 100 ms betragen soll, bzw. dass die Dauer des Sendevorgangs vernachlässigbar kurz ist. In dem Fall reicht es, einfach 100 ms zu warten.

Ich hatte mir auch überlegt einen Thread dafür aufzumachen, der andere Thread kann dann den Rest des Programmes übernehmen.
Also die Sendezeit ist so kurz, dass diese keine Rolle spielt. Sprich einfach periodisch alle 100ms ein Ereignis aufrufen reicht vollkommen aus.

Zitat:
Zum Beispiel über einen periodischen Timer-Interrupt. Wie man den einrichtet, müsste in der Doku zu dem Board stehen.


Da steht leider garnichts zum Thema Timer. Lediglich in der ARM-Doku zum Prozessor stehen Infos, aber ich habe leider keine Zeit mich mit Programmierung auf Registerebene auseinanderzusetzen. Gibt es denn keine Standardisierten Methoden unter Linux dafür, sodass man sich als Benutzer nicht explizit darum kümmern muss?
Andromeda
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.12.2006
Beiträge: 2021
Beitrag Andromeda Mitglied 20:20:56 20.03.2017   Titel:              Zitieren

Hardware-unabhängig bietet Linux das hier: http://man7.org/linux/man-pages/man2/timer_create.2.html

_________________
My Browser User Agent String is Mozilla/5.0 (X11; SunOS i86pc; rv:10.0.6) Gecko/20100101 Firefox/10.0.6
Wutz
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2010
Beiträge: 3847
Beitrag Wutz Mitglied 21:32:37 20.03.2017   Titel:              Zitieren

setitimer sollte wohl passen, falls dein Compiler das hat.

_________________
Java, the best argument for Smalltalk since C++. -- Frank Winkler
Recounter
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.03.2017
Beiträge: 3
Beitrag Recounter Mitglied 21:34:22 20.03.2017   Titel:              Zitieren

Also ich habe das ganze jetzt ganz simpel mit einem seperaten Thread gelöst:

#include <unistd.h>
...

while(1)
{
usleep(100000);
//Sende Nachricht
}

Klappt vorerst wunderbar! :D
Vielen Dank aber für eure Hilfe und Vorschläge! :)
Wutz
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2010
Beiträge: 3847
Beitrag Wutz Mitglied 21:45:39 20.03.2017   Titel:              Zitieren

setitimer kommt ohne Threads aus.

_________________
Java, the best argument for Smalltalk since C++. -- Frank Winkler
C++ Forum :: C (alle ISO-Standards) ::  Alle 100ms funktion aufrufen   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.