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 * FixedRefresh.cpp
Electrotiger 0:fb0d810af3de 3 *
Electrotiger 0:fb0d810af3de 4 * Created on: Jun 26, 2016
Electrotiger 0:fb0d810af3de 5 * Author: Developer
Electrotiger 0:fb0d810af3de 6 */
Electrotiger 0:fb0d810af3de 7
Electrotiger 1:4b00feda7702 8 #include <FixedRefresh.h>
Electrotiger 0:fb0d810af3de 9
Electrotiger 0:fb0d810af3de 10
Electrotiger 0:fb0d810af3de 11
Electrotiger 0:fb0d810af3de 12 FixedRefresh::FixedRefresh()
Electrotiger 0:fb0d810af3de 13 :waitSemaphore(0) {
Electrotiger 0:fb0d810af3de 14 // Start the timer that measures the time between successive calls.
Electrotiger 0:fb0d810af3de 15 elapsedTime.start();
Electrotiger 0:fb0d810af3de 16 }
Electrotiger 0:fb0d810af3de 17
Electrotiger 0:fb0d810af3de 18 FixedRefresh::~FixedRefresh() {
Electrotiger 0:fb0d810af3de 19 // TODO Auto-generated destructor stub
Electrotiger 0:fb0d810af3de 20 }
Electrotiger 0:fb0d810af3de 21
Electrotiger 0:fb0d810af3de 22 /* More complicated, Thread does not have a wait_us function, necessitating the use of
Electrotiger 0:fb0d810af3de 23 * a semaphore and a callback function to perform the wait operation.
Electrotiger 0:fb0d810af3de 24 */
Electrotiger 0:fb0d810af3de 25
Electrotiger 0:fb0d810af3de 26 bool FixedRefresh::refresh_us(uint32_t micros) {
Electrotiger 0:fb0d810af3de 27 /* Capture the elapsed time. */
Electrotiger 0:fb0d810af3de 28 uint32_t elapsedTimeCapture = elapsedTime.read_us() + 7;
Electrotiger 0:fb0d810af3de 29 // If the elapsed time is less than the set time, then we can wait.
Electrotiger 0:fb0d810af3de 30 if(elapsedTimeCapture < micros) {
Electrotiger 0:fb0d810af3de 31 uint32_t waitTime = micros - elapsedTimeCapture;
Electrotiger 0:fb0d810af3de 32 // Activate the timer callback.
Electrotiger 0:fb0d810af3de 33 waitTimer.attach_us(this, &FixedRefresh::timerCallback, waitTime);
Electrotiger 0:fb0d810af3de 34 // Call the wait function again. Since we have called wait before, it is locked.
Electrotiger 0:fb0d810af3de 35 // This time, we actually wait for the timerCallback function to release it.
Electrotiger 0:fb0d810af3de 36 waitSemaphore.wait();
Electrotiger 0:fb0d810af3de 37 return true;
Electrotiger 0:fb0d810af3de 38 }
Electrotiger 0:fb0d810af3de 39 else {
Electrotiger 0:fb0d810af3de 40 return false;
Electrotiger 0:fb0d810af3de 41 }
Electrotiger 0:fb0d810af3de 42 }
Electrotiger 0:fb0d810af3de 43
Electrotiger 0:fb0d810af3de 44 void FixedRefresh::timerCallback() {
Electrotiger 0:fb0d810af3de 45 elapsedTime.reset();
Electrotiger 0:fb0d810af3de 46 waitSemaphore.release();
Electrotiger 0:fb0d810af3de 47 }
Electrotiger 0:fb0d810af3de 48