跟着韦东山老师FreeRTOS教学资料的学习记录
FreeRTOS全部项目代码链接(更新中)
https://gitee.com/chenshao777/free-rtos_-study
1. 相对延时函数
void vTaskDelay( const TickType_t xTicksToDelay )
TickType_t 实际上是 uint32_t 的宏
如果定时10ms,可以这么写
void Task(void *pvParameters)
{
const TickType_t xDelay_10ms = 10 / portTICK_PERIOD_MS;
for(;;)
{
// ......
// 该任务执行到下面这句,会阻塞10ms
vTaskDelay(xDelay_10ms);
}
}
portTICK_PERIOD_MS 代表一个时间片的时间 , 单位毫秒
portTICK_PERIOD_MS 在 portmacro.h 中有定义
#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ )
configTICK_RATE_HZ 在 FreeRTOSConfig.h 中定义,表示RTOS的系统节拍频率,即1秒内运行的次数,这里是 1000次,即1ms
//RTOS系统节拍中断的频率。即一秒中断的次数,每次中断RTOS都会进行任务调度
#define configTICK_RATE_HZ (( TickType_t )1000)
所以这里 RTOS 的 Tick 是1ms
2. 绝对延时函数
/* 获取当前系统时间 */
void Task(void *pvParameters)
{
/* 获取当前系统时间 */
u32 lastWakeTime = xTaskGetTickCount();
const TickType_t xDelayUntil_10ms = 10 / portTICK_PERIOD_MS;
for(;;)
{
// ......
// 该任务会以每10ms运行一次的频率运行
vTaskDelayUntil(&lastWakeTime, xDelayUntil_10ms); //100Hz(10ms控制一次)
}
}
vTaskDelayUntil 与 vTaskDelay 的区别
-
相对延时是指每次延时都是从任务执行函数vTaskDelay()开始,延时指定的时间结束;
-
绝对延时是指每隔指定的时间,执行一次调用vTaskDelayUntil()函数的任务,即以固定频率运行。
版权声明:本文为HuangChen666原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。