FreeRTOS时间管理--两个延时列表分析

FreeRTOS的任务调度一般使用系统滴答时钟,每次系统节拍时钟发生中断后加1,用来记录系统节拍时钟中断的次数,内核会将所有阻塞的任务跟这个变量比较,以判断是否超时,若超时意味着等待时间到达,可以执行。

变量xTickCount的数据类型跟具体硬件有关,32位架构硬件一般是无符号32位变量、8位或16位架构一般是无符号16位变量。即便是32位变量,xTickCount累加到0xFFFFFFFF后也会溢出。因此,在程序中要判断变量xTickCount是否溢出。如果溢出(xTickCount为0),则调用宏taskSWITCH_DELAYED_LISTS()交换延时列表指针和溢出延时列表指针。

taskSWITCH_DELAYED_LISTS()                          
{                                                                                                   
    List_t *pxTemp;                                                                                 

    configASSERT( ( listLIST_IS_EMPTY( pxDelayedTaskList ) ) );                                     

    pxTemp = pxDelayedTaskList;                                                                     
    pxDelayedTaskList =
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeRTOS中的SysTick延时是一种基于系统时钟的延时机制。SysTick定时器是一个硬件定时器,用于产生系统节拍。它可以被用来创建精确的延时时间测量。 在FreeRTOS中,有两种类型的SysTick延时函数可供使用:相对延时和绝对延时。相对延时使用vTaskDelay函数,它接受一个参数xTicksToDelay,表示要延时的SysTick数目。这种延时方式是相对于当前任务的时间来计算的,它会暂停当前任务的执行,并将任务加入到延时队列中等待指定的SysTick数目后再次运行。 另一种是绝对延时,使用vTaskDelayUntil函数。它接受两个参数pxPreviousWakeTime和xTimeIncrement。pxPreviousWakeTime表示要延时起始的SysTick时刻,xTimeIncrement表示相对起始时刻的时间间隔。这种延时方式允许任务按照固定的时间间隔执行,可以用于周期性任务的调度。 需要注意的是,SysTick延时函数只能在FreeRTOS任务中使用,不能在中断服务程序(ISR)中使用。此外,SysTick定时器的配置需要在FreeRTOSConfig.h文件中进行设置。 总结起来,FreeRTOS中的SysTick延时是通过使用定时器服务任务和定时器命令队列来实现的,提供了相对延时和绝对延时两种方式,可用于实现精确的任务调度时间控制。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [FreeRTOS学习(六)时间管理](https://blog.csdn.net/la_fe_/article/details/114880371)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [浅析 FreeRTOS SysTick 和任务延时](https://blog.csdn.net/wangyx1234/article/details/127311949)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值