sylixos定时器使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
");
}

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
");
        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
");
        API_TimerDelete(&timerFd);
        return  (PX_ERROR);
    }

    while (1);

    return  (ERROR_NONE);
}

    在虚拟器上运行程序,结果如程序清单 3.2所示。

程序清单 3.2  运行结果

[[email protected]:/root]# /apps/testApp/testApp
this is a timer
this is a timer
this is a timer
this is a timer
this is a timer
...


以上是关于sylixos定时器使用的主要内容,如果未能解决你的问题,请参考以下文章

SylixOS定时器测试误差分析

SylixOS钩子函数浅析

SylixOS高精度时钟分析

SylixOS Zynq平台私有中断绑定

SylixOS 系统Tick实现

SylixOS 系统Tick实现