Deprecate wait/wait_ms APIs

pull/10104/head
Kevin Bracey 2019-01-28 12:49:01 +02:00
parent 04cb39da07
commit fc8e8f67c6
12 changed files with 40 additions and 62 deletions

View File

@ -26,5 +26,5 @@ set(unittest-test-sources
stubs/CellularUtil_stub.cpp stubs/CellularUtil_stub.cpp
stubs/us_ticker_stub.cpp stubs/us_ticker_stub.cpp
stubs/mbed_assert_stub.c stubs/mbed_assert_stub.c
stubs/mbed_wait_api_stub.cpp stubs/ThisThread_stub.cpp
) )

View File

@ -23,7 +23,6 @@ set(unittest-test-sources
stubs/EventQueue_stub.cpp stubs/EventQueue_stub.cpp
stubs/FileHandle_stub.cpp stubs/FileHandle_stub.cpp
stubs/us_ticker_stub.cpp stubs/us_ticker_stub.cpp
stubs/mbed_wait_api_stub.cpp
stubs/mbed_assert_stub.c stubs/mbed_assert_stub.c
stubs/mbed_poll_stub.cpp stubs/mbed_poll_stub.cpp
stubs/Timer_stub.cpp stubs/Timer_stub.cpp

View File

@ -130,11 +130,6 @@ int UARTSerial::enable_output(bool enabled)
return 0; return 0;
} }
void UARTSerial::wait_ms(uint32_t millisec)
{
}
void UARTSerial::set_flow_control(mbed::SerialBase::Flow, PinName, PinName) void UARTSerial::set_flow_control(mbed::SerialBase::Flow, PinName, PinName)
{ {

View File

@ -15,10 +15,10 @@
*/ */
#include "SPIFBlockDevice.h" #include "SPIFBlockDevice.h"
#include "rtos/ThisThread.h"
#include "mbed_critical.h" #include "mbed_critical.h"
#include <string.h> #include <string.h>
#include "mbed_wait_api.h"
#include "mbed_trace.h" #include "mbed_trace.h"
#define TRACE_GROUP "SPIF" #define TRACE_GROUP "SPIF"
@ -910,7 +910,7 @@ bool SPIFBlockDevice::_is_mem_ready()
bool mem_ready = true; bool mem_ready = true;
do { do {
wait_ms(1); rtos::ThisThread::sleep_for(1);
retries++; retries++;
//Read the Status Register from device //Read the Status Register from device
if (SPIF_BD_ERROR_OK != _spi_send_general_command(SPIF_RDSR, SPI_NO_ADDRESS_COMMAND, NULL, 0, status_value, if (SPIF_BD_ERROR_OK != _spi_send_general_command(SPIF_RDSR, SPI_NO_ADDRESS_COMMAND, NULL, 0, status_value,

View File

@ -19,12 +19,7 @@
#if (DEVICE_SERIAL && DEVICE_INTERRUPTIN) #if (DEVICE_SERIAL && DEVICE_INTERRUPTIN)
#include "platform/mbed_poll.h" #include "platform/mbed_poll.h"
#include "platform/mbed_thread.h"
#if MBED_CONF_RTOS_PRESENT
#include "rtos/ThisThread.h"
#else
#include "platform/mbed_wait_api.h"
#endif
namespace mbed { namespace mbed {
@ -114,7 +109,7 @@ int UARTSerial::sync()
while (!_txbuf.empty()) { while (!_txbuf.empty()) {
api_unlock(); api_unlock();
// Doing better than wait would require TxIRQ to also do wake() when becoming empty. Worth it? // Doing better than wait would require TxIRQ to also do wake() when becoming empty. Worth it?
wait_ms(1); thread_sleep_for(1);
api_lock(); api_lock();
} }
@ -178,7 +173,7 @@ ssize_t UARTSerial::write(const void *buffer, size_t length)
} }
do { do {
api_unlock(); api_unlock();
wait_ms(1); // XXX todo - proper wait, WFE for non-rtos ? thread_sleep_for(1); // XXX todo - proper wait?
api_lock(); api_lock();
} while (_txbuf.full()); } while (_txbuf.full());
} }
@ -221,7 +216,7 @@ ssize_t UARTSerial::read(void *buffer, size_t length)
return -EAGAIN; return -EAGAIN;
} }
api_unlock(); api_unlock();
wait_ms(1); // XXX todo - proper wait, WFE for non-rtos ? thread_sleep_for(1); // XXX todo - proper wait?
api_lock(); api_lock();
} }
@ -407,17 +402,6 @@ int UARTSerial::enable_output(bool enabled)
return 0; return 0;
} }
void UARTSerial::wait_ms(uint32_t millisec)
{
/* wait_ms implementation for RTOS spins until exact microseconds - we
* want to just sleep until next tick.
*/
#if MBED_CONF_RTOS_PRESENT
rtos::ThisThread::sleep_for(millisec);
#else
::wait_ms(millisec);
#endif
}
} //namespace mbed } //namespace mbed
#endif //(DEVICE_SERIAL && DEVICE_INTERRUPTIN) #endif //(DEVICE_SERIAL && DEVICE_INTERRUPTIN)

View File

@ -255,8 +255,6 @@ public:
private: private:
void wait_ms(uint32_t millisec);
/** SerialBase lock override */ /** SerialBase lock override */
virtual void lock(void); virtual void lock(void);

View File

@ -21,7 +21,6 @@
#include "ATHandler.h" #include "ATHandler.h"
#include "mbed_poll.h" #include "mbed_poll.h"
#include "FileHandle.h" #include "FileHandle.h"
#include "mbed_wait_api.h"
#include "mbed_debug.h" #include "mbed_debug.h"
#include "rtos/ThisThread.h" #include "rtos/ThisThread.h"
#include "Kernel.h" #include "Kernel.h"

View File

@ -37,8 +37,9 @@
* - When the RTOS is absent, all methods are defined as noop. * - When the RTOS is absent, all methods are defined as noop.
*/ */
#ifdef MBED_CONF_RTOS_PRESENT #ifdef MBED_CONF_RTOS_API_PRESENT
// rtos::Mutex is itself a dummy class if the RTOS API is present, but not the RTOS
#include "rtos/Mutex.h" #include "rtos/Mutex.h"
typedef rtos::Mutex PlatformMutex; typedef rtos::Mutex PlatformMutex;

View File

@ -16,14 +16,7 @@
*/ */
#include "mbed_poll.h" #include "mbed_poll.h"
#include "FileHandle.h" #include "FileHandle.h"
#if MBED_CONF_RTOS_PRESENT #include "mbed_thread.h"
#include "rtos/Kernel.h"
#include "rtos/ThisThread.h"
using namespace rtos;
#else
#include "drivers/Timer.h"
#include "drivers/LowPowerTimer.h"
#endif
namespace mbed { namespace mbed {
@ -39,23 +32,10 @@ int poll(pollfh fhs[], unsigned nfhs, int timeout)
* interested in. In future, his spinning behaviour will be replaced with * interested in. In future, his spinning behaviour will be replaced with
* condition variables. * condition variables.
*/ */
#if MBED_CONF_RTOS_PRESENT
uint64_t start_time = 0; uint64_t start_time = 0;
if (timeout > 0) { if (timeout > 0) {
start_time = Kernel::get_ms_count(); start_time = get_ms_count();
} }
#define TIME_ELAPSED() int64_t(Kernel::get_ms_count() - start_time)
#else
#if MBED_CONF_PLATFORM_POLL_USE_LOWPOWER_TIMER
LowPowerTimer timer;
#else
Timer timer;
#endif
if (timeout > 0) {
timer.start();
}
#define TIME_ELAPSED() timer.read_ms()
#endif // MBED_CONF_RTOS_PRESENT
int count = 0; int count = 0;
for (;;) { for (;;) {
@ -78,14 +58,12 @@ int poll(pollfh fhs[], unsigned nfhs, int timeout)
} }
/* Nothing selected - this is where timeout handling would be needed */ /* Nothing selected - this is where timeout handling would be needed */
if (timeout == 0 || (timeout > 0 && TIME_ELAPSED() > timeout)) { if (timeout == 0 || (timeout > 0 && int64_t(get_ms_count() - start_time) > timeout)) {
break; break;
} }
#ifdef MBED_CONF_RTOS_PRESENT
// TODO - proper blocking // TODO - proper blocking
// wait for condition variable, wait queue whatever here // wait for condition variable, wait queue whatever here
rtos::ThisThread::sleep_for(1); thread_sleep_for(1);
#endif
} }
return count; return count;
} }

View File

@ -25,6 +25,7 @@
#ifndef MBED_WAIT_API_H #ifndef MBED_WAIT_API_H
#define MBED_WAIT_API_H #define MBED_WAIT_API_H
#include "platform/mbed_toolchain.h"
#include "platform/mbed_atomic.h" #include "platform/mbed_atomic.h"
#include "device.h" #include "device.h"
@ -62,7 +63,16 @@ extern "C" {
* If the RTOS is present, this function spins to get the exact number of microseconds for * If the RTOS is present, this function spins to get the exact number of microseconds for
* microsecond precision up to 10 milliseconds. If delay is larger than 10 milliseconds and not in ISR, it is the same as * microsecond precision up to 10 milliseconds. If delay is larger than 10 milliseconds and not in ISR, it is the same as
* `wait_ms`. We recommend `wait_us` and `wait_ms` over `wait`. * `wait_ms`. We recommend `wait_us` and `wait_ms` over `wait`.
*
* @deprecated
* 'wait' is deprecated in favor of explicit sleep functions. To sleep, 'wait' should be replaced by
* 'ThisThread::sleep_for' (C++) or 'thread_sleep_for' (C). If you wish to wait (without sleeping), call
* 'wait_us'. 'wait_us' is safe to call from ISR context.
*/ */
MBED_DEPRECATED_SINCE("mbed-os-5.14",
"'wait' is deprecated in favor of explicit sleep functions. To sleep, 'wait' should be replaced by "
"'ThisThread::sleep_for' (C++) or 'thread_sleep_for' (C). If you wish to wait (without sleeping), call "
"'wait_us'. 'wait_us' is safe to call from ISR context.")
void wait(float s); void wait(float s);
/** Waits a number of milliseconds. /** Waits a number of milliseconds.
@ -72,7 +82,16 @@ void wait(float s);
* @note * @note
* If the RTOS is present, it calls ThisThread::sleep_for(), which is same as CMSIS osDelay(). * If the RTOS is present, it calls ThisThread::sleep_for(), which is same as CMSIS osDelay().
* You can't call this from interrupts, and it doesn't lock hardware sleep. * You can't call this from interrupts, and it doesn't lock hardware sleep.
*
* @deprecated
* 'wait_ms' is deprecated in favor of explicit sleep functions. To sleep, 'wait_ms' should be replaced by
* 'ThisThread::sleep_for' (C++) or 'thread_sleep_for' (C). If you wish to wait (without sleeping), call
* 'wait_us'. 'wait_us' is safe to call from ISR context.
*/ */
MBED_DEPRECATED_SINCE("mbed-os-5.14",
"'wait_ms' is deprecated in favor of explicit sleep functions. To sleep, 'wait_ms' should be replaced by "
"'ThisThread::sleep_for' (C++) or 'thread_sleep_for' (C). If you wish to wait (without sleeping), call "
"'wait_us'. 'wait_us' is safe to call from ISR context.")
void wait_ms(int ms); void wait_ms(int ms);
/** Waits a number of microseconds. /** Waits a number of microseconds.
@ -82,7 +101,7 @@ void wait_ms(int ms);
* @note * @note
* This function always spins to get the exact number of microseconds. * This function always spins to get the exact number of microseconds.
* This will affect power and multithread performance. Therefore, spinning for * This will affect power and multithread performance. Therefore, spinning for
* millisecond wait is not recommended, and wait_ms() should * millisecond wait is not recommended, and ThisThread::sleep_for should
* be used instead. * be used instead.
* *
* @note You may call this function from ISR context, but large delays may * @note You may call this function from ISR context, but large delays may

View File

@ -16,7 +16,10 @@
*/ */
// This implementation of the wait functions will be compiled only // This implementation of the wait functions will be compiled only
// if the RTOS is present. // if the RTOS is present. Note that we still use these old
// bare metal versions of wait and wait_ms rather than using
// thread_sleep_for for backwards compatibility. People should
// be prompted to shift via their deprecation.
#ifdef MBED_CONF_RTOS_PRESENT #ifdef MBED_CONF_RTOS_PRESENT
#include "platform/mbed_wait_api.h" #include "platform/mbed_wait_api.h"
@ -30,7 +33,7 @@
void wait(float s) void wait(float s)
{ {
if ((s >= 0.01f) && core_util_are_interrupts_enabled()) { if ((s >= 0.01f) && core_util_are_interrupts_enabled()) {
wait_ms(s * 1000.0f); rtos::ThisThread::sleep_for(s * 1000.0f);
return; return;
} }

View File

@ -147,6 +147,7 @@ uint32_t flags_wait_any_until(uint32_t flags, uint64_t millisec, bool clear = tr
/** Sleep for a specified time period in millisec: /** Sleep for a specified time period in millisec:
@param millisec time delay value @param millisec time delay value
@note You cannot call this function from ISR context. @note You cannot call this function from ISR context.
@note The equivalent functionality is accessible in C via thread_sleep_for.
*/ */
void sleep_for(uint32_t millisec); void sleep_for(uint32_t millisec);
@ -156,6 +157,7 @@ void sleep_for(uint32_t millisec);
@note You cannot call this function from ISR context. @note You cannot call this function from ISR context.
@note if millisec is equal to or lower than the current tick count, this @note if millisec is equal to or lower than the current tick count, this
returns immediately. returns immediately.
@note The equivalent functionality is accessible in C via thread_sleep_until.
*/ */
void sleep_until(uint64_t millisec); void sleep_until(uint64_t millisec);