From 1d07bd1bffa1f86871d6e6c942847a903965692c Mon Sep 17 00:00:00 2001 From: Allan Stephens Date: Fri, 7 Oct 2016 15:54:11 -0500 Subject: [PATCH] unified: Eliminate support for dynamic timers Gets rid of official support for dynamic timer allocation in the unified kernel, since users can easily define and initialize timers at any time. Legacy support for dynamic timers is maintained for backwards compatibility reasons for the time being ... Change-Id: I12b3e25914fe11e3886065bee4e96fb96f59b299 Signed-off-by: Allan Stephens --- include/kernel.h | 7 ------- include/legacy.h | 10 ++++++++-- kernel/unified/timer.c | 8 +++++--- tests/kernel/test_timer/microkernel/src/timer.c | 9 ++++++--- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/include/kernel.h b/include/kernel.h index 40661d8d628..63e903a9026 100644 --- a/include/kernel.h +++ b/include/kernel.h @@ -290,11 +290,6 @@ struct k_timer { extern void k_timer_init(struct k_timer *timer, void *data); -#if (CONFIG_NUM_DYNAMIC_TIMERS > 0) -extern struct k_timer *k_timer_alloc(void); -extern void k_timer_free(struct k_timer *timer); -#endif - extern void k_timer_start(struct k_timer *timer, int32_t duration, int32_t period, void (*handler)(void *), void *handler_arg, @@ -355,8 +350,6 @@ extern int64_t k_uptime_delta(int64_t *reftime); extern uint32_t k_uptime_delta_32(int64_t *reftime); -extern bool k_timer_pool_is_empty(void); - extern uint32_t k_cycle_get_32(void); /** diff --git a/include/legacy.h b/include/legacy.h index 85510b1ceed..3cfead7e379 100644 --- a/include/legacy.h +++ b/include/legacy.h @@ -655,8 +655,14 @@ static inline int nano_stack_pop(struct nano_stack *stack, uint32_t *data, #define ktimer_t struct k_timer * -#define task_timer_alloc k_timer_alloc -#define task_timer_free k_timer_free +#if (CONFIG_NUM_DYNAMIC_TIMERS > 0) +extern struct k_timer *_k_timer_alloc(void); +#define task_timer_alloc _k_timer_alloc + +extern void _k_timer_free(struct k_timer *timer); +#define task_timer_free _k_timer_free +#endif + extern void task_timer_start(ktimer_t timer, int32_t duration, int32_t period, ksem_t sema); diff --git a/kernel/unified/timer.c b/kernel/unified/timer.c index af82085d41b..5f9686d7ebf 100644 --- a/kernel/unified/timer.c +++ b/kernel/unified/timer.c @@ -83,6 +83,8 @@ void k_timer_init(struct k_timer *timer, void *data) #if (CONFIG_NUM_DYNAMIC_TIMERS > 0) +/* Implements legacy API support for dynamic timers */ + static struct k_timer _dynamic_timers[CONFIG_NUM_DYNAMIC_TIMERS]; static sys_dlist_t _timer_pool; @@ -110,7 +112,7 @@ static int init_dyamic_timers(struct device *dev) * * @return pointer to the new timer structure */ -struct k_timer *k_timer_alloc(void) +struct k_timer *_k_timer_alloc(void) { k_sched_lock(); @@ -133,7 +135,7 @@ struct k_timer *k_timer_alloc(void) * * @return N/A */ -void k_timer_free(struct k_timer *timer) +void _k_timer_free(struct k_timer *timer) { k_timer_stop(timer); k_sched_lock(); @@ -147,7 +149,7 @@ void k_timer_free(struct k_timer *timer) * * @return true if the timer pool is empty, false otherwise */ -bool k_timer_pool_is_empty(void) +bool _k_timer_pool_is_empty(void) { k_sched_lock(); diff --git a/tests/kernel/test_timer/microkernel/src/timer.c b/tests/kernel/test_timer/microkernel/src/timer.c index f1834e3a030..8a43ebde654 100644 --- a/tests/kernel/test_timer/microkernel/src/timer.c +++ b/tests/kernel/test_timer/microkernel/src/timer.c @@ -31,9 +31,12 @@ This module tests the following microkernel timer routines: #include "fifo_timeout.c" -#ifndef CONFIG_KERNEL_V2 +#ifdef CONFIG_KERNEL_V2 +extern bool _k_timer_pool_is_empty(void); /* For white box testing only */ +#define timer_pool_is_empty _k_timer_pool_is_empty +#else extern struct nano_lifo _k_timer_free; /* For white box testing only */ -static inline bool k_timer_pool_is_empty(void) +static inline bool timer_pool_is_empty(void) { return (bool)(_k_timer_free.list == NULL); } @@ -267,7 +270,7 @@ int testLowTimerGet(void) /* Whitebox test to ensure that all timers were allocated. */ - if (!k_timer_pool_is_empty()) { + if (!timer_pool_is_empty()) { TC_ERROR("** Not all timers were allocated!\n"); }