From 66a07bbd48dfb64a2bc819b937413d47473aed77 Mon Sep 17 00:00:00 2001 From: Allan Stephens Date: Fri, 18 Nov 2016 15:32:13 -0500 Subject: [PATCH] kernel: Minor optimization to kernel event logger timestamping Rewrites the timestamping logic to always generate timestamps via a function pointer that is initialized to sys_cycle_get_32(), but can be changed to point to a user-supplied function. This eliminates the need for an if/then/else construct in every place that a timestamp is generated. Change-Id: Id11f8c41b193a93cece16565978a525056010f0e Signed-off-by: Allan Stephens --- include/misc/kernel_event_logger.h | 23 ++++++++--------------- kernel/unified/kernel_event_logger.c | 16 ++++++++++------ 2 files changed, 18 insertions(+), 21 deletions(-) diff --git a/include/misc/kernel_event_logger.h b/include/misc/kernel_event_logger.h index 686e8e2b1ae..764aa41d408 100644 --- a/include/misc/kernel_event_logger.h +++ b/include/misc/kernel_event_logger.h @@ -57,8 +57,6 @@ static inline void _sys_k_event_logger_interrupt(void) {}; * @{ */ -#ifdef CONFIG_KERNEL_EVENT_LOGGER_CUSTOM_TIMESTAMP - /** * @typedef sys_k_timer_func_t * @brief Event timestamp generator function type. @@ -74,15 +72,11 @@ typedef uint32_t (*sys_k_timer_func_t)(void); * @cond INTERNAL_HIDDEN */ -extern sys_k_timer_func_t _sys_k_timer_func; - -static inline uint32_t _sys_k_get_time(void) -{ - if (_sys_k_timer_func) - return _sys_k_timer_func(); - else - return sys_cycle_get_32(); -} +#ifdef CONFIG_KERNEL_EVENT_LOGGER_CUSTOM_TIMESTAMP +extern sys_k_timer_func_t _sys_k_get_time; +#else +#define _sys_k_get_time sys_cycle_get_32 +#endif /* CONFIG_KERNEL_EVENT_LOGGER_CUSTOM_TIMESTAMP */ /** * INTERNAL_HIDDEN @endcond @@ -108,11 +102,10 @@ static inline uint32_t _sys_k_get_time(void) * * @return N/A */ -void sys_k_event_logger_set_timer(sys_k_timer_func_t func); -#else -static inline uint32_t _sys_k_get_time(void) +#ifdef CONFIG_KERNEL_EVENT_LOGGER_CUSTOM_TIMESTAMP +static inline void sys_k_event_logger_set_timer(sys_k_timer_func_t func) { - return sys_cycle_get_32(); + _sys_k_get_time = func; } #endif /* CONFIG_KERNEL_EVENT_LOGGER_CUSTOM_TIMESTAMP */ diff --git a/kernel/unified/kernel_event_logger.c b/kernel/unified/kernel_event_logger.c index a747e229ebf..9986f375907 100644 --- a/kernel/unified/kernel_event_logger.c +++ b/kernel/unified/kernel_event_logger.c @@ -63,12 +63,16 @@ SYS_INIT(_sys_k_event_logger_init, POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); #ifdef CONFIG_KERNEL_EVENT_LOGGER_CUSTOM_TIMESTAMP -sys_k_timer_func_t _sys_k_timer_func; -void sys_k_event_logger_set_timer(sys_k_timer_func_t func) -{ - _sys_k_timer_func = func; -} -#endif +/* + * _sys_k_get_time() + * + * This function pointer can be invoked to generate an event timestamp. + * By default it uses the kernel's hardware clock, but can be changed + * to point to an application-defined routine. + * + */ +sys_k_timer_func_t _sys_k_get_time = sys_cycle_get_32; +#endif /* CONFIG_KERNEL_EVENT_LOGGER_CUSTOM_TIMESTAMP */ void sys_k_event_logger_put_timed(uint16_t event_id) {