diff --git a/portable/MSVC-MingW/port.c b/portable/MSVC-MingW/port.c index 81b5f3466..f5e26a98d 100644 --- a/portable/MSVC-MingW/port.c +++ b/portable/MSVC-MingW/port.c @@ -22,6 +22,7 @@ * https://www.FreeRTOS.org * https://github.com/FreeRTOS * + * 1 tab == 4 spaces! */ /* Standard includes. */ @@ -139,9 +140,6 @@ static DWORD WINAPI prvSimulatedPeripheralTimer( LPVOID lpParameter ) { TickType_t xMinimumWindowsBlockTime; TIMECAPS xTimeCaps; -TickType_t xWaitTimeBetweenTicks = portTICK_PERIOD_MS; -HANDLE hTimer = NULL; -LARGE_INTEGER liDueTime; /* Set the timer resolution to the maximum possible. */ if( timeGetDevCaps( &xTimeCaps, sizeof( xTimeCaps ) ) == MMSYSERR_NOERROR ) @@ -161,32 +159,22 @@ LARGE_INTEGER liDueTime; /* Just to prevent compiler warnings. */ ( void ) lpParameter; - /* Tick time for the timer is adjusted with the maximum available - resolution. */ - if( portTICK_PERIOD_MS < xMinimumWindowsBlockTime ) - { - xWaitTimeBetweenTicks = xMinimumWindowsBlockTime; - } - - /* Convert the tick time in milliseconds to nanoseconds resolution - for the Waitable Timer. */ - liDueTime.u.LowPart = xWaitTimeBetweenTicks * 1000 * 1000; - liDueTime.u.HighPart = 0; - - /* Create a synchronization Waitable Timer.*/ - hTimer = CreateWaitableTimer( NULL, FALSE, NULL ); - - configASSERT( hTimer != NULL ); - - /* Set the Waitable Timer. The timer is set to run periodically at every - xWaitTimeBetweenTicks milliseconds. */ - configASSERT( SetWaitableTimer( hTimer, &liDueTime, xWaitTimeBetweenTicks, NULL, NULL, 0 ) ); - for( ;; ) { /* Wait until the timer expires and we can access the simulated interrupt - variables. */ - WaitForSingleObject( hTimer, INFINITE ); + variables. *NOTE* this is not a 'real time' way of generating tick + events as the next wake time should be relative to the previous wake + time, not the time that Sleep() is called. It is done this way to + prevent overruns in this very non real time simulated/emulated + environment. */ + if( portTICK_PERIOD_MS < xMinimumWindowsBlockTime ) + { + Sleep( xMinimumWindowsBlockTime ); + } + else + { + Sleep( portTICK_PERIOD_MS ); + } configASSERT( xPortRunning );