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