added new periodic op divider
This commit is contained in:
parent
bbd81c2d6a
commit
4f48ed9756
34
globalfunctions/PeriodicOperationDivider.cpp
Normal file
34
globalfunctions/PeriodicOperationDivider.cpp
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#include "PeriodicOperationDivider.h"
|
||||||
|
|
||||||
|
|
||||||
|
PeriodicOperationDivider::PeriodicOperationDivider(uint32_t divider,
|
||||||
|
bool resetAutomatically): resetAutomatically(resetAutomatically),
|
||||||
|
counter(divider), divider(divider) {
|
||||||
|
}
|
||||||
|
|
||||||
|
bool PeriodicOperationDivider::checkAndIncrement() {
|
||||||
|
if(counter >= divider) {
|
||||||
|
if(resetAutomatically) {
|
||||||
|
counter = 0;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
counter ++;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PeriodicOperationDivider::resetCounter() {
|
||||||
|
counter = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PeriodicOperationDivider::setDivider(uint32_t newDivider) {
|
||||||
|
divider = newDivider;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t PeriodicOperationDivider::getCounter() const {
|
||||||
|
return counter;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t PeriodicOperationDivider::getDivider() const {
|
||||||
|
return divider;
|
||||||
|
}
|
55
globalfunctions/PeriodicOperationDivider.h
Normal file
55
globalfunctions/PeriodicOperationDivider.h
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
#ifndef FSFW_GLOBALFUNCTIONS_PERIODICOPERATIONDIVIDER_H_
|
||||||
|
#define FSFW_GLOBALFUNCTIONS_PERIODICOPERATIONDIVIDER_H_
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Lightweight helper class to facilitate periodic operation with
|
||||||
|
* decreased frequencies.
|
||||||
|
* @details
|
||||||
|
* This class is useful to perform operations which have to be performed
|
||||||
|
* with a reduced frequency, like debugging printouts in high periodic tasks
|
||||||
|
* or low priority operations.
|
||||||
|
*/
|
||||||
|
class PeriodicOperationDivider {
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Initialize with the desired divider and specify whether the internal
|
||||||
|
* counter will be reset automatically.
|
||||||
|
* @param divider
|
||||||
|
* @param resetAutomatically
|
||||||
|
*/
|
||||||
|
PeriodicOperationDivider(uint32_t divider, bool resetAutomatically = true);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check whether operation is necessary.
|
||||||
|
* If an operation is necessary and the class has been
|
||||||
|
* configured to be reset automatically, the counter will be reset.
|
||||||
|
* If not, the counter will be incremented.
|
||||||
|
* @return
|
||||||
|
* -@c true if the counter is larger or equal to the divider
|
||||||
|
* -@c false otherwise
|
||||||
|
*/
|
||||||
|
bool checkAndIncrement();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Can be used to reset the counter to 0 manually.
|
||||||
|
*/
|
||||||
|
void resetCounter();
|
||||||
|
uint32_t getCounter() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Can be used to set a new divider value.
|
||||||
|
* @param newDivider
|
||||||
|
*/
|
||||||
|
void setDivider(uint32_t newDivider);
|
||||||
|
uint32_t getDivider() const;
|
||||||
|
private:
|
||||||
|
bool resetAutomatically = true;
|
||||||
|
uint32_t counter = 0;
|
||||||
|
uint32_t divider = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* FSFW_GLOBALFUNCTIONS_PERIODICOPERATIONDIVIDER_H_ */
|
Loading…
x
Reference in New Issue
Block a user