vTaskDelay() 相对延时函数

vTaskDelay()延时固定数量的tick中断,将调用任务置于阻塞状态。(vTaskDelay() 函数只有在宏 INCLUDE_vTaskDelay 置1时才可用

void vTaskDelay( TickType_t xTicksToDelay );

参数作用:如果一个任务调用函数vTaskDelay(100),此时滴答中断计数为10000,然后它将立即进入阻塞状态,并保持阻塞状态直到滴答中断计数达到10100

宏pdMS_TO_TICKS()可用于将以毫秒为单位指定的时间转换为以ticks为单位指定的时间。例如,调用vTaskDelay(pdMS_TO_TICKS(100))将使任务保持阻塞状态100毫秒。

宏定义#define     pdMS_TO_TICKS( xTimeInMs )       ( ( TickType_t ) ( ( ( TickType_t ) ( xTimeInMs ) * ( TickType_t ) configTICK_RATE_HZ ) / ( TickType_t ) 1000 ) )
宏定义 #define    configTICK_RATE_HZ                       (1000)           //时钟节拍频率,这里设置为1000,滴答定时器中断周期就是1ms

FreeRTOS 的系统时钟是由滴答定时器提供的,应根据 FreeRTOS 的系统时钟节拍来初始化滴答定时器。 FreeRTOS 的系统时钟节拍由宏 configTICK_RATE_HZ 来设置,这个值可自由设置,但是一旦设置好以后就要根据这个值来初始化滴答定时器,其实就是设置滴答定时器的中断周期。

当任务处于阻塞状态时,它不占用CPU。
定义:每次延时从任务执行vTaskDelay()函数时开始,延时一定的时间结束。

设定:TSET任务的优先级最高

TEST任务延时都是从调用延时函数vTaskDelay()开始算起的,延时从此刻算起,执行TEST任务过程中产生中断或执行更高优先级任务时,两次TEST任务之间的时间周期会变长,TSET任务无法周期性地执行!

void vTaskFunction( void *pvParameters )
{char *pcTaskName;const TickType_t xDelay250ms = pdMS_TO_TICKS( 250 );  //定义延时时长/*要打印的字符串通过指针传入,因此将其转换为字符指针*/pcTaskName = ( char * ) pvParameters;for( ;; ){vTaskDelay( xDelay250ms );  //调用延时,时长250msvPrintString( pcTaskName ); //打印字符串}
}

绝对延时函数vTaskDelayUntil()

定义:每隔指定的一段时间,执行一次调用vTaskDelayUntil()函数的任务

void vTaskDelayUntil( TickType_t * pxPreviousWakeTime, TickType_t xTimeIncrement );
  • 参数:pxPreviousWakeTime 该参数保存此任务最后一次离开阻塞态(即延时结束被唤醒)的时间点,任务中第一次调用函数vTaskDelayUntil 的话需要将 pxPreviousWakeTime 初始化为在进入while循环之前的滴答计数值。在以后的运行中函数 vTaskDelayUntil()会自动更新 pxPreviousWakeTime 的值。

    void vTaskFunction( void *pvParameters )
    {char *pcTaskName;TickType_t xLastWakeTime;pcTaskName = ( char * ) pvParameters;xLastWakeTime = xTaskGetTickCount();  //初始化为进入while之前的滴答计数值while(1){vTaskDelayUntil( &xLastWakeTime, pdMS_TO_TICKS( 250 ) );  //延时vPrintString( pcTaskName );}
    }
    
  • xTimeIncrement 定期延时的时长,同vTaskDelay() API的函数参数用法相同。

设置:TSET任务具有最高优先级!

从第一次上电调用绝对延时函数起,首先执行其他任务,然后TEST任务主体周期性地执行,即使在执行TEST任务过程中发生中断,也不会影响TEST任务的执行周期,但会缩短其他任务的执行时间。(注意:周期性延时时间必须大于任务主体代码执行时间,才会将任务挂接到延时列表)

FreeRTOS延时函数相关推荐

  1. FreeRtos延时函数delay_us()

    时钟72MHZ,递减一次需要10^6/72MHZ 微秒,注意!!!是微秒, 若要延迟1微秒,时钟就需要递减72MHZ/10^6次,又因为fac_us为72MHZ/10^6,所以延时n us 即令tic ...

  2. 【11】FreeRTOS的延时函数

    目录 1.延时函数-介绍 2.相对延时函数-解析 2.1函数`prvAddCurrentTaskToDelayedList`-解析 2.3滴答定时器中断服务函数`xPortSysTickHandler ...

  3. FreeRTOS一天一个小知识之任务延时函数vTaskDelay

    想必各位嵌入式工程师对于Delay延时函数再也熟悉不过了~ 但对于各位刚入RTOS的小白来说,有操作系统的延时函数,真的和裸机中的延时函数一样吗?FreeRTOS的任务调度是怎么调度的?如何分配系统的 ...

  4. FreeRTOS任务延时函数

    系统提供了两个任务延时函数:相对延时函数vTaskDelay()和绝对延时函数vTaskDelayUntil() 相对延时是指:vTaskDelay()开始执行到退出执行的时间固定 /* 相对延时函数 ...

  5. 嵌入式开发(7)系统定时器(SysTick)之延时函数运用

    目录 一.系统定时器 1. 简介 2.工作原理 3.频率的概念 二.库函数SysTick定时器操作 系统定时器配置 三.寄存器SysTick定时器操作 1.系统定时器的用途 2.寄存器 3.官方示例 ...

  6. NO.2 QN9021 延时函数

    本章主要讲解的是QN9021在使用过程中经常使用到的延时函数,由于咱们这颗蓝牙SoC没有SystemTick这个功能,所以就不能使用系统节拍来作为准确的延时工具,这里我推荐的是使用定时器时钟来作为基本 ...

  7. c语言随机数生成0 99函数,C语言生成随机数的函数、延时函数

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 下面C语言代码使用了生成随机数的函数.延时函数.请大家仔细观察其显示效果. 从以下代码,我们可以得出一个重要的结论:当上述两类函数被放入循环时,应作出一定 ...

  8. 延时函数介绍和呼吸灯的实现

    文章目录 延时函数介绍 呼吸灯原理 杨桃32学习笔记,本文图片文字皆为转述 延时函数介绍 分为delay_s秒,delay_ms毫秒,delay_us微秒延时,最大参数不能超过65535. 呼吸灯原理 ...

  9. Linux Shell中的延时函数

    Linux Shell中的延时函数 在 linux shell 脚本中经常需要做一些延时处理. 所以经常要用到 sleep 或 usleep 函数. 下面来说一下  sleep 和 usleep 的区 ...

最新文章

  1. 开3389后不能登录的六种原因
  2. ML之catboost:基于自定义数据集利用catboost 算法实现回归预测(训练采用CPU和GPU两种方式)
  3. SAP UI5 的本地 Fiori sandbox Launchpad
  4. django 1.8 官方文档翻译:14-1 按需内容处理
  5. rocketmq消息持久化到mysql_RocketMQ之事务消息
  6. 弃用数据库自增ID,曝光一下我自己用到的解决方法之---终结篇
  7. android图标成功,Android多启动图标实现
  8. SpringBoot实战(九)之Validator
  9. 简单说 !![]==true 与 []==true 引发的思考
  10. 遥感水文前景_遥感水文
  11. dinic算法 c 语言,网络流Dinic算法详解及模板
  12. win10系统迁移后系统重装_怎样将Win10系统转移到SSD固态硬盘
  13. 开关电源基本工作原理
  14. 百度、高德、谷歌、火星、wgs84(2000)地图坐标相互转换的JS实现
  15. 第二届全国中学生网络安全竞赛线上 writeup
  16. 计算机solidwork实训报告,SolidWorks实训报告.doc
  17. 使用Inno Setup软件直接给安装程序和卸载程序加数字签名
  18. SLAM——之Sophus函数库
  19. H265 HEVC 协议文档第4章缩写词及其含义翻译
  20. SpringBoot-quartz配置页面可视化任务调度

热门文章

  1. 凌科芯安软件加密锁论手机APP智能产品安全
  2. 再谈马云的一淘“要让百度睡不着”
  3. [UWP]如何使用Fluent Design System (上)
  4. 宠物精灵2-卡片类连连看游戏
  5. 15拆分成3个不同的自然数_小学二年级奥数训练题之分拆
  6. JBuilder使用心得和小技巧
  7. BRIAN中的STDP示例
  8. 容量法和库仑法的异同点_容量、库仑、点位滴定法的比较
  9. 程序员多久才能在北京买房子?百练OJ:4022:买房子
  10. python已安装这个产品的另一个版本_电脑安装会声会影过程中提示已安装这个产品的另一个版本怎么解决...