Code: Select all
static event_timer_t sensorsPollTimer;
#define POLL_TIMER_EVENT_MASK EVENT_MASK(1)
static THD_WORKING_AREA(waSensorsReaderThread, 128);
static THD_FUNCTION(sensorsReaderThread, arg) {
chRegSetThreadName("Sensors reader");
event_listener_t eventListener;
evtObjectInit(&sensorsPollTimer, CH_CFG_ST_FREQUENCY / SENSORS_POLL_FREQUENCY);
chEvtRegisterMask((event_source_t*)&sensorsPollTimer, &eventListener, POLL_TIMER_EVENT_MASK);
evtStart(&sensorsPollTimer);
while (TRUE) {
chEvtWaitAny(POLL_TIMER_EVENT_MASK);
... do polling sensors ...
}
}
This code freezes in the waiting for the event from the timer. If I replace the delay in waiting for an event using chThdSleepMilliseconds, the code works.
I do not quite understand how to use the periodic event timer. What am i doing wrong?