LowPowerTimeout
LowPowerTimeout class hierarchy
Use the LowPowerTimeout interface to set up an interrupt to call a function after a specified delay. You can create any number of LowPowerTimeout objects. This allows multiple outstanding interrupts at the same time.
Notes
- No blocking code in ISR: Avoid any call to wait, infinite while loop or blocking calls in general.
- No printf, malloc or new in ISR: Avoid any call to bulky library functions. In particular, certain library functions (such as printf, malloc and new) are not re-entrant, and their behavior could be corrupted when called from an ISR.
LowPowerTimeout class reference
Public Types | |
using | clock = LowPowerClock |
Clock to use with attach_absolute, guaranteeing running only while attached or manually locked. More... | |
using | steady_clock = LowPowerClock |
Clock to use with attach_absolute, running always. More... |
Public Member Functions | |
LowPowerClock::time_point | scheduled_time () const |
template<class F > | |
void | attach_absolute (F &&func, LowPowerClock::time_point abs_time) |
Attach a function to be called by the Timeout, specifying the absolute time. More... | |
std::chrono::microseconds | remaining_time () const |
Return time remaining until callback. More... | |
template<typename F > | |
MBED_FORCEINLINE void | attach (F &&func, float t) |
Attach a function to be called by the Ticker, specifying the interval in seconds. More... | |
void | attach (Callback< void()> func, std::chrono::microseconds t) |
Attach a function to be called by the Ticker, specifying the interval in microseconds. More... | |
void | attach_us (Callback< void()> func, us_timestamp_t t) |
Attach a function to be called by the Ticker, specifying the interval in microseconds. More... | |
void | detach () |
Detach the function. More... |
LowPowerTimeout example
Set up a time out to invert an LED after a given time:
/*
* Copyright (c) 2020 Arm Limited and affiliates.
* SPDX-License-Identifier: Apache-2.0
*/
#include "mbed.h"
LowPowerTimeout flipper;
DigitalOut led1(LED1);
DigitalOut led2(LED2);
void flip()
{
led2 = !led2;
}
int main()
{
led2 = 1;
flipper.attach(&flip, 2.0); // setup flipper to call flip after 2 seconds
// spin in a main loop. flipper will interrupt it to call flip
while (1) {
led1 = !led1;
ThisThread::sleep_for(200);
}
}