Simple 64-bit timer for mbed. It is a drastically simplified version of Timer64 class by Tom Doyle. It is meant to be used in single-thread applications, where timer is used frequently, while standard 32-bit Timer is not enough.
Fork of Timer64 by
Timer64.h
- Committer:
- tedoyle
- Date:
- 2016-03-27
- Revision:
- 1:497fba179833
- Parent:
- 0:1e0e79e82839
- Child:
- 2:e89b02820e93
File content as of revision 1:497fba179833:
#ifndef __NEW_TIMER64__ #define __NEW_TIMER64__ #include "platform.h" #include "ticker_api.h" #include <stdint.h> #include "rtos.h" #define TIMER64_OK 0 #define TIMER64_ERROR_NOT_INITIALIZED -1 #define TIMER64_WARNING_ALREADY_INITIALIZED 1 #define TIMER64_WARNING_ALREADY_RUNNING 2 #define TIMER64_WARNING_ALREADY_STOPPED 3 #define TIMER64_15MINUTE_ROLLOVER_CHECK_IN_MSECS 900000 #define TIMER64_MIN_ROLLOVER_CHECK_IN_MSECS 60000 // 0:01:00.000 #define TIMER64_MAX_ROLLOVER_CHECK_IN_MSECS 2147483 // 0:35:47.483 class Timer64 { public: Timer64(); ~Timer64(); /** Initialize the timer - this must be called before the timer can be used */ int init(uint32_t rolloverCheckTimeInMsecc = TIMER64_15MINUTE_ROLLOVER_CHECK_IN_MSECS); /** Release the timer */ int release(void); /** Start the timer */ int start(void); /** Stop the timer */ int stop(void); /** Reset the timer to 0. * * If it was already counting, it will continue */ int reset(void); /** Get the time passed in seconds */ double read(int* status = NULL); /** Get the time passed in milli-seconds */ uint64_t read_ms(int* status = NULL); /** Get the time passed in micro-seconds */ uint64_t read_us(int* status = NULL); private: bool _timerInitialized; bool _timerRunning; // whether the timer is running timestamp_t _tickerStartTimeUsec; // the start time of the latest slice uint64_t _totalTimeUsec; // any accumulated time from previous slices const ticker_data_t *_ticker_data; RtosTimer* _rollOverCheckTimer; uint32_t _rollOverCheckTimerPeriodInMsec; static void _rollOverCheck(void const* args); }; #endif