freertos学习笔记——第二章、任务调度——时间管理

2.4 freertos时间管理

2..4.1 设置时钟节拍

时钟节拍是系统的心跳,也是最小的时间单元。freertos的时间节拍由systick提供。

//在FreeRTOSConfig.h 中设置
//时钟节拍是1ms
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 ) 

2.4.2时间相关函数

vTaskDelay:相对延时 。实际项目中经常会常用

vTaskDelayUntil:绝对延时

xTaskGetTickCount:获得当前系统运行的节拍数 。实际项目中经常会常用

xTaskGetTickCountFromISR:在中断服务程序中获得系统运行节拍数

2.4.2.1 vTaskDelay

相对延时vTaskDelay。等待时间相当于阻塞,会执行其它任务。


void task_test(void* pvParameters)
{
  while(1)
  {
    printf("绝对延时\r\n");
    vTaskDelay(100);//大多数情况下任务中都要有这个,让任务处于阻塞态让其它任务执行 
  }
}

大多数的延时是用这个。但精度不高可能会存在几个节拍的误差。

2.4.2.2 vTaskDelayUntil

绝对延时vTaskDelayUntil,等待时间相当于阻塞但优先级最高,一旦时间到马上开始执行。

void vTaskDelayUntil( TickType_t *pxPreviousWakeTime, 
const TickType_t xTimeIncrement );
//使用示例
void task_test(void* pvParameters)
{
  TickType_t   LastTime; 
  xLastWakeTime = xTaskGetTickCount();//获得系统当前运行的时间  
  //在中断中使用 xTaskGetTickCountFromISR 获得运行时间
  while(1)
  {
    printf("绝对延时\r\n");
    vTaskDelayUntil(&LastTime, 100); 
  }
}


*/ 
static void vTaskLED(void *pvParameters) 
{ 
TickType_t xLastWakeTime; 
const TickType_t xFrequency = 200; 
/* 获取当前的系统时间 */ 
 xLastWakeTime = xTaskGetTickCount(); 
 while(1) 
 { 
bsp_LedToggle(2); 
/* vTaskDelayUntil 是绝对延迟,vTaskDelay 是相对延迟。*/ 
 vTaskDelayUntil(&xLastWakeTime, xFrequency); 
 } 
} 

2.4.2.3 xTaskGetTickCount()

获得系统当前运行的节拍数。

函数原型:volatile TickType_t xTaskGetTickCount( void );

应用示例:

void task_test(void* pvParameters)
{
TickType_t start_time;
while(1)
{
  if((flag==1)&&(TaskGetTickCount()-start_time>3000))
  {
  ......................................
  }
  else if(flag==0)
  {
    start_time =TaskGetTickCount();
  }
   vTaskDelay(100);
}
}

2.4.2.4 小结

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星期天电子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值