Merge pull request #33 from Fastium/FIX/init-dec_order

FIX initialisation and declaration order
This commit is contained in:
Rémi Heredero 2024-12-31 16:08:03 +01:00 committed by GitHub
commit 980eb2b376
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 34 additions and 59 deletions

View File

@ -61,7 +61,10 @@ BikeSystem::BikeSystem()
: _gearDevice(_timer), : _gearDevice(_timer),
_pedalDevice(_timer), _pedalDevice(_timer),
_resetDevice(_timer), _resetDevice(_timer),
_displayDevice(),
_speedometer(_timer), _speedometer(_timer),
_sensorDevice(),
_taskLogger(),
_cpuLogger(_timer) {} _cpuLogger(_timer) {}
void BikeSystem::start() { void BikeSystem::start() {
@ -205,29 +208,18 @@ void BikeSystem::speedDistanceTask() {
_timer, advembsof::TaskLogger::kSpeedTaskIndex, taskStartTime); _timer, advembsof::TaskLogger::kSpeedTaskIndex, taskStartTime);
} }
void BikeSystem::temperatureTask() { void BikeSystem::displayTask1() {
auto taskStartTime = _timer.elapsed_time(); auto taskStartTime = _timer.elapsed_time();
tr_warn("Tick1 %" PRIu64, _timer.elapsed_time().count()); _displayDevice.displayGear(_currentGear);
_displayDevice.displaySpeed(_currentSpeed);
// no need to protect access to data members (single threaded) _displayDevice.displayDistance(_traveledDistance);
_currentTemperature = _sensorDevice.readTemperature();
tr_warn("Tick2 %" PRIu64, _timer.elapsed_time().count());
ThisThread::sleep_for(std::chrono::duration_cast<std::chrono::milliseconds>( ThisThread::sleep_for(std::chrono::duration_cast<std::chrono::milliseconds>(
kTemperatureTaskComputationTime - (_timer.elapsed_time() - taskStartTime))); kDisplayTask1ComputationTime - (_timer.elapsed_time() - taskStartTime)));
// simulate task computation by waiting for the required task computation time
// std::chrono::microseconds elapsedTime =
// std::chrono::microseconds::zero(); while (elapsedTime <
// kTemperatureTaskComputationTime) {
// elapsedTime = _timer.elapsed_time() - taskStartTime;
// }
_taskLogger.logPeriodAndExecutionTime( _taskLogger.logPeriodAndExecutionTime(
_timer, advembsof::TaskLogger::kTemperatureTaskIndex, taskStartTime); _timer, advembsof::TaskLogger::kDisplayTask1Index, taskStartTime);
} }
void BikeSystem::resetTask() { void BikeSystem::resetTask() {
@ -243,27 +235,17 @@ void BikeSystem::resetTask() {
_taskLogger.logPeriodAndExecutionTime( _taskLogger.logPeriodAndExecutionTime(
_timer, advembsof::TaskLogger::kResetTaskIndex, taskStartTime); _timer, advembsof::TaskLogger::kResetTaskIndex, taskStartTime);
} }
void BikeSystem::temperatureTask() {
void BikeSystem::displayTask1() {
auto taskStartTime = _timer.elapsed_time(); auto taskStartTime = _timer.elapsed_time();
_displayDevice.displayGear(_currentGear); // no need to protect access to data members (single threaded)
_displayDevice.displaySpeed(_currentSpeed); _currentTemperature = _sensorDevice.readTemperature();
_displayDevice.displayDistance(_traveledDistance);
ThisThread::sleep_for(std::chrono::duration_cast<std::chrono::milliseconds>( ThisThread::sleep_for(std::chrono::duration_cast<std::chrono::milliseconds>(
kDisplayTask1ComputationTime - (_timer.elapsed_time() - taskStartTime))); kTemperatureTaskComputationTime - (_timer.elapsed_time() - taskStartTime)));
// simulate task computation by waiting for the required task computation time
// std::chrono::microseconds elapsedTime =
// std::chrono::microseconds::zero(); while (elapsedTime <
// kDisplayTask1ComputationTime) {
// elapsedTime = _timer.elapsed_time() - taskStartTime;
// }
_taskLogger.logPeriodAndExecutionTime( _taskLogger.logPeriodAndExecutionTime(
_timer, advembsof::TaskLogger::kDisplayTask1Index, taskStartTime); _timer, advembsof::TaskLogger::kTemperatureTaskIndex, taskStartTime);
} }
void BikeSystem::displayTask2() { void BikeSystem::displayTask2() {
@ -274,13 +256,6 @@ void BikeSystem::displayTask2() {
ThisThread::sleep_for(std::chrono::duration_cast<std::chrono::milliseconds>( ThisThread::sleep_for(std::chrono::duration_cast<std::chrono::milliseconds>(
kDisplayTask2ComputationTime - (_timer.elapsed_time() - taskStartTime))); kDisplayTask2ComputationTime - (_timer.elapsed_time() - taskStartTime)));
// simulate task computation by waiting for the required task computation time
// std::chrono::microseconds elapsedTime =
// std::chrono::microseconds::zero(); while (elapsedTime <
// kDisplayTask2ComputationTime) {
// elapsedTime = _timer.elapsed_time() - taskStartTime;
// }
_taskLogger.logPeriodAndExecutionTime( _taskLogger.logPeriodAndExecutionTime(
_timer, advembsof::TaskLogger::kDisplayTask2Index, taskStartTime); _timer, advembsof::TaskLogger::kDisplayTask2Index, taskStartTime);
} }

View File

@ -37,7 +37,7 @@ namespace static_scheduling {
static constexpr std::chrono::microseconds kTaskRunTime = 200000us; static constexpr std::chrono::microseconds kTaskRunTime = 200000us;
PedalDevice::PedalDevice(Timer& timer) : _timer(timer) {} PedalDevice::PedalDevice(Timer& timer) : _timer(timer), _pedalRotationTime(0) {}
std::chrono::milliseconds PedalDevice::getCurrentRotationTime() { std::chrono::milliseconds PedalDevice::getCurrentRotationTime() {
std::chrono::microseconds initialTime = _timer.elapsed_time(); std::chrono::microseconds initialTime = _timer.elapsed_time();

View File

@ -46,9 +46,9 @@ class PedalDevice {
void decreaseRotationSpeed(); void decreaseRotationSpeed();
// data members // data members
Timer& _timer;
std::chrono::milliseconds _pedalRotationTime = std::chrono::milliseconds _pedalRotationTime =
bike_computer::kInitialPedalRotationTime; bike_computer::kInitialPedalRotationTime;
Timer& _timer;
}; };
} // namespace static_scheduling } // namespace static_scheduling

View File

@ -43,7 +43,8 @@ namespace static_scheduling {
static constexpr std::chrono::microseconds kTaskRunTime = 100000us; static constexpr std::chrono::microseconds kTaskRunTime = 100000us;
ResetDevice::ResetDevice(Timer& timer) : _timer(timer), _resetButton(PUSH_BUTTON) { ResetDevice::ResetDevice(Timer& timer)
: _resetButton(PUSH_BUTTON), _timer(timer), _pressTime(0) {
_resetButton.rise(callback(this, &ResetDevice::onRise)); _resetButton.rise(callback(this, &ResetDevice::onRise));
} }

View File

@ -62,12 +62,15 @@ static constexpr std::chrono::milliseconds kDisplayTask2ComputationTime = 100ms;
static constexpr std::chrono::milliseconds kCPUTaskPeriod = 1600ms; static constexpr std::chrono::milliseconds kCPUTaskPeriod = 1600ms;
static constexpr std::chrono::milliseconds kCPUTaskDelay = 1200ms; static constexpr std::chrono::milliseconds kCPUTaskDelay = 1200ms;
static constexpr std::chrono::milliseconds kCPUTaskComputationTime = 100ms; static constexpr std::chrono::milliseconds kCPUTaskComputationTime = 100ms;
BikeSystem::BikeSystem() BikeSystem::BikeSystem()
: _gearDevice(), : _gearDevice(),
_pedalDevice(), _pedalDevice(),
_resetDevice(callback(this, &BikeSystem::onReset)), _resetDevice(callback(this, &BikeSystem::onReset)),
_displayDevice(),
_speedometer(_timer), _speedometer(_timer),
_sensorDevice(),
_taskLogger(),
_cpuLogger(_timer) {} _cpuLogger(_timer) {}
void BikeSystem::start() { void BikeSystem::start() {
@ -175,22 +178,19 @@ void BikeSystem::speedDistanceTask() {
_taskLogger.logPeriodAndExecutionTime( _taskLogger.logPeriodAndExecutionTime(
_timer, advembsof::TaskLogger::kSpeedTaskIndex, taskStartTime); _timer, advembsof::TaskLogger::kSpeedTaskIndex, taskStartTime);
} }
void BikeSystem::temperatureTask() { void BikeSystem::displayTask1() {
auto taskStartTime = _timer.elapsed_time(); auto taskStartTime = _timer.elapsed_time();
// tr_warn("Tick1 %" PRIu64, _timer.elapsed_time().count()); _displayDevice.displayGear(_currentGear);
_displayDevice.displaySpeed(_currentSpeed);
// no need to protect access to data members (single threaded) _displayDevice.displayDistance(_traveledDistance);
_currentTemperature = _sensorDevice.readTemperature();
// tr_warn("Tick2 %" PRIu64, _timer.elapsed_time().count());
ThisThread::sleep_for(std::chrono::duration_cast<std::chrono::milliseconds>( ThisThread::sleep_for(std::chrono::duration_cast<std::chrono::milliseconds>(
kTemperatureTaskComputationTime - (_timer.elapsed_time() - taskStartTime))); kDisplayTask1ComputationTime - (_timer.elapsed_time() - taskStartTime)));
_taskLogger.logPeriodAndExecutionTime( _taskLogger.logPeriodAndExecutionTime(
_timer, advembsof::TaskLogger::kTemperatureTaskIndex, taskStartTime); _timer, advembsof::TaskLogger::kDisplayTask1Index, taskStartTime);
} }
void BikeSystem::resetTask() { void BikeSystem::resetTask() {
@ -208,18 +208,17 @@ void BikeSystem::resetTask() {
_timer, advembsof::TaskLogger::kResetTaskIndex, taskStartTime); _timer, advembsof::TaskLogger::kResetTaskIndex, taskStartTime);
} }
void BikeSystem::displayTask1() { void BikeSystem::temperatureTask() {
auto taskStartTime = _timer.elapsed_time(); auto taskStartTime = _timer.elapsed_time();
_displayDevice.displayGear(_currentGear); // no need to protect access to data members (single threaded)
_displayDevice.displaySpeed(_currentSpeed); _currentTemperature = _sensorDevice.readTemperature();
_displayDevice.displayDistance(_traveledDistance);
ThisThread::sleep_for(std::chrono::duration_cast<std::chrono::milliseconds>( ThisThread::sleep_for(std::chrono::duration_cast<std::chrono::milliseconds>(
kDisplayTask1ComputationTime - (_timer.elapsed_time() - taskStartTime))); kTemperatureTaskComputationTime - (_timer.elapsed_time() - taskStartTime)));
_taskLogger.logPeriodAndExecutionTime( _taskLogger.logPeriodAndExecutionTime(
_timer, advembsof::TaskLogger::kDisplayTask1Index, taskStartTime); _timer, advembsof::TaskLogger::kTemperatureTaskIndex, taskStartTime);
} }
void BikeSystem::displayTask2() { void BikeSystem::displayTask2() {