void vTaskDelay( const TickType_t xTicksToDelay )这个函数比较简单,主要分析prvAddCurrentTaskToDelayedList这个函数。

FreeRTOS-延迟分析vTaskDelay

①:将该任务挂到延迟列表里面。

分析:

static void prvAddCurrentTaskToDelayedList( TickType_t xTicksToWait, const BaseType_t xCanBlockIndefinitely )

FreeRTOS-延迟分析vTaskDelay

①:把当前任务从就序列表中删除

FreeRTOS-延迟分析vTaskDelay

①:获取下次任务的唤醒时间

②:将唤醒时间赋给任务列表的状态列表项中

③:如果下次唤醒时间小于当前时间,则表示时间溢出,把该任务添加到溢出延迟列表中

④:如果没有溢出,就把该任务添加到延迟列表中。

⑤:如果该任务唤醒的时间小于下次任务的阻塞时间,则把该任务的唤醒时间赋值给任务阻塞时间。

因此通过上述分析,

    任务函数通过调用vTaskDelay( const TickType_t xTicksToDelay ),任务的延时周期是函数运行的时间加Delay的时间。因为函数不是按照一定的周期运行的。

 

相关文章:

  • 2021-09-15
  • 2019-12-13
  • 2022-01-09
  • 2021-10-20
  • 2021-12-25
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-07-05
  • 2022-12-23
  • 2021-11-28
  • 2022-12-23
  • 2022-03-06
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案