Class which provides a handy interface to refresh a loop with microsecond precision within an RTOS.
FixedRefresh.h@1:4b00feda7702, 2016-08-02 (annotated)
- Committer:
- Electrotiger
- Date:
- Tue Aug 02 01:46:36 2016 +0000
- Revision:
- 1:4b00feda7702
- Parent:
- 0:fb0d810af3de
Fixed #include in FixedRefresh.cpp to use the .h extension instead of the .hpp extension.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Electrotiger | 0:fb0d810af3de | 1 | /** |
Electrotiger | 0:fb0d810af3de | 2 | * @file FixedRefresh.hpp |
Electrotiger | 0:fb0d810af3de | 3 | * @author Weimen Li |
Electrotiger | 0:fb0d810af3de | 4 | * @date June 26th, 2016 |
Electrotiger | 0:fb0d810af3de | 5 | * @class FixedRefresh |
Electrotiger | 0:fb0d810af3de | 6 | * @brief This class is used in an RTOS to ensure that iterations of a loop happen at fixed time intervals, |
Electrotiger | 0:fb0d810af3de | 7 | * regardless of how long other code in the loop takes. In doing so, it waits the thread that is currently |
Electrotiger | 0:fb0d810af3de | 8 | * running to allow other threads to run. |
Electrotiger | 0:fb0d810af3de | 9 | */ |
Electrotiger | 0:fb0d810af3de | 10 | |
Electrotiger | 0:fb0d810af3de | 11 | /* |
Electrotiger | 0:fb0d810af3de | 12 | * FixedRefresh.hpp |
Electrotiger | 0:fb0d810af3de | 13 | * |
Electrotiger | 0:fb0d810af3de | 14 | * Created on: Jun 26, 2016 |
Electrotiger | 0:fb0d810af3de | 15 | * Author: Developer |
Electrotiger | 0:fb0d810af3de | 16 | */ |
Electrotiger | 0:fb0d810af3de | 17 | |
Electrotiger | 0:fb0d810af3de | 18 | #ifndef FIXEDREFRESH_HPP_ |
Electrotiger | 0:fb0d810af3de | 19 | #define FIXEDREFRESH_HPP_ |
Electrotiger | 0:fb0d810af3de | 20 | #include "mbed.h" |
Electrotiger | 0:fb0d810af3de | 21 | #include "rtos.h" |
Electrotiger | 0:fb0d810af3de | 22 | |
Electrotiger | 0:fb0d810af3de | 23 | class FixedRefresh { |
Electrotiger | 0:fb0d810af3de | 24 | public: |
Electrotiger | 0:fb0d810af3de | 25 | /// Constructor for the FixedRefresh class. |
Electrotiger | 0:fb0d810af3de | 26 | FixedRefresh(); |
Electrotiger | 0:fb0d810af3de | 27 | /// Destructor for the FixedRefresh class. |
Electrotiger | 0:fb0d810af3de | 28 | virtual ~FixedRefresh(); |
Electrotiger | 0:fb0d810af3de | 29 | |
Electrotiger | 0:fb0d810af3de | 30 | /* |
Electrotiger | 0:fb0d810af3de | 31 | * @brief Function which ensures as much as possible that micros microseconds elapses |
Electrotiger | 0:fb0d810af3de | 32 | * between successive calls, no matter how long the computation beforehand took. |
Electrotiger | 0:fb0d810af3de | 33 | * @args micros The number of microseconds that should elapse between successive calls. |
Electrotiger | 0:fb0d810af3de | 34 | * @returns false if waiting will not occur because greater than micros microseconds has |
Electrotiger | 0:fb0d810af3de | 35 | * elapsed since the previous calls. If the function does return false, then your computation |
Electrotiger | 0:fb0d810af3de | 36 | * is taking too much time. |
Electrotiger | 0:fb0d810af3de | 37 | */ |
Electrotiger | 0:fb0d810af3de | 38 | bool refresh_us(uint32_t micros); |
Electrotiger | 0:fb0d810af3de | 39 | private: |
Electrotiger | 0:fb0d810af3de | 40 | /// The number of microseconds to wait. |
Electrotiger | 0:fb0d810af3de | 41 | uint32_t wait_us; |
Electrotiger | 0:fb0d810af3de | 42 | Timer elapsedTime; |
Electrotiger | 0:fb0d810af3de | 43 | Timeout waitTimer; |
Electrotiger | 0:fb0d810af3de | 44 | /** |
Electrotiger | 0:fb0d810af3de | 45 | * @brief Mutex that is locked |
Electrotiger | 0:fb0d810af3de | 46 | */ |
Electrotiger | 0:fb0d810af3de | 47 | Semaphore waitSemaphore; |
Electrotiger | 0:fb0d810af3de | 48 | void timerCallback(); |
Electrotiger | 0:fb0d810af3de | 49 | }; |
Electrotiger | 0:fb0d810af3de | 50 | |
Electrotiger | 0:fb0d810af3de | 51 | #endif /* FIXEDREFRESH_HPP_ */ |