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
...


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章