时钟实例函数可以在一定计时完成后被重新调用。时钟实例既是一次性的也是周期性的。一旦创建,就立刻执行。或者配制成进过一段的延时之后才开始的。他们能够在任何时候被禁止。所有的时钟例子都可以被执行当他们在软件中断溢出时。
最小分辨率是RTOS时钟周期被设置在RTOS配置文件中。
/* 10 us tick period */
Clock.tickPeriod = 10;
每次计时,均来至于RTC计时器。
下面是相关的时钟API函数:
/*********************************************************************
* @fn Util_constructClock
*
* @brief Initialize a TIRTOS Clock instance.
*
* @param pClock - pointer to clock instance structure.
* @param clockCB - callback function upon clock expiration.
* @param clockDuration - longevity of clock timer in milliseconds
* @param clockPeriod - duration of a periodic clock, used continuously
* after clockDuration expires.
* @param startFlag - TRUE to start immediately, FALSE to wait.
* @param arg - argument passed to callback function.
*
* @return Clock_Handle - a handle to the clock instance.
*/
extern Clock_Handle Util_constructClock(Clock_Struct *pClock,
Clock_FuncPtr clockCB,
uint32_t clockDuration,
uint32_t clockPeriod,
uint8_t startFlag,
UArg arg);
实际使用时,是这个样子的:
Util_constructClock(&periodicClock, SimpleBLEPeripheral_clockHandler,
SBP_PERIODIC_EVT_PERIOD, 0, true, SBP_PERIODIC_EVT);
定义一个定时执行的定时器,一般来说,有什么需要周期执行的任务,可以添加到定时事件里面去执行。&periodicClock主要是分配一个时钟事件地址。可以这样定义static Clock_Struct periodicClock; SimpleBLEPeripheral_clockHandler是关于信号量传递的一个回调函数,这个必须有,不需用改动,工程中有,可直接调用。SBP_PERIODIC_EVT_PERIOD定义多久执行这个事件,一般不要太频繁。0这个可以为任意值,当为零时,当再次执行时需要再次启动时钟,当事件执行后需要重新开启定时器,用Util_startClock(Clock_Struct *pClock)函数启动。如果不为零,可以周期性执行,周期多少,取决于本值的设定。如果要改变事件的执行周期,则可以调用Util_rescheduleClock(Clock_Struct *pClock, uint32_t clockPeriod)函数。如果要停止时钟可以调用Util_stopClock(Clock_Struct *pClock)函数。
|