品牌型网站建设方案,福田区龙岗区发布通告,网站续费模板,广告vi设计是什么1.任务延时vTaskDelay
//task. hvoid vTaskDelay( const TickType_t xTicksToDelay ); 必须将 INCLUDE_vTaskDelay 定义为 1#xff0c;此函数才可用。按给定的 tick 数延迟任务。任务保持阻塞的实际时间取决于 tick 频率。 常量 portTICK_PERIOD_MS 配合 tick 周期分辨率可用…1.任务延时vTaskDelay
//task. hvoid vTaskDelay( const TickType_t xTicksToDelay ); 必须将 INCLUDE_vTaskDelay 定义为 1此函数才可用。按给定的 tick 数延迟任务。任务保持阻塞的实际时间取决于 tick 频率。 常量 portTICK_PERIOD_MS 配合 tick 周期分辨率可用于从 tick 频率计算实际时间。 vTaskDelay() 会指定任务想要取消阻塞的时间该时间是相对于 vTaskDelay() 被调用的时间。 例如如果指定 时间块为 100 个 tick那么在调用 vTaskDelay() 100 个 tick 后任务会取消阻塞。 vTaskDelay() 并不会因此提供一种 控制周期性任务频率的好办法因为途径代码的路径以及其他任务和中断活动将影响 vTaskDelay() 被调用的频率进而会影响下一个任务执行的时间。
参数
xTicksToDelay 调用任务应阻塞的 tick 周期数。
用法示例
void vTaskFunction( void * pvParameters ){/* Block for 500ms. */const TickType_t xDelay 500 / portTICK_PERIOD_MS;for( ;; ){/* Simply toggle the LED every 500ms, blocking between each toggle. */vToggleLED();vTaskDelay( xDelay );}
}
2.任务延时vTaskDelayUntil
//task. hvoid vTaskDelayUntil( TickType_t *pxPreviousWakeTime,const TickType_t xTimeIncrement ); INCLUDE_vTaskDelayUntil 必须被定义为 1 才能使用此函数。将任务延迟到指定时间。 此函数可以由周期性任务使用 来确保恒定的执行频率。 此函数与 vTaskDelay() 在一个重要的方面有所不同 vTaskDelay() 会指定 任务想要取消阻塞的时间该时间是相对于 vTaskDelay() 被调用的时间 而 vTaskDelayUntil() 会指定任务希望取消阻塞的绝对时间。 vTaskDelay() 将 导致一个任务从调用 vTaskDelay() 时起阻塞特定的 tick 数。 因此很难单独使用 vTaskDelay() 来生成固定的 执行频率因为任务在调用 vTaskDelay() 后取消阻塞与该任务 再次调用 vTaskDelay() 之间的时间可能不是固定的 [ 该任务可能在两次调用之间 采用不同的代码路径或者可能在每次执行时被打断或被抢占 的次数不同 ]。 vTaskDelay() 会指定唤醒时间该时间相对于函数被调用的时间 vTaskDelayUntil() 会指定它希望取消阻塞的绝对精确 时间。 应注意如果 vTaskDelayUntil() 被用于指定已过去的唤醒时间 该函数将立即返回不阻塞。 因此使用 vTaskDelayUntil() 定期执行的任务在周期性执行因任何原因停止 例如任务被暂停而导致任务错过一个或多个周期性执行时 必须重新计算其所需的唤醒 时间。 这可以通过检查由引用传递的变量来发现 该变量是针对当前 tick 计数的 pxPreviousWakeTime 参数。 但是这在大多数使用场景下 并非必要。 常量 portTICK_PERIOD_MS 配合 tick 周期分辨率 可用于从 tick 频率计算实际时间。 当调用了 vTaskSuspendAll() 暂停 RTOS 调度器时不得调用此函数。
参数
pxPreviousWakeTime 指向一个变量的指针该变量 用于保存任务最后一次解除阻塞的时间。 该变量在第一次使用前 必须用当前时间进行初始化见下方示例。 在这之后该变量 会在 vTaskDelayUntil() 中自动更新。xTimeIncrement 周期时间段。 该任务将在 *pxPreviousWakeTime xTimeIncrement时间解除阻塞。 配合相同的 xTimeIncrement 参数值 调用 vTaskDelayUntil 将导致任务 以固定的间隔期执行。
示例用法
// Perform an action every 10 ticks.void vTaskFunction( void * pvParameters ){TickType_t xLastWakeTime;const TickType_t xFrequency 10;// Initialise the xLastWakeTime variable with the current time.xLastWakeTime xTaskGetTickCount();for( ;; ){// Wait for the next cycle.vTaskDelayUntil( xLastWakeTime, xFrequency );// Perform action here.}}
3.任务延时xTaskDelayUntil
//task. hBaseType_t xTaskDelayUntil( TickType_t *pxPreviousWakeTime,const TickType_t xTimeIncrement ); INCLUDE_xTaskDelayUntil 必须定义为 1 此函数才可用。将任务延迟到指定时间。 此函数可以由周期性任务使用 来确保恒定的执行频率。 此函数与 vTaskDelay() 在一个重要方面有所不同 vTaskDelay() 将 导致一个任务从调用 vTaskDelay() 时起阻塞指定的 tick 数 而 xTaskDelayUntil() 将导致一个任务从 pxPreviousWakeTime 参数中指定的时间起阻塞指定的 tick 数。 使用 vTaskDelay() 本身很难产生一个固定的执行频率 因为从一个任务开始执行到该任务调用 vTaskDelay() 之间的时间可能并不固定 [该任务在调用之间可能采取不同的代码路径 或者每次执行时可能被中断或被抢占的次数不同]。 xTaskDelayUntil() 可以用来生成一个恒定的执行频率。 vTaskDelay() 指定了相对于函数被调用时的唤醒时间 而 xTaskDelayUntil() 则指定了它希望解除阻塞的绝对精确时间 。 宏 pdMS_TO_TICKS() 可以用来计算以毫秒为单位的时间的 tick 数 分辨率为一个 tick 周期。
参数
pxPreviousWakeTime 指向一个变量的指针该变量 用于保存任务最后一次解除阻塞的时间。 该变量在第一次使用前 必须用当前时间进行初始化见下方示例。 在这之后该变量 会在 xTaskDelayUntil() 中自动更新。xTimeIncrement 周期时间段。 该任务将在 *pxPreviousWakeTime xTimeIncrement时间解除阻塞。 以相同的 xTimeIncrement 参数值调用 xTaskDelayUntil 以固定的间隔期执行。
返回 一个可用于检查任务是否实际延迟的值 如果任务延迟则返回 pdTRUE否则返回 pdFALSE。 如果下一个预计唤醒时间已过则任务将不会延迟。
示例用法
// Perform an action every 10 ticks.
void vTaskFunction( void * pvParameters )
{
TickType_t xLastWakeTime;
const TickType_t xFrequency 10;
BaseType_t xWasDelayed;// Initialise the xLastWakeTime variable with the current time.xLastWakeTime xTaskGetTickCount ();for( ;; ){// Wait for the next cycle.xWasDelayed xTaskDelayUntil( xLastWakeTime, xFrequency );// Perform action here. xWasDelayed value can be used to determine// whether a deadline was missed if the code here took too long.}
}