FreeRTOS API使用栗子

二值信号量

  1. 创建句柄
  2. 创建信号量
  3. 等待获取信号量
  4. 释放信号量
SemaphoreHandle_t BinaryStartSemaphore;	//创建二值信号量句柄
BinaryStartSemaphore = xSemaphoreCreateBinary();//创建信号量

void Control_Task(void)
{
	while(1)
	{
		if(条件)
		xSemaphoreGive(BinaryStartSemaphore);//释放信号量
	}
}

void task01(void)
{
	while(1)
	{
		xSemaphoreTake(BinaryStartSemaphore,portMAX_DELAY);	//获取开始信号量
		/*do something*/
	}
}

软件定时器:

#define NUM_TIMERS 1//同时定义多个

TimerHandle_t xTimers_Handle[ NUM_TIMERS ];     //创建软件定时器句柄

xTimers_Handle[0]    = xTimerCreate((const char*            )"xTimer0",//创建软件定时器
                                        (TickType_t             )1000,//定时时间,1000个时钟周期
                                        (UBaseType_t            )pdTRUE,//周期触发
                                        ( void *                )0,
                                        (TimerCallbackFunction_t)TreatTime_Count);//回调函数
if(条件)
{
	xTimerStart(xTimers_Handle[0],0);   //开启周期定时器,治疗时间到计数
}

if(条件)
{
	xTimerStop(xTimers_Handle[0],0);        //关闭单次定时器,关闭治疗时间到计数
}

void TreatTime_Count(void *pvParameters)
{
	//do something...
}
posted @ 2020-11-13 10:34  火红色祥云  阅读(21)  评论(0编辑  收藏  举报