Ver Fonte

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.
Darian Leung há 3 anos atrás
pai
commit
c45784b8c4

+ 8 - 13
components/hal/include/hal/systimer_types.h

@@ -1,16 +1,8 @@
-// Copyright 2020 Espressif Systems (Shanghai) PTE LTD
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
+/*
+ * SPDX-FileCopyrightText: 2020-2022 Espressif Systems (Shanghai) CO LTD
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
 
 #pragma once
 
@@ -30,6 +22,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 */
     };

+ 0 - 1
tools/ci/check_copyright_ignore.txt

@@ -890,7 +890,6 @@ components/hal/include/hal/spi_flash_encrypt_hal.h
 components/hal/include/hal/spi_slave_hal.h
 components/hal/include/hal/spi_slave_hd_hal.h
 components/hal/include/hal/systimer_hal.h
-components/hal/include/hal/systimer_types.h
 components/hal/include/hal/twai_types.h
 components/hal/include/hal/uhci_types.h
 components/hal/include/hal/usb_hal.h