From 3176fc7ca5df76fa3b6a22ef7ad799e771504daa Mon Sep 17 00:00:00 2001 From: Ladislas de Toldi Date: Tue, 21 Feb 2023 18:04:34 +0100 Subject: [PATCH] mbed-ce@master + fixes + gcc 11 support (#135) * Fix rtos::Mutex stub, add trylock() method * LowPowerTicker - Add ::attach(...) method + call callback * mbed_power_management - rename sleep --> mbed_sleep to avoid conflicts Fixes conflicts w/ unistd.h and boost::ut * GCC 11/C++ 20 - Remove deprecated type_traits * GCC 11/C++ 20 - Remove redundant templating of methods * Warning - pragma ignore invalid-noreturn for unit tests * Fix astyle errors * Fix missing mbed_sleep() calls --- cmsis/device/rtos/source/mbed_rtx_idle.cpp | 2 +- .../include/ble/gatt/GattCharacteristic.h | 12 ++++++------ .../UNITTESTS/doubles/drivers/LowPowerTicker.h | 16 ++++++++++------ events/source/equeue_mbed.cpp | 2 +- hal/tests/TESTS/mbed_hal/lp_ticker/main.cpp | 2 +- hal/tests/TESTS/mbed_hal/rtc/main.cpp | 2 +- hal/tests/TESTS/mbed_hal/sleep/main.cpp | 8 ++++---- platform/cxxsupport/mstd_type_traits | 3 --- platform/include/platform/mbed_power_mgmt.h | 2 +- platform/source/mbed_os_timer.cpp | 2 +- .../tests/UNITTESTS/doubles/mbed_assert_stub.cpp | 2 ++ rtos/tests/UNITTESTS/doubles/Mutex_stub.cpp | 5 +++++ 12 files changed, 33 insertions(+), 25 deletions(-) diff --git a/cmsis/device/rtos/source/mbed_rtx_idle.cpp b/cmsis/device/rtos/source/mbed_rtx_idle.cpp index 5fe187ebd22..9211a81ba41 100644 --- a/cmsis/device/rtos/source/mbed_rtx_idle.cpp +++ b/cmsis/device/rtos/source/mbed_rtx_idle.cpp @@ -148,7 +148,7 @@ extern "C" { // critical section to complete sleep with locked deepsleep core_util_critical_section_enter(); sleep_manager_lock_deep_sleep(); - sleep(); + mbed_sleep(); sleep_manager_unlock_deep_sleep(); core_util_critical_section_exit(); } diff --git a/connectivity/FEATURE_BLE/include/ble/gatt/GattCharacteristic.h b/connectivity/FEATURE_BLE/include/ble/gatt/GattCharacteristic.h index 3d63d2730ca..96e17dfbf22 100644 --- a/connectivity/FEATURE_BLE/include/ble/gatt/GattCharacteristic.h +++ b/connectivity/FEATURE_BLE/include/ble/gatt/GattCharacteristic.h @@ -1915,7 +1915,7 @@ class ReadOnlyGattCharacteristic : public GattCharacteristic { * attribute value that equals sizeof(T). For a variable length alternative, * use GattCharacteristic directly. */ - ReadOnlyGattCharacteristic( + ReadOnlyGattCharacteristic( const UUID &uuid, T *valuePtr, uint8_t additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE, @@ -1958,7 +1958,7 @@ class WriteOnlyGattCharacteristic : public GattCharacteristic { * attribute value with maximum size equal to sizeof(T). For a fixed length * alternative, use GattCharacteristic directly. */ - WriteOnlyGattCharacteristic( + WriteOnlyGattCharacteristic( const UUID &uuid, T *valuePtr, uint8_t additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE, @@ -2000,7 +2000,7 @@ class ReadWriteGattCharacteristic : public GattCharacteristic { * attribute value with maximum size equal to sizeof(T). For a fixed length * alternative, use GattCharacteristic directly. */ - ReadWriteGattCharacteristic( + ReadWriteGattCharacteristic( const UUID &uuid, T *valuePtr, uint8_t additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE, @@ -2043,7 +2043,7 @@ class WriteOnlyArrayGattCharacteristic : public GattCharacteristic { * attribute value with maximum size equal to sizeof(T) * NUM_ELEMENTS. * For a fixed length alternative, use GattCharacteristic directly. */ - WriteOnlyArrayGattCharacteristic( + WriteOnlyArrayGattCharacteristic( const UUID &uuid, T valuePtr[NUM_ELEMENTS], uint8_t additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE, @@ -2087,7 +2087,7 @@ class ReadOnlyArrayGattCharacteristic : public GattCharacteristic { * attribute value that equals sizeof(T) * NUM_ELEMENTS. For a variable * length alternative, use GattCharacteristic directly. */ - ReadOnlyArrayGattCharacteristic( + ReadOnlyArrayGattCharacteristic( const UUID &uuid, T valuePtr[NUM_ELEMENTS], uint8_t additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE, @@ -2132,7 +2132,7 @@ class ReadWriteArrayGattCharacteristic : public GattCharacteristic { * attribute value with maximum size equal to sizeof(T) * NUM_ELEMENTS. * For a fixed length alternative, use GattCharacteristic directly. */ - ReadWriteArrayGattCharacteristic( + ReadWriteArrayGattCharacteristic( const UUID &uuid, T valuePtr[NUM_ELEMENTS], uint8_t additionalProperties = BLE_GATT_CHAR_PROPERTIES_NONE, diff --git a/drivers/tests/UNITTESTS/doubles/drivers/LowPowerTicker.h b/drivers/tests/UNITTESTS/doubles/drivers/LowPowerTicker.h index 1d0bb6b5da2..fb320cd85a4 100644 --- a/drivers/tests/UNITTESTS/doubles/drivers/LowPowerTicker.h +++ b/drivers/tests/UNITTESTS/doubles/drivers/LowPowerTicker.h @@ -17,6 +17,8 @@ #ifndef MBED_LOWPOWERTICKER_H #define MBED_LOWPOWERTICKER_H +#include + #include "hal/ticker_api.h" #include "Callback.h" @@ -28,21 +30,23 @@ namespace mbed { class LowPowerTicker { public: - LowPowerTicker() - { - } + LowPowerTicker() = default; + + virtual ~LowPowerTicker() = default; - virtual ~LowPowerTicker() + void attach(Callback func, std::chrono::microseconds t) { + func(); } void attach_us(Callback func, us_timestamp_t t) { - + func(); } + void detach() { - + // nothing to do } }; diff --git a/events/source/equeue_mbed.cpp b/events/source/equeue_mbed.cpp index 980e5d17ff5..df2705a068d 100644 --- a/events/source/equeue_mbed.cpp +++ b/events/source/equeue_mbed.cpp @@ -218,7 +218,7 @@ bool equeue_sema_wait(equeue_sema_t *s, int ms) core_util_critical_section_enter(); while (!*s && ms != 0) { - sleep(); + mbed_sleep(); core_util_critical_section_exit(); __ISB(); core_util_critical_section_enter(); diff --git a/hal/tests/TESTS/mbed_hal/lp_ticker/main.cpp b/hal/tests/TESTS/mbed_hal/lp_ticker/main.cpp index 570ca4a9b7a..f284aee75da 100644 --- a/hal/tests/TESTS/mbed_hal/lp_ticker/main.cpp +++ b/hal/tests/TESTS/mbed_hal/lp_ticker/main.cpp @@ -142,7 +142,7 @@ void lp_ticker_deepsleep_test() TEST_ASSERT_TRUE(sleep_manager_can_deep_sleep_test_check()); while (!intFlag) { - sleep(); + mbed_sleep(); } TEST_ASSERT_EQUAL(1, intFlag); diff --git a/hal/tests/TESTS/mbed_hal/rtc/main.cpp b/hal/tests/TESTS/mbed_hal/rtc/main.cpp index 179bb3db8da..d58a15743b6 100644 --- a/hal/tests/TESTS/mbed_hal/rtc/main.cpp +++ b/hal/tests/TESTS/mbed_hal/rtc/main.cpp @@ -80,7 +80,7 @@ void rtc_sleep_test_support(bool deepsleep_mode) TEST_ASSERT(sleep_manager_can_deep_sleep_test_check() == deepsleep_mode); while (!expired) { - sleep(); + mbed_sleep(); } const auto stop = RealTimeClock::now(); diff --git a/hal/tests/TESTS/mbed_hal/sleep/main.cpp b/hal/tests/TESTS/mbed_hal/sleep/main.cpp index 84eb2627d2e..2ff47129875 100644 --- a/hal/tests/TESTS/mbed_hal/sleep/main.cpp +++ b/hal/tests/TESTS/mbed_hal/sleep/main.cpp @@ -79,7 +79,7 @@ void sleep_usticker_test() us_ticker_set_interrupt(next_match_timestamp); - sleep(); + mbed_sleep(); const unsigned int wakeup_timestamp = us_ticker_read(); @@ -130,7 +130,7 @@ void deepsleep_lpticker_test() Since this interrupt wakes-up the board from the sleep we need to go to sleep after CMPOK is handled. */ TEST_ASSERT_TRUE(sleep_manager_can_deep_sleep_test_check()); - sleep(); + mbed_sleep(); /* On some targets like STM family boards with LPTIM enabled an interrupt is triggered on counter rollover. We need special handling for cases when next_match_timestamp < start_timestamp (interrupt is to be fired after rollover). @@ -140,7 +140,7 @@ void deepsleep_lpticker_test() if ((next_match_timestamp < start_timestamp) && lp_ticker_read() < next_match_timestamp) { lp_ticker_set_interrupt(next_match_timestamp); wait_ns(200000); - sleep(); + mbed_sleep(); } #endif @@ -182,7 +182,7 @@ void deepsleep_high_speed_clocks_turned_off_test() const unsigned int us_ticks_before_sleep = us_ticker_read(); - sleep(); + mbed_sleep(); const unsigned int us_ticks_after_sleep = us_ticker_read(); const unsigned int lp_ticks_after_sleep = lp_ticker_read(); diff --git a/platform/cxxsupport/mstd_type_traits b/platform/cxxsupport/mstd_type_traits index 0513ba91f3e..240ffdf3f55 100644 --- a/platform/cxxsupport/mstd_type_traits +++ b/platform/cxxsupport/mstd_type_traits @@ -210,7 +210,6 @@ using std::is_trivial; using std::is_trivially_copyable; using std::is_standard_layout; using std::is_pod; -using std::is_literal_type; using std::is_empty; using std::is_polymorphic; using std::is_abstract; @@ -274,8 +273,6 @@ using std::decay; using std::decay_t; using std::common_type; using std::common_type_t; -using std::result_of; -using std::result_of_t; /* C++20 remove_cvref */ template diff --git a/platform/include/platform/mbed_power_mgmt.h b/platform/include/platform/mbed_power_mgmt.h index c587d8d8c65..67dd9b1946a 100644 --- a/platform/include/platform/mbed_power_mgmt.h +++ b/platform/include/platform/mbed_power_mgmt.h @@ -192,7 +192,7 @@ void sleep_manager_sleep_auto(void); * Flash re-programming and the USB serial port will remain active, but the mbed program will no longer be * able to access the LocalFileSystem */ -static inline void sleep(void) +static inline void mbed_sleep(void) { #if DEVICE_SLEEP #if (MBED_CONF_RTOS_PRESENT == 0) || (DEVICE_SYSTICK_CLK_OFF_DURING_SLEEP == 0) || defined(MBED_TICKLESS) diff --git a/platform/source/mbed_os_timer.cpp b/platform/source/mbed_os_timer.cpp index d7b2f075b19..1ea0563c1c5 100644 --- a/platform/source/mbed_os_timer.cpp +++ b/platform/source/mbed_os_timer.cpp @@ -170,7 +170,7 @@ void do_sleep_operation(OpT &op) // we go round to set the timer again. if (op.sleep_prepared()) { // Enter HAL sleep (normal or deep) - sleep(); + mbed_sleep(); } } diff --git a/platform/tests/UNITTESTS/doubles/mbed_assert_stub.cpp b/platform/tests/UNITTESTS/doubles/mbed_assert_stub.cpp index 4b046d7f41c..bbe49e79248 100644 --- a/platform/tests/UNITTESTS/doubles/mbed_assert_stub.cpp +++ b/platform/tests/UNITTESTS/doubles/mbed_assert_stub.cpp @@ -20,6 +20,8 @@ #include #include +#pragma GCC diagnostic ignored "-Winvalid-noreturn" + bool mbed_assert_throw_errors = false; extern "C" void mbed_assert_internal(const char *expr, const char *file, int line) diff --git a/rtos/tests/UNITTESTS/doubles/Mutex_stub.cpp b/rtos/tests/UNITTESTS/doubles/Mutex_stub.cpp index d90ae20002f..7c384c19739 100644 --- a/rtos/tests/UNITTESTS/doubles/Mutex_stub.cpp +++ b/rtos/tests/UNITTESTS/doubles/Mutex_stub.cpp @@ -36,3 +36,8 @@ osStatus rtos::Mutex::unlock() { return osOK; } + +bool rtos::Mutex::trylock() +{ + return true; +}