1. 适用范围
本文档介绍SylixOS下实现定时器功能的方法,使用者应熟悉SylixOS以及SylixOS下的编程规范。
2. 实现方案
SylixOS提供标准定时器接口,用户可在应用层直接调用,下面列出定时器的创建、启动、停止以及删除等操作,除此之外系统还提供如定时器复位、获取定时器状态等操作接口。
2.1 创建定时器
SylixOS下定时器使用实例如程序清单 3.1所示。
本文档介绍SylixOS下实现定时器功能的方法,使用者应熟悉SylixOS以及SylixOS下的编程规范。
2. 实现方案
SylixOS提供标准定时器接口,用户可在应用层直接调用,下面列出定时器的创建、启动、停止以及删除等操作,除此之外系统还提供如定时器复位、获取定时器状态等操作接口。
2.1 创建定时器
创建定时器API_TimerCreate函数原型为:
#include <SylixOS.h>
LW_OBJECT_HANDLE API_TimerCreate (CPCHAR pcName,
ULONG ulOption,
LW_OBJECT_ID *pulId);
API_TimerCreate函数原型分析:
- 函数执行成功返回定时器句柄,执行失败返回0;
- 参数pcName为定时器名称;
- 参数ulOption为定时器类型,SylixOS支持告诉定时器和普通定时器;
- 参数pulId为定时器ID号。
2.2 启动定时器
启动定时器API_TimerStart函数原型为:
#include <SylixOS.h>
ULONG API_TimerStart ( LW_OBJECT_HANDLE ulId,
ULONG ulCounter,
ULONG ulOption,
PTIMER_CALLBACK_ROUTINE cbTimerRoutine,
PVOID pvArg);
API_TimerStart函数原型分析:
- 函数执行成功返回ERROR_NONE,执行失败返回错误码;
- 参数ulId为定时器句柄;
- 参数ulCounter为重复计数初始值;
- 参数ulOption为操作选项;
- 参数cbTimerRoutine为回调函数;
- 参数pvArg为参数。
停止定时器API_TimerCancel函数原型为:
#include <SylixOS.h>
ULONG API_TimerCancel (LW_OBJECT_HANDLE ulId);
API_TimerCancel函数原型分析:
- 函数执行成功返回ERROR_NONE,执行失败返回错误码;
- 参数ulId为定时器句柄。
删除定时器API_TimerDelete函数原型为:
#include <SylixOS.h>
ULONG API_TimerDelete (LW_OBJECT_HANDLE *pulId);
API_TimerDelete函数原型分析:
- 函数执行成功返回ERROR_NONE,执行失败返回错误码;
- 参数pulId为定时器句柄。
SylixOS下定时器使用实例如程序清单 3.1所示。
程序清单 3.1 定时器实例
#include <stdio.h>
#define TIMER_FREQUENCY 100 /* 定时器检测周期 */
static void timerCallBack (void *pvArg)
{
printf("this is a timer\n");
}
Int main (int argc, char **argv)
{
unsigned long ulRet = -1;
timer_t timerFd = 0;
timerFd = API_TimerCreate("timer",
LW_OPTION_ITIMER | LW_OPTION_OBJECT_LOCAL,
LW_NULL); /* 创建定时器 */
if (timerFd == ERROR_NONE) {
printf("timer create failed\n");
return (PX_ERROR);
}
ulRet = API_TimerStart(timerFd,
TIMER_FREQUENCY,
LW_OPTION_AUTO_RESTART,
(PTIMER_CALLBACK_ROUTINE)timerCallBack,
LW_NULL); /* 启动定时器 */
if (ulRet != ERROR_NONE) {
printf("timer start failed\n");
API_TimerDelete(&timerFd);
return (PX_ERROR);
}
while (1);
return (ERROR_NONE);
}
在虚拟器上运行程序,结果如程序清单 3.2所示。
程序清单 3.2 运行结果
[root@sylixos:/root]# /apps/testApp/testApp
this is a timer
this is a timer
this is a timer
this is a timer
this is a timer
...