mirror of https://github.com/ARMmbed/mbed-os.git
Make poll() use RTOS tick count
RTOS maintains a tick count - use it, avoiding issues with sleep and low power timers.pull/6698/head
parent
42d77ecd13
commit
39fa676993
|
@ -15,10 +15,13 @@
|
|||
*/
|
||||
#include "mbed_poll.h"
|
||||
#include "FileHandle.h"
|
||||
#if MBED_CONF_RTOS_PRESENT
|
||||
#include "rtos/Kernel.h"
|
||||
#include "rtos/Thread.h"
|
||||
using namespace rtos;
|
||||
#else
|
||||
#include "Timer.h"
|
||||
#include "LowPowerTimer.h"
|
||||
#ifdef MBED_CONF_RTOS_PRESENT
|
||||
#include "rtos/Thread.h"
|
||||
#endif
|
||||
|
||||
namespace mbed {
|
||||
|
@ -35,6 +38,13 @@ int poll(pollfh fhs[], unsigned nfhs, int timeout)
|
|||
* interested in. In future, his spinning behaviour will be replaced with
|
||||
* condition variables.
|
||||
*/
|
||||
#if MBED_CONF_RTOS_PRESENT
|
||||
uint64_t start_time = 0;
|
||||
if (timeout > 0) {
|
||||
start_time = Kernel::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
|
||||
|
@ -43,6 +53,8 @@ int poll(pollfh fhs[], unsigned nfhs, int timeout)
|
|||
if (timeout > 0) {
|
||||
timer.start();
|
||||
}
|
||||
#define TIME_ELAPSED() timer.read_ms()
|
||||
#endif // MBED_CONF_RTOS_PRESENT
|
||||
|
||||
int count = 0;
|
||||
for (;;) {
|
||||
|
@ -65,7 +77,7 @@ int poll(pollfh fhs[], unsigned nfhs, int timeout)
|
|||
}
|
||||
|
||||
/* Nothing selected - this is where timeout handling would be needed */
|
||||
if (timeout == 0 || (timeout > 0 && timer.read_ms() > timeout)) {
|
||||
if (timeout == 0 || (timeout > 0 && TIME_ELAPSED() > timeout)) {
|
||||
break;
|
||||
}
|
||||
#ifdef MBED_CONF_RTOS_PRESENT
|
||||
|
|
Loading…
Reference in New Issue