Checked TimerEvent function on os2 old version. Result is okay on Nucleo-L152RE, -F446RE and FRDM-K64F. This TimerEvent is using SoftSerial library and works well on old os2.

Dependencies:   mbed

Committer:
kenjiArai
Date:
Tue May 12 01:14:33 2020 +0000
Revision:
0:785500164035
Checked TimerEvent function on os2 old version

Who changed what in which revision?

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