[Updated on OS6] TimerEvent is no longer existing!! Checked TimerEvent function on os5 latest version. Result is okay on FRDM-K64F but STM32 series are NOT okay e.g. Nucleo-L152RE, -F446RE, -L432KC and so on. This TimerEvent is using SoftSerial library and works well on old os2 but not OS5 latest version STM32 series Mbed board.

Forum discussion.
https://forums.mbed.com/t/how-to-port-software-serial-to-os5-6/12641
https://forums.mbed.com/t/softserial-problem-l432kc/8288

main.cpp

Committer:
kenjiArai
Date:
2021-03-30
Revision:
1:3e3b7ec1f33d
Parent:
0:0a78edc7ac85

File content as of revision 1:3e3b7ec1f33d:

/*
 * Mbed-OS5 & OS-2 --> Added OS6
 *  Check EventTimer(on OS6, change name Ticker) behavior
 *
 * Copyright (c) 2020,'21 Kenji Arai / JH1PJL
 *  http://www7b.biglobe.ne.jp/~kenjia/
 *  https://os.mbed.com/users/kenjiArai/
 *      Created:    May       12th, 2020
 *      Revised:    March     30th, 2021
 */
/*
    test result target = 50uS
        Nucleo-L432KC
        2.162
        0= 223, 1=  51, 2=  49, 3=  50, 4=  51, 5=  49, 6=  50, 7=  51, 8=  49
        5.15.3
        0= 109, 1=  50, 2=  50, 3=  48, 4=  51, 5=  52, 6=  47, 7=  52, 8=  48
        6.8.0
        0= 613, 1=  51, 2=  50, 3=  51, 4=  50, 5=  51, 6=  50, 7=  51, 8=  50

        Nucleo-F446RE
        2.162
        0=  85, 1=  50, 2=  50, 3=  50, 4=  50, 5=  50, 6=  50, 7=  50, 8=  50
        5.15.3
        0= 136, 1=  50, 2=  50, 3=  50, 4=  50, 5=  50, 6=  50, 7=  50, 8=  50
        6.8.0
        0= 138, 1=  50, 2=  50, 3=  50, 4=  50, 5=  50, 6=  50, 7=  50, 8=  50

        FRDM-K64F
        2.162
        0=  61, 1=  51, 2=  49, 3=  51, 4=  49, 5=  51, 6=  49, 7=  51, 8=  49
        5.15.3
        0=  61, 1=  53, 2=  49, 3=  48, 4=  49, 5=  53, 6=  49, 7=  49, 8=  50
        6.8.0
        0=  66, 1=  51, 2=  48, 3=  50, 4=  51, 5=  51, 6=  51, 7=  47, 8=  50


 */

#include "mbed.h"

#if (MBED_MAJOR_VERSION == 6)
class FlexTicker: public Ticker
#else
class FlexTicker: public TimerEvent
#endif
{
public:
    void attach(void(*fptr)(void)) { _function = Callback<void()>(fptr);}
    void detach() { remove();}
    void setNext(int delay) { insert(event.timestamp + delay);}
    void prime() { event.timestamp = us_ticker_read();}
protected:
    virtual void handler() { _function.call();}
    unsigned int _delay;
    Callback<void()> _function;
};

DigitalOut led(LED1);
FlexTicker tk;

#define TARGET_TIME     50      // 50us

volatile uint32_t num;
uint32_t time_data[10];

// call by TimerEvent
void pulse_out(void)
{
    led = 1;
    num++;
    time_data[num] = us_ticker_read();
    if (num < 10) {
        tk.setNext(TARGET_TIME);
    }
    led = 0;
}

int main()
{
    printf("MBED_MAJOR_VERSION = %d, ", MBED_MAJOR_VERSION);
    printf("MINOR = %d, ", MBED_MINOR_VERSION);
    printf("PATCH = %d\r\n", MBED_PATCH_VERSION);
    tk.attach(&pulse_out);
    while(true) {
        led = 1;
        num = 0;
        time_data[0] = us_ticker_read();
        tk.prime();
        led = 0;
        tk.setNext(TARGET_TIME);
#if (MBED_MAJOR_VERSION == 6)
        ThisThread::sleep_for(500ms);
#elif (MBED_MAJOR_VERSION == 5)
        thread_sleep_for(500);
#else
        wait_ms(500);
#endif
        for (uint32_t i = 0; i < 9; i++) {
            printf("%d=%4d, ", i, time_data[i+1] - time_data[i]);
        }
        printf("(<- No=time[us] (target %dus))\r\n", TARGET_TIME);
    }
}