跟着韦东山老师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 版权协议,转载请附上原文出处链接和本声明。
