[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@0:0a78edc7ac85, 2020-05-12 (annotated)
- 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?
User | Revision | Line number | New 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 | } |