Merge pull request #7558 from kaspar030/add_xtimer_set_timeout_flag
sys: xtimer: add xtimer_set_timeout_flag()
This commit is contained in:
commit
516aca6b18
@ -439,6 +439,17 @@ static inline bool xtimer_less64(xtimer_ticks64_t a, xtimer_ticks64_t b);
|
|||||||
*/
|
*/
|
||||||
int xtimer_mutex_lock_timeout(mutex_t *mutex, uint64_t us);
|
int xtimer_mutex_lock_timeout(mutex_t *mutex, uint64_t us);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set timeout thread flag after @p timeout
|
||||||
|
*
|
||||||
|
* This function will set THREAD_FLAG_TIMEOUT on the current thread after @p
|
||||||
|
* timeout usec have passed.
|
||||||
|
*
|
||||||
|
* @param[in] t timer struct to use
|
||||||
|
* @param[in] timeout timeout in usec
|
||||||
|
*/
|
||||||
|
void xtimer_set_timeout_flag(xtimer_t *t, uint32_t timeout);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief xtimer backoff value
|
* @brief xtimer backoff value
|
||||||
*
|
*
|
||||||
|
|||||||
@ -30,6 +30,10 @@
|
|||||||
|
|
||||||
#include "timex.h"
|
#include "timex.h"
|
||||||
|
|
||||||
|
#ifdef MODULE_CORE_THREAD_FLAGS
|
||||||
|
#include "thread_flags.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#define ENABLE_DEBUG 0
|
#define ENABLE_DEBUG 0
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
@ -257,3 +261,18 @@ int xtimer_mutex_lock_timeout(mutex_t *mutex, uint64_t timeout)
|
|||||||
xtimer_remove(&t);
|
xtimer_remove(&t);
|
||||||
return -mt.timeout;
|
return -mt.timeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef MODULE_CORE_THREAD_FLAGS
|
||||||
|
static void _set_timeout_flag_callback(void* arg)
|
||||||
|
{
|
||||||
|
thread_flags_set(arg, THREAD_FLAG_TIMEOUT);
|
||||||
|
}
|
||||||
|
|
||||||
|
void xtimer_set_timeout_flag(xtimer_t *t, uint32_t timeout)
|
||||||
|
{
|
||||||
|
t->callback = _set_timeout_flag_callback;
|
||||||
|
t->arg = (thread_t *)sched_active_thread;
|
||||||
|
thread_flags_clear(THREAD_FLAG_TIMEOUT);
|
||||||
|
xtimer_set(t, timeout);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
@ -4,5 +4,6 @@ include ../Makefile.tests_common
|
|||||||
BOARD_INSUFFICIENT_MEMORY := nucleo32-f031
|
BOARD_INSUFFICIENT_MEMORY := nucleo32-f031
|
||||||
|
|
||||||
USEMODULE += core_thread_flags
|
USEMODULE += core_thread_flags
|
||||||
|
USEMODULE += xtimer
|
||||||
|
|
||||||
include $(RIOTBASE)/Makefile.include
|
include $(RIOTBASE)/Makefile.include
|
||||||
|
|||||||
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "thread.h"
|
#include "thread.h"
|
||||||
|
#include "xtimer.h"
|
||||||
|
|
||||||
static char stack[THREAD_STACKSIZE_MAIN];
|
static char stack[THREAD_STACKSIZE_MAIN];
|
||||||
|
|
||||||
@ -85,6 +86,14 @@ int main(void)
|
|||||||
|
|
||||||
while(!done) {};
|
while(!done) {};
|
||||||
|
|
||||||
|
puts("main: setting 100ms timeout...");
|
||||||
|
xtimer_t t;
|
||||||
|
uint32_t before = xtimer_now_usec();
|
||||||
|
xtimer_set_timeout_flag(&t, 100000);
|
||||||
|
thread_flags_wait_any(THREAD_FLAG_TIMEOUT);
|
||||||
|
uint32_t diff = xtimer_now_usec() - before;
|
||||||
|
printf("main: timeout triggered. time passed: %uus\n", (unsigned)diff);
|
||||||
|
|
||||||
puts("test finished.");
|
puts("test finished.");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user