1. 程式人生 > >sylixos定時器使用

sylixos定時器使用

錯誤 以及 adding creat justify cpc round list bsp

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


sylixos定時器使用