ADD Thread sleep
This commit is contained in:
		| @@ -25,4 +25,7 @@ mbed test -m DISCO_H747I -t GCC_ARM -n advdembsof_library-tests-sensors-hdc1000 | |||||||
|  |  | ||||||
| # Some questions | # 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? | ## 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. | ||||||
| @@ -174,12 +174,18 @@ void BikeSystem::temperatureTask() { | |||||||
|  |  | ||||||
|     tr_warn("Tick2 %" PRIu64, _timer.elapsed_time().count()); |     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 |     // simulate task computation by waiting for the required task computation time | ||||||
|  |  | ||||||
|     std::chrono::microseconds elapsedTime = std::chrono::microseconds::zero(); | //    std::chrono::microseconds elapsedTime = std::chrono::microseconds::zero(); | ||||||
|     while (elapsedTime < kTemperatureTaskComputationTime) { | //    while (elapsedTime < kTemperatureTaskComputationTime) { | ||||||
|         elapsedTime = _timer.elapsed_time() - taskStartTime; | //        elapsedTime = _timer.elapsed_time() - taskStartTime; | ||||||
|     } | //    } | ||||||
|  |  | ||||||
|     _taskLogger.logPeriodAndExecutionTime( |     _taskLogger.logPeriodAndExecutionTime( | ||||||
|         _timer, advembsof::TaskLogger::kTemperatureTaskIndex, taskStartTime); |         _timer, advembsof::TaskLogger::kTemperatureTaskIndex, taskStartTime); | ||||||
| @@ -206,12 +212,18 @@ void BikeSystem::displayTask1() { | |||||||
|     _displayDevice.displaySpeed(_currentSpeed); |     _displayDevice.displaySpeed(_currentSpeed); | ||||||
|     _displayDevice.displayDistance(_traveledDistance); |     _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 |     // simulate task computation by waiting for the required task computation time | ||||||
|  |  | ||||||
|     std::chrono::microseconds elapsedTime = std::chrono::microseconds::zero(); | //    std::chrono::microseconds elapsedTime = std::chrono::microseconds::zero(); | ||||||
|     while (elapsedTime < kDisplayTask1ComputationTime) { | //    while (elapsedTime < kDisplayTask1ComputationTime) { | ||||||
|         elapsedTime = _timer.elapsed_time() - taskStartTime; | //        elapsedTime = _timer.elapsed_time() - taskStartTime; | ||||||
|     } | //    } | ||||||
|  |  | ||||||
|     _taskLogger.logPeriodAndExecutionTime( |     _taskLogger.logPeriodAndExecutionTime( | ||||||
|         _timer, advembsof::TaskLogger::kDisplayTask1Index, taskStartTime); |         _timer, advembsof::TaskLogger::kDisplayTask1Index, taskStartTime); | ||||||
| @@ -222,12 +234,18 @@ void BikeSystem::displayTask2() { | |||||||
|  |  | ||||||
|     _displayDevice.displayTemperature(_currentTemperature); |     _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 |     // simulate task computation by waiting for the required task computation time | ||||||
|  |  | ||||||
|     std::chrono::microseconds elapsedTime = std::chrono::microseconds::zero(); | //    std::chrono::microseconds elapsedTime = std::chrono::microseconds::zero(); | ||||||
|     while (elapsedTime < kDisplayTask2ComputationTime) { | //    while (elapsedTime < kDisplayTask2ComputationTime) { | ||||||
|         elapsedTime = _timer.elapsed_time() - taskStartTime; | //        elapsedTime = _timer.elapsed_time() - taskStartTime; | ||||||
|     } | //    } | ||||||
|     _taskLogger.logPeriodAndExecutionTime( |     _taskLogger.logPeriodAndExecutionTime( | ||||||
|         _timer, advembsof::TaskLogger::kDisplayTask2Index, taskStartTime); |         _timer, advembsof::TaskLogger::kDisplayTask2Index, taskStartTime); | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user