【Freertos基础入门】2个Freertos的Delay函数

简介: 【Freertos基础入门】2个Freertos的Delay函数

前言


本系列基于stm32系列单片机来使用freerots

任务管理是实时操作系统(RTOS)的核心功能之一,它允许开发者以并发的方式组织和管理多个任务。FreeRTOS 是一个流行的开源RTOS,它提供了强大的任务管理功能,让开发者能够轻松创建和控制任务。本文将介绍 FreeRTOS 的任务管理功能,包括任务的创建、删除、挂起、恢复和优先级控制等方面的内容。


一、vTaskDelay与vTaskDelayUntil


当我们在编写多任务程序时,经常需要控制任务之间的时间间隔,让它们按照一定的时间顺序执行。这时就可以使用 FreeRTOS 提供的两个函数:vTaskDelay 和 vTaskDelayUntil。

vTaskDelay:这个函数用于让当前任务延迟一段时间后再继续执行。你可以把它看作是一个暂停命令,告诉任务要等待一段时间后再继续往下执行。函数原型如下:

void vTaskDelay( const TickType_t xTicksToDelay );


其中,xTicksToDelay 是一个时间参数,表示需要延迟的时钟节拍数。时钟节拍数的大小取决于系统的配置,一般情况下,1 个时钟节拍对应一定的时间单位,例如毫秒。调用这个函数后,当前任务会暂停执行指定的时间,然后再继续往下执行。使用pdMS_TO_TICKS()把ms变成节拍数,在前面我们也了解了一点.

vTaskDelayUntil:这个函数用于让当前任务在指定的时间点后再继续执行。你可以把它看作是一个定时器,告诉任务要在特定的时间点再次运行。函数原型如下:

void vTaskDelayUntil( TickType_t *pxPreviousWakeTime, const TickType_t xTimeIncrement );


其中,pxPreviousWakeTime 是一个指向时间变量的指针,表示任务上次唤醒的时间。xTimeIncrement 是一个时间增量,表示任务需要等待的时间长度。调用这个函数后,当前任务会根据上次唤醒时间和时间增量计算出下次唤醒的时间,然后暂停执行,直到达到指定的时间后再继续执行。


区别:

vTaskDelay 是相对延迟,即任务会在当前时间的基础上延迟一段时间。

vTaskDelayUntil 是绝对延迟,即任务会在上次唤醒时间的基础上延迟一段时间。


二、示例代码


void vTask1(void* pvParameters)
{
    TickType_t xLastWakeTime;
    const TickType_t xDelay = pdMS_TO_TICKS(1000); // 设置延迟时间为 1000ms
    // 初始化上次唤醒时间
    xLastWakeTime = xTaskGetTickCount(); 
    while (1)
    {
        // 任务执行代码
        vTaskDelayUntil(&xLastWakeTime, xDelay);
    }
}
void vTask2(void* pvParameters)
{
    while (1)
    {
        // 任务执行代码
        vTaskDelay(pdMS_TO_TICKS(500)); // 延迟 500ms
    }
}


在上面的示例中,vTask1 和 vTask2 是两个并发运行的任务。vTask1 使用 vTaskDelayUntil 函数将任务定时在每隔 1000ms 运行一次。vTask2 使用 vTaskDelay 函数延迟 500ms 后再继续执行。通过这两个函数,我们可以灵活地控制任务之间的时间间隔,实现多任务并发执行。


注意:vTaskDelayUntil(&xLastWakeTime, xDelay);他延时完后,会自动更新xLastWakeTime,所以我们只需要在while循环初始化一下xLastWakeTime就行了。


总结


任务管理是 FreeRTOS 提供的一个强大功能,它允许开发者以并发的方式组织和管理多个任务。通过任务的创建、删除、挂起、恢复和优先级控制等操作,开发者可以灵活地控制任务的执行顺序和调度策略,从而实现复杂的系统功能。任务通信与同步机制进一步增强了任务的协同工作能力,使任务之间能够高效地共享数据和协调操作。借助 FreeRTOS 提供的任务管理功能,开发者可以更加方便地构建实时嵌入式系统,并具备可靠性和高效性。


需要注意的是,在使用 FreeRTOS 进行任务管理时,开发者需要注意任务的资源管理、优先级设置和调度策略等方面,以确保系统能够稳定地运行,并满足实时性和响应性的要求。

相关文章
|
6月前
|
API 调度
【FreeRTOS】软件定时器的使用
【FreeRTOS】软件定时器的使用
158 0
|
传感器 调度 开发者
【Freertos基础入门】freertos任务的优先级
【Freertos基础入门】freertos任务的优先级
491 0
|
4月前
STM32Cubmx FreeRTOS Timer
STM32Cubmx FreeRTOS Timer
47 10
|
4月前
STM32Cubemx FreeRTOS Event
STM32Cubemx FreeRTOS Event
37 11
|
5月前
|
消息中间件 算法 编译器
【FreeRTOS(一)】FreeRTOS新手入门——初识FreeRTOS
【FreeRTOS(一)】FreeRTOS新手入门——初识FreeRTOS
|
5月前
|
传感器 物联网 调度
从0入门FreeRTOS之第一节 什么是FreeRTOS?
FreeRTOS(Free Real-Time Operating System)是一款开源的实时操作系统(RTOS),专为嵌入式系统设计。由Real Time Engineers Ltd.开发和维护,FreeRTOS以其小巧、高效、易于使用的特点广受欢迎。FreeRTOS支持多种微控制器和微处理器平台,提供丰富的实时操作系统功能,使开发者能够轻松构建高效、实时响应的应用程序。
331 0
|
6月前
|
API 调度 芯片
FreeRTOS 延时函数和软件定时器 详解
FreeRTOS 延时函数和软件定时器 详解
FreeRTOS 延时函数和软件定时器 详解
|
6月前
|
算法 调度
FreeRTOS入门教程(任务优先级,Tick)
FreeRTOS入门教程(任务优先级,Tick)
526 0
|
6月前
|
数据采集 API 数据处理
FreeRTOS入门教程(软件定时器)
FreeRTOS入门教程(软件定时器)
176 0
|
6月前
|
存储 消息中间件 API
FreeRTOS深入教程(软件定时器源码分析)
FreeRTOS深入教程(软件定时器源码分析)
223 0