二十八、freertos软件定时器API



  1. 软件定时器主要API:

    需要把 FreeRTOS/source/times.c 这个 C 文件添加到工程中。
    需要设置 FreeRTOSConfig.h中的宏定义 configUSE_TIMERS 设置为 1 。
    在头文件FreeRTOSConfig.h 中把宏 configSUPPORT_DYNAMIC_ALLOCATION 均定义为 1(默认定义为 1)。
    使用如下 20 个函数可以实现 FreeRTOS 的定时器组:

xTimerCreate()xTimerCreateStatic()xTimerIsTimerActive()xTimerStart()xTimerStop()xTimerChangePeriod()xTimerDelete()xTimerReset()xTimerStartFromISR()xTimerStopFromISR()xTimerChangePeriodFromISR()xTimerResetFromISR()pvTimerGetTimerID()vTimerSetTimerID()xTimerGetTimerDaemonTaskHandle()xTimerPendFunctionCall()xTimerPendFunctionCallFromISR()pcTimerGetName()xTimerGetPeriod()xTimerGetExpiryTime()

  1. 软件定时器创建函数 xTimerCreate()
函 数 原 型 :
TimerHandle_t xTimerCreate(const char * const pcTimerName,  (1)
			const TickType_t xTimerPeriodInTicks, 			(2)
			const UBaseType_t uxAutoReload,  				(3)
			void * const pvTimerID,  						(4)
			TimerCallbackFunction_t pxCallbackFunction )	(5)  
功 能	:	 
参 数	:(1)软件定时器名字,文本形式,纯粹是为了调试, 使用定时器是通过其句柄,而不是使用其名字。
		(2)软件定时器的周期,单位为系统节拍周期(即 tick)。
		(3)如果 uxAutoReload 设置为 pdTRUE,就是周期模式.设置为 pdFALSE,一次后就进入休眠态.
		(4)软件定时器 ID, 数字形式,在回调函数里面根据 ID 号来处理不同的软件定时器。
		(5)软件定时器的回调函数,该函数需要用户自己实现。
返 回 值:创建成功则返回一个句柄,不成功则返回 NULL。

  1. 软件定时器启动函数
1) xTimerStart()
函 数 原 型:  
#define xTimerStart( xTimer, xTicksToWait ) \
		xTimerGenericCommand( ( xTimer ), \
		tmrCOMMAND_START, \				 
		( xTaskGetTickCount() ), \		 
		NULL, \							 
		( xTicksToWait ) ) 				 
功 能	:	 开启定时器
参 数	: 
		--xTimer 要操作的软件定时器句柄。
		--xTicksToWait 用户指定超时阻塞时间,启动成功前最大等待时间。
返 回 值:
			
2) xTimerStartFromISR()
函 数 原 型:  
#define xTimerStartFromISR( xTimer, pxHigherPriorityTaskWoken )
			xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START_FROM_ISR,
			( xTaskGetTickCountFromISR() ),
			( pxHigherPriorityTaskWoken ), 0U )
功 能	:	在中断中启动一个软件定时器。 
参 数	:-- xTimer 软件定时器句柄。
	   --pxHigherPriorityTaskWoken 用于保存是否需要上下文切换,为pdTRUE表示在中断退出之前要上下文切换。
返 回 值:成功发送则返回pdPASS ,失败返回pdFAILE

  1. 软件定时器停止函数
    1). xTimerStop()
函 数 原 型:  
BaseType_t xTimerStop( TimerHandle_t xTimer, TickType_t xBlockTime );
功 能	:	 停止一个软件定时器, 让其进入休眠态。
参 数	: 
	--xTimer 软件定时器句柄。
	--xBlockTime 用户指定超时时间, 单位为系统节拍周期(即 tick)。 
返 回 值:命令成功发送则返回pdPASS ,失败返回pdFAILE

2). xTimerStopFromISR()

函 数 原 型: 
BaseType_t xTimerStopFromISR(TimerHandle_t xTimer,
					BaseType_t *pxHigherPriorityTaskWoken); 
功 能	:	在中断中停止一个软件定时器, 让其进入休眠态。 
参 数	: xTimer 软件定时器句柄。
		   --pxHigherPriorityTaskWoken 用于保存是否需要上下文切换,为pdTRUE表示在中断退出之前要上下文切换。
返 回 值:命令成功发送则返回pdPASS ,失败返回pdFAILE

  1. 函数 pvTimerGetTimerID
函 数 原 型:  
void *pvTimerGetTimerID( TimerHandle_t xTimer ); /* 定时器句柄 */
功 能	:	 函数 pvTimerGetTimerID 用于返回使用函数 xTimerCreate 创建的软件定时器 ID。
参 数	: 第 1 个参数是定时器句柄。
返 回 值: 返回值,返回定时器 ID。

  1. 软件定时器删除函数 xTimerDelete()
函 数 原 型:  #define xTimerDelete( xTimer, xTicksToWait )
	   						xTimerGenericCommand( ( xTimer ),
	   						tmrCOMMAND_DELETE,
	   						0U, NULL, ( xTicksToWait ) )
功 能	:	删除一个已经被创建成功的软件定时器。 
参 数	: xTimer 软件定时器句柄。
	   	--xTicksToWait 用户指定的超时时间, 单位为系统节拍周期(即 tick)。
返 回 值:如果删除命令在超时时间之前无法成功地发送到定时器命令队列则返回 pdFAILE,成功发送则返回 pdPASS。
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐