SylixOS下定时器使用

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为参数。
2.3 停止定时器

    停止定时器API_TimerCancel函数原型为:

#include <SylixOS.h>
ULONG  API_TimerCancel (LW_OBJECT_HANDLE  ulId);

    API_TimerCancel函数原型分析:

  • 函数执行成功返回ERROR_NONE,执行失败返回错误码;
  • 参数ulId为定时器句柄。
2.4 删除定时器

    删除定时器API_TimerDelete函数原型为:

#include <SylixOS.h>
ULONG  API_TimerDelete (LW_OBJECT_HANDLE  *pulId);

    API_TimerDelete函数原型分析:

  • 函数执行成功返回ERROR_NONE,执行失败返回错误码;
  • 参数pulId为定时器句柄。
3. 使用实例
    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
... 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值