Class which provides a handy interface to refresh a loop with microsecond precision within an RTOS.

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?

UserRevisionLine numberNew 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_ */