Interrupt Timer

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo liebe Forum User,

    Ich komme eigentlich mehr aus der Mikrocontroller Ecke und wollte nun erste Projekte mit dem Raspberry umsetzen.
    Daher bin ich was embedded Linux angeht noch so ziemlich am Anfang und bin gerade dabei mich einzulesen. Ich hoffe ihr könnt mir bei meinen anfänglichen Problemen weiterhelfen ;)

    Ich frage mich wie ich eine Funktion zeitlich alle x Millisekunden aufrufen kann. Dabei möchte ich kein Programm schreiben und irgendwelche delay() Funktionen nutzen. Mit einem Mikrocontroller hab ich einfach einen Timer eingestellt und und den Code in einer Interrupt Sub Routine geschrieben.

    Könnt ihr mir dafür vlt Tipps, quellen oder Beispiele geben ? Bevorzugt für C .. Python ist aber auch ok.
    Schlagwörter für google wären auch super..

  • Zitat von Pog pid=7563 dateline=1363000009


    Hallo liebe Forum User,

    Ich komme eigentlich mehr aus der Mikrocontroller Ecke und wollte nun erste Projekte mit dem Raspberry umsetzen.
    Daher bin ich was embedded Linux angeht noch so ziemlich am Anfang und bin gerade dabei mich einzulesen. Ich hoffe ihr könnt mir bei meinen anfänglichen Problemen weiterhelfen ;)

    Ich frage mich wie ich eine Funktion zeitlich alle x Millisekunden aufrufen kann. Dabei möchte ich kein Programm schreiben und irgendwelche delay() Funktionen nutzen. Mit einem Mikrocontroller hab ich einfach einen Timer eingestellt und und den Code in einer Interrupt Sub Routine geschrieben.

    Könnt ihr mir dafür vlt Tipps, quellen oder Beispiele geben ? Bevorzugt für C .. Python ist aber auch ok.
    Schlagwörter für google wären auch super..


    Hallo Pog
    Ich bin auf der gleichen Suche. Habe auch die wiringPi angeschaut und mal eine LED eingeschaltet, aber ein timer interrupt wäre ideal bzw. ich finde dort keinen. Am ehesten kommt die PWM-Generierung an das ran was ich in etwa brauche (100us Taskzeit wäre brauchbar). Ich habe das aber noch nicht richtig verstanden, nur soviel das der Thread eine "definierte Zeit" in den Wartezustand geschickt wird (Jitter?) und mit einer hohen Priorität (Aufruf piHiPri(50)) bearbeitet wird.
    Mit einer hohen Priorität kann man aber das Betriebssystem lahm legen bzw. mit einer zu niedrigen wird vermutlich der Jitter stark anwachsen. Ich muss das noch ausprobieren.

    Bisher habe ich nur wenig gefunden zu Echtzeit-Tasks oder Timer-Interrupts, die ich gerne nutzen würde. Die neueren Linux-Kernel müssten in der Lage sein Echtzeit-Tasks zur Verfügung zu stellen. Leider weiss ich nicht wie das geht. Oder habe ich "softPWM.c" nicht verstanden?

    Im folgenden Link hat einer den Weg eingeschlagen der für mich ideal wäre, allerdings ist der Echtzeit-Linux-Kernel noch ziemlich nackt und nicht vergleichbar mit der Reife von Raspbian
    http://www.raspberrypi.org/phpBB3/viewtopic.php?f=72&t=38962
    Wenn dort wenigstens Ethernet und die SD-Card gehen würden wäre ich schon zufrieden.

    Lass mal hören was du rauskriegst.
    Georg

  • Na klar würde das gehen, aber dann kann ich auch gleich den TCP/IP-Stack dort auch laufen lassen und einem kleinen Web-Server zum bedienen implementieren (z.B. AVR-IO-Pollin-Board mit Atmega). Das habe ich gerade am Laufen, aber halt auch nur eine 100us Task zusätzlich zum Web-Server, die aber mit sehr kleinem Jitter!. Das ist für 32kByte Flash, ca 1k RAM bei einem 8Bit-Prozessor und 10 MHz enorm und viel mehr geht halt nicht! Da ist natürlich meine Erwartungshaltung bei einem 32Bit-Prozessor mit 700Mhz, 512Mbyte RAM und 16Gbyte Flash deutlich höher.

    Im Prinzip muss es gehen, denn seit ca 5 Jahren sind Echtzeittasks bei "richtigen" Betriebssystemen wie Linux in der Diskussion. Nach dem man Anfangs bei Linux den Kerneln "patchte" ist es gelungen Echtzeittasks mit dem Kernel zu ermöglichen (soll mit jedem neueren Kernel gehen). Ich selbst kann es leider nicht, da ich damals nur zugeschaut habe als wir das auf einem x86-Sytem ausprobierten (es lief!). Bei anderen Betriebssystemen benötigt man Zusatzsoftware (i.d.R. lizenz- und kostenpflichtig).

    Die Trennung Echtzeit auf zusätzlichem Mikroprozessor und den Rest auf Linux-Plattform ist halt blöd, wenn man auf dem Mikroprozessor rechnen muss und genau weiss das hätte die FPU der Linuxplattform in einigen Nanosekunden erledigt. Selbst wenn man auf dem Linus-System rechnen lässt müssen die Ergebnisse rechtzeitig (halt in Echtzeit) an den Mikroprozessor.

    Ausserdem würde ich sehr gerne den Komfort einer Linux-Plattform mit ssh-login, gcc aufrufen aus der Ferne nutzen. Im Moment renne ich von einem Raum zum anderen um den Mikroprozessor auszubauen zu meiner Entwicklungsumgebung zu bringen dort neu zu flashen um dann wieder in umgekehrter Reihenfolge den Erfolg der kleinen Programmänderung zu prüfen.

    Der Echtzeittask auf einer Linux-Plattform wäre da halt die perfekte Lösung und aus meiner Sicht für viele Mikroprozessor-Probleme (Floating-Point, Speicherbedarf, Filesystem, TCP/IP, Bildschirmanbindung) die perfekte Lösung.

  • Hallo zusammen,

    mir hat diesbezüglich PIGPIO ganz gut gefallen, eine C-Bibliothek, die ausschließlich mit dem DMA-Takt des RPi arbeitet. PWM ist z.B. simultan über mehrere GPIOs gleichzeitig möglich, so lassen sich beispielsweise mehrere Servos steuern. Es ist auch eine reine Timerfunktion via callback nutzbar. Falls eine Auflösung im Millisek. Bereich genügt, sollte man ganz brauchbare Ergebnisse erzielen.

    Leider bin ich noch nicht zu einem ausführlicheren Test gekommen, Näheres lässt sich hier finden:
    http://www.raspberrypi.org/phpBB3/viewtopic.php?f=37&t=22923

    Gruß, mmi.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!