ADD Thread sleep

This commit is contained in:
Rémi Heredero 2024-11-17 18:26:18 +01:00
parent 211f362e66
commit d42dcb68b1
Signed by: Klagarge
GPG Key ID: ADFF1B03DA5D9980
2 changed files with 34 additions and 13 deletions

View File

@ -25,4 +25,7 @@ mbed test -m DISCO_H747I -t GCC_ARM -n advdembsof_library-tests-sensors-hdc1000
# Some questions
## If you print CPU statistics at the end of every major cycle (in the super-loop), what CPU usage do you observe? How can you explain the observed CPU uptime?
We observe a 100% usage because on each CPU cycle it compare if time is done.
We observe a 100% usage because on each CPU cycle it compare if time is done.
## If you run the program after the change from busy wait to sleep calls, what CPU usage do you observe? How can you explain the observed CPU uptime?
We can observe only a usage of 75% because the CPU is more on Idle with Thread sleep.

View File

@ -174,12 +174,18 @@ void BikeSystem::temperatureTask() {
tr_warn("Tick2 %" PRIu64, _timer.elapsed_time().count());
ThisThread::sleep_for(
std::chrono::duration_cast<std::chrono::milliseconds>(
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;
}
// std::chrono::microseconds elapsedTime = std::chrono::microseconds::zero();
// while (elapsedTime < kTemperatureTaskComputationTime) {
// elapsedTime = _timer.elapsed_time() - taskStartTime;
// }
_taskLogger.logPeriodAndExecutionTime(
_timer, advembsof::TaskLogger::kTemperatureTaskIndex, taskStartTime);
@ -206,12 +212,18 @@ void BikeSystem::displayTask1() {
_displayDevice.displaySpeed(_currentSpeed);
_displayDevice.displayDistance(_traveledDistance);
ThisThread::sleep_for(
std::chrono::duration_cast<std::chrono::milliseconds>(
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;
}
// std::chrono::microseconds elapsedTime = std::chrono::microseconds::zero();
// while (elapsedTime < kDisplayTask1ComputationTime) {
// elapsedTime = _timer.elapsed_time() - taskStartTime;
// }
_taskLogger.logPeriodAndExecutionTime(
_timer, advembsof::TaskLogger::kDisplayTask1Index, taskStartTime);
@ -222,12 +234,18 @@ void BikeSystem::displayTask2() {
_displayDevice.displayTemperature(_currentTemperature);
ThisThread::sleep_for(
std::chrono::duration_cast<std::chrono::milliseconds>(
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;
}
// std::chrono::microseconds elapsedTime = std::chrono::microseconds::zero();
// while (elapsedTime < kDisplayTask2ComputationTime) {
// elapsedTime = _timer.elapsed_time() - taskStartTime;
// }
_taskLogger.logPeriodAndExecutionTime(
_timer, advembsof::TaskLogger::kDisplayTask2Index, taskStartTime);
}