[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

Committer:
kenjiArai
Date:
Tue May 12 01:15:04 2020 +0000
Revision:
0:0a78edc7ac85
Child:
1:3e3b7ec1f33d
Checked TimerEvent function on os5.15.3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:0a78edc7ac85 1 /*
kenjiArai 0:0a78edc7ac85 2 * Mbed-OS5 & OS-2
kenjiArai 0:0a78edc7ac85 3 * Check EventTimer behavior
kenjiArai 0:0a78edc7ac85 4 *
kenjiArai 0:0a78edc7ac85 5 * Copyright (c) 2020 Kenji Arai / JH1PJL
kenjiArai 0:0a78edc7ac85 6 * http://www7b.biglobe.ne.jp/~kenjia/
kenjiArai 0:0a78edc7ac85 7 * https://os.mbed.com/users/kenjiArai/
kenjiArai 0:0a78edc7ac85 8 * Revised: May 12th, 2020
kenjiArai 0:0a78edc7ac85 9 * Revised: May 12th, 2020
kenjiArai 0:0a78edc7ac85 10 */
kenjiArai 0:0a78edc7ac85 11
kenjiArai 0:0a78edc7ac85 12 #include "mbed.h"
kenjiArai 0:0a78edc7ac85 13
kenjiArai 0:0a78edc7ac85 14 class FlexTicker: public TimerEvent
kenjiArai 0:0a78edc7ac85 15 {
kenjiArai 0:0a78edc7ac85 16 public:
kenjiArai 0:0a78edc7ac85 17 void attach(void(*fptr)(void)) { _function = Callback<void()>(fptr);}
kenjiArai 0:0a78edc7ac85 18 void detach() { remove();}
kenjiArai 0:0a78edc7ac85 19 void setNext(int delay) { insert(event.timestamp + delay);}
kenjiArai 0:0a78edc7ac85 20 void prime() { event.timestamp = us_ticker_read();}
kenjiArai 0:0a78edc7ac85 21 protected:
kenjiArai 0:0a78edc7ac85 22 virtual void handler() { _function.call();}
kenjiArai 0:0a78edc7ac85 23 unsigned int _delay;
kenjiArai 0:0a78edc7ac85 24 Callback<void()> _function;
kenjiArai 0:0a78edc7ac85 25 };
kenjiArai 0:0a78edc7ac85 26
kenjiArai 0:0a78edc7ac85 27 DigitalOut led(LED1);
kenjiArai 0:0a78edc7ac85 28 FlexTicker tk;
kenjiArai 0:0a78edc7ac85 29
kenjiArai 0:0a78edc7ac85 30 #define TARGET_TIME 50 // 50us
kenjiArai 0:0a78edc7ac85 31
kenjiArai 0:0a78edc7ac85 32 volatile uint32_t num;
kenjiArai 0:0a78edc7ac85 33 uint32_t time_data[10];
kenjiArai 0:0a78edc7ac85 34
kenjiArai 0:0a78edc7ac85 35 // call by TimerEvent
kenjiArai 0:0a78edc7ac85 36 void pulse_out(void)
kenjiArai 0:0a78edc7ac85 37 {
kenjiArai 0:0a78edc7ac85 38 led = 1;
kenjiArai 0:0a78edc7ac85 39 num++;
kenjiArai 0:0a78edc7ac85 40 time_data[num] = us_ticker_read();
kenjiArai 0:0a78edc7ac85 41 if (num < 10) {
kenjiArai 0:0a78edc7ac85 42 tk.setNext(TARGET_TIME);
kenjiArai 0:0a78edc7ac85 43 }
kenjiArai 0:0a78edc7ac85 44 led = 0;
kenjiArai 0:0a78edc7ac85 45 }
kenjiArai 0:0a78edc7ac85 46
kenjiArai 0:0a78edc7ac85 47 int main()
kenjiArai 0:0a78edc7ac85 48 {
kenjiArai 0:0a78edc7ac85 49 printf("MBED_MAJOR_VERSION = %d, ", MBED_MAJOR_VERSION);
kenjiArai 0:0a78edc7ac85 50 printf("MINOR = %d, ", MBED_MINOR_VERSION);
kenjiArai 0:0a78edc7ac85 51 printf("PATCH = %d\r\n", MBED_PATCH_VERSION);
kenjiArai 0:0a78edc7ac85 52 tk.attach(&pulse_out);
kenjiArai 0:0a78edc7ac85 53 while(true) {
kenjiArai 0:0a78edc7ac85 54 led = 1;
kenjiArai 0:0a78edc7ac85 55 num = 0;
kenjiArai 0:0a78edc7ac85 56 time_data[0] = us_ticker_read();
kenjiArai 0:0a78edc7ac85 57 tk.prime();
kenjiArai 0:0a78edc7ac85 58 led = 0;
kenjiArai 0:0a78edc7ac85 59 tk.setNext(TARGET_TIME);
kenjiArai 0:0a78edc7ac85 60 thread_sleep_for(500);
kenjiArai 0:0a78edc7ac85 61 //wait_ms(500);
kenjiArai 0:0a78edc7ac85 62 for (uint32_t i = 0; i < 9; i++) {
kenjiArai 0:0a78edc7ac85 63 printf("%d=%4d, ", i, time_data[i+1] - time_data[i]);
kenjiArai 0:0a78edc7ac85 64 }
kenjiArai 0:0a78edc7ac85 65 printf("No=time[us]\r\n");
kenjiArai 0:0a78edc7ac85 66 }
kenjiArai 0:0a78edc7ac85 67 }