该示例演示了对多个函数的调用。 仅 vTaskStepTick() 是 FreeRTOS API 的一部分。 其他函数特定于 所用硬件上可用的时钟和节能模式,因此必须 由应用程序编写者提供。
/* First define the portSUPPRESS_TICKS_AND_SLEEP(). The parameter is the time, in ticks, until the kernel next needs to execute. */ #define portSUPPRESS_TICKS_AND_SLEEP( xIdleTime ) vApplicationSleep( xIdleTime ) /* Define the function that is called by portSUPPRESS_TICKS_AND_SLEEP(). */ void vApplicationSleep( TickType_t xExpectedIdleTime ) { unsigned long ulLowPowerTimeBeforeSleep, ulLowPowerTimeAfterSleep; /* Read the current time from a time source that will remain operational while the microcontroller is in a low power state. */ ulLowPowerTimeBeforeSleep = ulGetExternalTime(); /* Stop the timer that is generating the tick interrupt. */ prvStopTickInterruptTimer(); /* Configure an interrupt to bring the microcontroller out of its low power state at the time the kernel next needs to execute. The interrupt must be generated from a source that is remains operational when the microcontroller is in a low power state. */ vSetWakeTimeInterrupt( xExpectedIdleTime ); /* Enter the low power state. */ prvSleep(); /* Determine how long the microcontroller was actually in a low power state for, which will be less than xExpectedIdleTime if the microcontroller was brought out of low power mode by an interrupt other than that configured by the vSetWakeTimeInterrupt() call. Note that the scheduler is suspended before portSUPPRESS_TICKS_AND_SLEEP() is called, and resumed when portSUPPRESS_TICKS_AND_SLEEP() returns. Therefore no other tasks will execute until this function completes. */ ulLowPowerTimeAfterSleep = ulGetExternalTime(); /* Correct the kernels tick count to account for the time the microcontroller spent in its low power state. */ vTaskStepTick( ulLowPowerTimeAfterSleep - ulLowPowerTimeBeforeSleep ); /* Restart the timer that is generating the tick interrupt. */ prvStartTickInterruptTimer(); } Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|