Aktivieren Sie den Timer im Kernelmodul mit einer Genauigkeit von weniger als Mikrosekunden

7

Guten Abend, ich bitte Sie um Hilfe, um zu verstehen, wie Sie einen Timer im Kernelmodul verwenden, um periodische Aufgaben mit einer Periode von weniger als einer Mikrosekunde zu erledigen. Ich habe im Internet gesucht und festgestellt, dass es einen Timer (ARM-Seite) gibt, der zu einem solchen Timing fähig ist. Hat es jemand benutzt und könnte mir einen kleinen Hinweis geben?

Flavio Barisi
quelle

Antworten:

5

Es gemacht! Dies ist der Include-Abschnitt

#include <linux/hrtimer.h>
#include <linux/sched.h>

Dies ist der Variablenblock

/****************************************************************************/
/* Timer variables block                                                    */
/****************************************************************************/
static enum hrtimer_restart function_timer(struct hrtimer *);
static struct hrtimer htimer;
static ktime_t kt_periode;

Dies ist die Initialisierung

kt_periode = ktime_set(0, 100); //seconds,nanoseconds
hrtimer_init (& htimer, CLOCK_REALTIME, HRTIMER_MODE_REL);
htimer.function = function_timer;
hrtimer_start(& htimer, kt_periode, HRTIMER_MODE_REL);

Dies ist das Verfahren zum Abbrechen der Ausführung des Timers

hrtimer_cancel(& htimer);

und das ist der Rückruf

static enum hrtimer_restart function_timer(struct hrtimer * unused)
{
        if (gpio_current_state==0){
            gpio_set_value(GPIO_OUTPUT,1);
            gpio_current_state=1;
        }
        else{
            gpio_set_value(GPIO_OUTPUT,0);
            gpio_current_state=0;
        }
        hrtimer_forward_now(& htimer, kt_periode);
        return HRTIMER_RESTART;
}
Flavio Barisi
quelle