OpenHarmony內核編程接口—介紹定時器管理兩種定時器以及案例演示
前言
本文介紹了內核編程接口之軟定時器
軟定時器
軟定時器含義
軟件定時器(Timer),是基于系統(tǒng)時鐘tick且由軟件來模擬的定時器,當經過設定的tick計數值后會觸發(fā)用戶定義的回調函數。
ps1:定時器觸發(fā)函數的執(zhí)行,不是線程。
ps2:當定時器到期時,將執(zhí)行回調函數以運行特定的代碼。
ps3:定時精度與時鐘周期有關。
ps4:所有定時器都可以啟動、重新啟動或停止。
ps5:每個定時器都可以配置為一次性或周期性定時器。
一次性定時器
一次性定時器指僅執(zhí)行一次操作即停止,不會自動重新啟動。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
周期性定時器
周期性定時器指重復其操作,直到它被刪除或停止。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
API接口介紹
osTimerNew
- 功能:創(chuàng)建并初始化一個定時器。
- 定義:osTimerId_t osTimerNew (osTimerFunc_t func, osTimerType_t type, void *argument, const osTimerAttr_t *attr)。
- 參數:
func :定時器回調函數。
type :定時器類型。osTimerOnce 一次性定時器, osTimerPeriodic 周期性定時器。
argument :定時器回調函數的參數。
attr :定時器屬性。
- 返回值:成功返回定時器id,失敗返回 NULL。
osTimerGetName
- 功能:獲取指定ID的定時器的名稱
- 定義:const char *osTimerGetName(osTimerId_t timer_id)
- 參數:timer_id :定時器 ID ,由 osTimerNew 生成
- 返回值:成功返回定時器的名稱,失敗返回 NULL
osTimerStart
- 功能:啟動或者重啟指定ID的定時器
- 定義:osStatus_t osTimerStart(osTimerId_t timer_id, uint32_t ticks)
- 參數:imer_id :定時器ID,由 osTimerNew 生成
ticks :定時器的間隔 - 返回值:osOK :操作成功
osErrorISR :不能從中斷服務程序中調用
osErrorParameter :參數錯誤
osErrorResource :定時器狀態(tài)無效
osTimerStop
- 功能:停止指定ID的定時器
- 定義:osStatus_t osTimerStop (osTimerId_t timer_id)
- 參數:timer_id :定時器ID ,由 osTimerNew 生成
- 返回值:osOK :操作成功
osErrorISR :不能從中斷服務程序中調用
osErrorParameter :參數錯誤
osErrorResource :定時器不在運行狀態(tài)(只能停止運行態(tài)的定時器)
osTimerIsRunning
- 功能:檢查指定ID的定時器是否在運行
- 定義:uint32_t osTimerIsRunning (osTimerId_t timer_id)
- 參數:timer_id :定時器ID,由 osTimerNew 生成
- 返回值:1 :運行 0 :沒有運行或發(fā)生錯誤
osTimerDelete
- 功能:刪除指定ID的定時器
- 定義:osStatus_t osTimerDelete (osTimerId_t timer_id)
- 參數:timer_id :定時器ID,由 osTimerNew 生成
- 返回值:osOK :操作成功
osErrorISR :不能從中斷服務程序中調用
osErrorParameter :參數錯誤
osErrorResource :定時器狀態(tài)無效
案例演示
目標1:創(chuàng)建一個定時器,每 1 秒調用一次回調函數,回調函數給全局變量 times+1,主線程等待 3 秒,停止并刪除定時器。
準備開發(fā)套件。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
根據路徑,新建文件。
applications\sample\wifi-iot\app\timer_demo\timer.c。
applications\sample\wifi-iot\app\timer_demo\BUILD.gn。
編寫源文件。
必要的頭文件。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
定義全局變量和定時器回調函數。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
創(chuàng)建主線程函數。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
定義入口函數,運行入口函數。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
編寫編譯腳本,注意路徑。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
編譯成功。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
燒錄成功。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
運行成功。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
目標2:創(chuàng)建一個定時器,每 2 秒調用一次回調函數,主線程 1 秒后就停止定時器
根據路徑,新建文件。
applications\sample\wifi-iot\app\timer_demo\timer_once.c。
applications\sample\wifi-iot\app\timer_demo\BUILD.gn。
編寫源文件,定義定時器回調函數。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
創(chuàng)建主線程函數。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
定義運行入口函數。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
修改編譯腳本。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
編譯成功。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
燒錄成功。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)
運行成功。
【OpenHarmony內核編程接口】介紹定時器管理兩種定時器以及案例演示-開源基礎軟件社區(qū)