diff --git a/static_scheduling/bike_system.cpp b/static_scheduling/bike_system.cpp index 1e4dac4..e36ac60 100644 --- a/static_scheduling/bike_system.cpp +++ b/static_scheduling/bike_system.cpp @@ -61,7 +61,10 @@ BikeSystem::BikeSystem() : _gearDevice(_timer), _pedalDevice(_timer), _resetDevice(_timer), + _displayDevice(), _speedometer(_timer), + _sensorDevice(), + _taskLogger(), _cpuLogger(_timer) {} void BikeSystem::start() { @@ -205,29 +208,18 @@ void BikeSystem::speedDistanceTask() { _timer, advembsof::TaskLogger::kSpeedTaskIndex, taskStartTime); } -void BikeSystem::temperatureTask() { +void BikeSystem::displayTask1() { auto taskStartTime = _timer.elapsed_time(); - tr_warn("Tick1 %" PRIu64, _timer.elapsed_time().count()); - - // no need to protect access to data members (single threaded) - _currentTemperature = _sensorDevice.readTemperature(); - - tr_warn("Tick2 %" PRIu64, _timer.elapsed_time().count()); + _displayDevice.displayGear(_currentGear); + _displayDevice.displaySpeed(_currentSpeed); + _displayDevice.displayDistance(_traveledDistance); ThisThread::sleep_for(std::chrono::duration_cast( - 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 < - // kTemperatureTaskComputationTime) { - // elapsedTime = _timer.elapsed_time() - taskStartTime; - // } + kDisplayTask1ComputationTime - (_timer.elapsed_time() - taskStartTime))); _taskLogger.logPeriodAndExecutionTime( - _timer, advembsof::TaskLogger::kTemperatureTaskIndex, taskStartTime); + _timer, advembsof::TaskLogger::kDisplayTask1Index, taskStartTime); } void BikeSystem::resetTask() { @@ -243,27 +235,17 @@ void BikeSystem::resetTask() { _taskLogger.logPeriodAndExecutionTime( _timer, advembsof::TaskLogger::kResetTaskIndex, taskStartTime); } - -void BikeSystem::displayTask1() { +void BikeSystem::temperatureTask() { auto taskStartTime = _timer.elapsed_time(); - _displayDevice.displayGear(_currentGear); - _displayDevice.displaySpeed(_currentSpeed); - _displayDevice.displayDistance(_traveledDistance); + // no need to protect access to data members (single threaded) + _currentTemperature = _sensorDevice.readTemperature(); ThisThread::sleep_for(std::chrono::duration_cast( - 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 < - // kDisplayTask1ComputationTime) { - // elapsedTime = _timer.elapsed_time() - taskStartTime; - // } + kTemperatureTaskComputationTime - (_timer.elapsed_time() - taskStartTime))); _taskLogger.logPeriodAndExecutionTime( - _timer, advembsof::TaskLogger::kDisplayTask1Index, taskStartTime); + _timer, advembsof::TaskLogger::kTemperatureTaskIndex, taskStartTime); } void BikeSystem::displayTask2() { @@ -274,13 +256,6 @@ void BikeSystem::displayTask2() { ThisThread::sleep_for(std::chrono::duration_cast( 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( _timer, advembsof::TaskLogger::kDisplayTask2Index, taskStartTime); } diff --git a/static_scheduling/pedal_device.cpp b/static_scheduling/pedal_device.cpp index e7f67ff..b81c4bd 100644 --- a/static_scheduling/pedal_device.cpp +++ b/static_scheduling/pedal_device.cpp @@ -37,7 +37,7 @@ namespace static_scheduling { 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::microseconds initialTime = _timer.elapsed_time(); diff --git a/static_scheduling/pedal_device.hpp b/static_scheduling/pedal_device.hpp index ae1caeb..5010706 100644 --- a/static_scheduling/pedal_device.hpp +++ b/static_scheduling/pedal_device.hpp @@ -46,9 +46,9 @@ class PedalDevice { void decreaseRotationSpeed(); // data members + Timer& _timer; std::chrono::milliseconds _pedalRotationTime = bike_computer::kInitialPedalRotationTime; - Timer& _timer; }; } // namespace static_scheduling diff --git a/static_scheduling/reset_device.cpp b/static_scheduling/reset_device.cpp index b94e83e..76bb180 100644 --- a/static_scheduling/reset_device.cpp +++ b/static_scheduling/reset_device.cpp @@ -43,7 +43,8 @@ namespace static_scheduling { 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)); } diff --git a/static_scheduling_with_event/bike_system.cpp b/static_scheduling_with_event/bike_system.cpp index b4696cd..e9416d5 100644 --- a/static_scheduling_with_event/bike_system.cpp +++ b/static_scheduling_with_event/bike_system.cpp @@ -62,12 +62,15 @@ static constexpr std::chrono::milliseconds kDisplayTask2ComputationTime = 100ms; static constexpr std::chrono::milliseconds kCPUTaskPeriod = 1600ms; static constexpr std::chrono::milliseconds kCPUTaskDelay = 1200ms; static constexpr std::chrono::milliseconds kCPUTaskComputationTime = 100ms; - + BikeSystem::BikeSystem() : _gearDevice(), _pedalDevice(), _resetDevice(callback(this, &BikeSystem::onReset)), + _displayDevice(), _speedometer(_timer), + _sensorDevice(), + _taskLogger(), _cpuLogger(_timer) {} void BikeSystem::start() { @@ -175,22 +178,19 @@ void BikeSystem::speedDistanceTask() { _taskLogger.logPeriodAndExecutionTime( _timer, advembsof::TaskLogger::kSpeedTaskIndex, taskStartTime); } - -void BikeSystem::temperatureTask() { + +void BikeSystem::displayTask1() { auto taskStartTime = _timer.elapsed_time(); - // tr_warn("Tick1 %" PRIu64, _timer.elapsed_time().count()); - - // no need to protect access to data members (single threaded) - _currentTemperature = _sensorDevice.readTemperature(); - - // tr_warn("Tick2 %" PRIu64, _timer.elapsed_time().count()); + _displayDevice.displayGear(_currentGear); + _displayDevice.displaySpeed(_currentSpeed); + _displayDevice.displayDistance(_traveledDistance); ThisThread::sleep_for(std::chrono::duration_cast( - kTemperatureTaskComputationTime - (_timer.elapsed_time() - taskStartTime))); + kDisplayTask1ComputationTime - (_timer.elapsed_time() - taskStartTime))); _taskLogger.logPeriodAndExecutionTime( - _timer, advembsof::TaskLogger::kTemperatureTaskIndex, taskStartTime); + _timer, advembsof::TaskLogger::kDisplayTask1Index, taskStartTime); } void BikeSystem::resetTask() { @@ -208,18 +208,17 @@ void BikeSystem::resetTask() { _timer, advembsof::TaskLogger::kResetTaskIndex, taskStartTime); } -void BikeSystem::displayTask1() { +void BikeSystem::temperatureTask() { auto taskStartTime = _timer.elapsed_time(); - _displayDevice.displayGear(_currentGear); - _displayDevice.displaySpeed(_currentSpeed); - _displayDevice.displayDistance(_traveledDistance); + // no need to protect access to data members (single threaded) + _currentTemperature = _sensorDevice.readTemperature(); ThisThread::sleep_for(std::chrono::duration_cast( - kDisplayTask1ComputationTime - (_timer.elapsed_time() - taskStartTime))); + kTemperatureTaskComputationTime - (_timer.elapsed_time() - taskStartTime))); _taskLogger.logPeriodAndExecutionTime( - _timer, advembsof::TaskLogger::kDisplayTask1Index, taskStartTime); + _timer, advembsof::TaskLogger::kTemperatureTaskIndex, taskStartTime); } void BikeSystem::displayTask2() {