1.1FreeRTOS 的时钟节拍
时钟节拍是特定的周期性中断,这个中断可以看做是系统心跳。
一般是 1ms – 100ms
滴答定时器 Systick SysTick 定时器被捆绑在 NVIC 中,用于产生 SysTick 异常(异常号:15),滴答定时器是一个 24 位 的递减计数器,支持中断。使用比较简单,专门用于给操作系统提供时钟节拍。
#define configTICK_RATE_HZ ( ( TickType_t ) 1000 ) 如上所示的宏定义配置表示系统时钟节拍是 1KHz,即 1ms。
1.2FreeRTOS 的时间管理
时间管理功能是 FreeRTOS 操作系统里面最基本的功能
1.2.1时间延迟
延迟函数主要有以下两个作用:
- 为周期性执行的任务提供延迟。
对于抢占式调度器,让高优先级任务可以通过时间延迟函数释放 CPU 使用权,从而让低优先级任务 可以得到执行。
1.2.2时间相关函数
- vTaskDelay (const TickType_t xTicksToDelay)
- 参数 xTicksToDelay 用于设置延迟的时钟节拍个数,范围 1- 0xFFFFFFFF。
- 延迟时间的最大值在 portmacro.h 文件里面有定义: typedef uint32_t TickType_t; #define portMAX_DELAY ( TickType_t )0xffffffffUL 即延迟时间的范围是:1- 0xFFFFFFFF
- vTaskDelayUntil (TickType_t *pxPreviousWakeTime, const TickType_t xTimeIncrement)
- 绝对的时间
- 第 1 个参数,存储任务上次处于非阻塞状态时刻的变量地址。
- 第 2 个参数,周期性延迟时间。
/* 获取当前的系统时间 */
xLastWakeTime = xTaskGetTickCount();
vTaskDelayUntil(&xLastWakeTime, 200);
- xTaskGetTickCount(void)
此函数用于在任务代码里面调用,如果在中断服务程序里面调用的话,需要使用函数 xTaskGetTickCountFromISR,这两个函数切不可混用。
- xTaskGetTickCountFromISR(void)
1.2.3函数 vTaskDelay 和 vTaskDelayUntil 的区别
delay是时间相加,delayuntil是整段时间就这么多。
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
走着的小站
本文地址: freertos学习笔记六之系统时钟节拍和时间管理
本文地址: freertos学习笔记六之系统时钟节拍和时间管理