From 906bb0e4a33d4bddca2dac6d0f5c6167ae51a1d0 Mon Sep 17 00:00:00 2001 From: Darian Leung Date: Thu, 26 May 2022 01:47:33 +0800 Subject: [PATCH] hal: Fix systimer counter value bit field This commit fixes the systimer_counter_value_t by adding a resreved field so that the type fills 64-bits. Without the reserved field, when compiling with -O0 optimization, the unoccupied high bits would not be initalized by the compiler, leading to systimer_hal_get_counter_value() returning a garbage value. --- components/hal/include/hal/systimer_types.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/components/hal/include/hal/systimer_types.h b/components/hal/include/hal/systimer_types.h index 2af2f60f30..d4583dc7ae 100644 --- a/components/hal/include/hal/systimer_types.h +++ b/components/hal/include/hal/systimer_types.h @@ -30,6 +30,9 @@ typedef struct { struct { uint64_t lo : SOC_SYSTIMER_BIT_WIDTH_LO; /*!< Low part of counter value */ uint64_t hi : SOC_SYSTIMER_BIT_WIDTH_HI; /*!< High part of counter value */ +#if (SOC_SYSTIMER_BIT_WIDTH_LO + SOC_SYSTIMER_BIT_WIDTH_HI) < 64 + uint64_t reserved: (64 - (SOC_SYSTIMER_BIT_WIDTH_LO + SOC_SYSTIMER_BIT_WIDTH_HI)); +#endif }; uint64_t val; /*!< counter value */ };