freertos的时基
时间: 2025-01-04 09:32:38 浏览: 8
### FreeRTOS 中时基的概念
FreeRTOS 的时基(tick)是一个周期性的中断源,通常由硬件定时器提供。这个定时器每经过一定的时间间隔就会触发一次中断,在每次中断期间操作系统会执行一些必要的维护操作,比如更新时间片计数、处理延迟队列等。
对于 FreeRTOS 而言,时基主要用于以下几个方面:
- 实现任务间的调度机制;
- 支持基于时间的操作函数,如 `vTaskDelay()` 和 `xQueueReceive()`;
- 维护系统的实时性特征;
由于 systick 定时器具有较低的优先级[^4],因此当其他更高优先级的事件发生时可以打断它来响应更紧急的任务需求。
### 时基实现及配置方法
为了使 FreeRTOS 正常工作,开发者需要完成以下几项配置:
#### 设置 Tick Rate (频率)
Tick rate 表示每秒钟产生的 tick 数量,默认情况下一般设定为 100 或者 1000 Hz, 即意味着每隔 10 ms 或 1ms 就会产生一个新的 tick 。此参数通过修改 `configTICK_RATE_HZ` 来调整:
```c
#define configTICK_RATE_HZ ((TickType_t)100)
```
上述代码片段表示每秒产生 100 次 ticks ,即每个 tick 时间长度大约等于 10毫秒[^1]。
#### 初始化 Systick Timer
初始化 systick 计时器的过程取决于具体的微控制器平台以及所使用的开发环境。下面给出了一种通用的方式来进行初始化:
```c
void vApplicationSetupTimerInterrupt(void){
SysTick_Config(SystemCoreClock / configTICK_RATE_HZ);
}
```
这段 C 语言代码实现了对系统滴答定时器(SysTick timer) 的配置,其中 SystemCoreClock 获取 CPU 主频而 configTICK_RATE_HZ 则决定了所需的滴答率。
需要注意的是,如果应用程序已经启用了 HAL 库中的自动滴答功能,则可能不需要再单独调用该函数。
#### 处理 Tick Interrupt Handler
每当一个新 tick 发生时都会进入相应的中断服务程序(ISR),在此处应该调用 FreeRTOS 提供的标准 API 函数 portYIELD_FROM_ISR(), 进行上下文切换或其他必要处理:
```c
void SysTick_Handler(void){
/* Increment the RTOS tick count */
if(xTaskIncrementTick()!=pdFALSE){
/* Context switch required */
portYIELD();
}
}
```
以上就是关于如何在 FreeRTOS 下设置和使用时基的相关介绍[^3]。
阅读全文