You are viewing an older revision! See the latest version

Ticker

Table of Contents

  1. Hello World!
  2. API
  3. Examples

The Ticker interface is used to setup a recurring interrupt to repeatedly call a function at a specified rate.

Any number of Ticker objects can be created, allowing multiple outstanding interrupts at the same time. The function can be a static function, or a member function of a particular object.

Hello World!

A simple program to setup a Ticker to invert an LED repeatedly...

Import program

00001 #include "mbed.h"
00002  
00003 Ticker flipper;
00004 DigitalOut led1(LED1);
00005 DigitalOut led2(LED2);
00006  
00007 void flip() {
00008     led2 = !led2;
00009 }
00010  
00011 int main() {
00012     led2 = 1;
00013     flipper.attach(&flip, 2.0); // the address of the function to be attached (flip) and the interval (2 seconds)
00014  
00015     // spin in a main loop. flipper will interrupt it to call flip
00016     while(1) {
00017         led1 = !led1;
00018         wait(0.2);
00019     }
00020 }

API

API summary

Import librarymbed

No documentation found.

Warning

Note that timers are based on 32-bit int microsecond counters, so can only time up to a maximum of 2^31-1 microseconds i.e. 30 minutes. They are designed for times between microseconds and seconds. For longer times, you should consider the time()/Real time clock.

No blocking code in ISR

In ISR you should avoid any call to wait, infinitive while loop, or blocking calls in general.

No printf, malloc, or new in ISR

In ISR you should avoid any call to bulky library functions. In particular, certain library functions (like printf, malloc and new) are non re-entrant and their behaviour could be corrupted when called from an ISR.

RTOS Timer

Consider using the mbed RTOS Timer instead of a Ticker. In this way your periodic function will not be executed in a ISR, giving you more freedom and safety in your code.

Examples

Example attaching a member function to a ticker

#include "mbed.h"

// A class for flip()-ing a DigitalOut 
class Flipper {
public:
    Flipper(PinName pin) : _pin(pin) {
        _pin = 0;
    }
    void flip() {
        _pin = !_pin;
    }
private:
    DigitalOut _pin;
};

DigitalOut led1(LED1);
Flipper f(LED2);
Ticker t;

int main() {
    t.attach(&f, &Flipper::flip, 2.0); // the address of the object, member function, and interval

    // spin in a main loop. flipper will interrupt it to call flip
    while(1) {
        led1 = !led1;
        wait(0.2);
    }
}

All wikipages