タイマ
タイマ APIでは、システム起動からの経過時間の取得、およびタイマの登録/解除ができます。
タイマで登録した関数は、コアサービスが内部で所有しているスタックを使用して、SVCモードで呼び出されます。
API
タイマ関連のAPIを使用するには、solid_timer.h をインクルードしてください。
#include "solid_timer.h"
タイマタイプ
SOLID_TIMER_HANDLER
-
typedef struct _SOLID_TIMER_HANDLER_ SOLID_TIMER_HANDLER
説明
タイマ登録用ハンドラ
定義
typedef struct _SOLID_TIMER_HANDLER_ { struct _SOLID_TIMER_HANDLER_ *pNext; struct _SOLID_TIMER_HANDLER_ *pCallQ; unsigned long nextticks; unsigned long toticks; int type; unsigned long time; void (*func)(void*, SOLID_CPU_CONTEXT*); void* param; } SOLID_TIMER_HANDLER;
メンバー
- pNext
SOLID側で使用
- pCallQ
SOLID側で使用
- nextticks
SOLID側で使用
- toticks
SOLID側で使用
- type
- time
タイマ通知をする時間(usec)
- func
タイマ通知時に呼び出される関数
- param
タイマ通知時に呼び出される関数のパラメータ
SOLID_TIMER_GetCurrentTick
-
unsigned long long SOLID_TIMER_GetCurrentTick()
タイマの現在の経過tickを取得します
- 戻り値:
現在のtick値
SOLID_TIMER_ToUsec
-
unsigned long long SOLID_TIMER_ToUsec(unsigned long long ticks)
tick値から時間(usec)に変換します
- パラメータ:
ticks -- tick値
- 戻り値:
変換した時間(usec)
SOLID_TIMER_RegisterTimer
-
int SOLID_TIMER_RegisterTimer(SOLID_TIMER_HANDLER *pHandler)
タイマを登録します
- パラメータ:
pHandler -- 登録するタイマの情報(関数呼び出し後も保持する必要があります)
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_TIMER_UnRegisterTimer
-
int SOLID_TIMER_UnRegisterTimer(SOLID_TIMER_HANDLER *pHandler)
タイマの登録を解除します
ワンショットタイマの場合、自動的に解除されますのでこの関数を呼び出す必要はありません
- パラメータ:
pHandler -- 登録時に使用したタイマの情報
- 戻り値:
SOLID_ERR_OK
: 正常終了それ以外: エラー
SOLID_TIMER_WaitNsec
-
void SOLID_TIMER_WaitNsec(unsigned long nsec)
指定された時間(nsec)以下を待ちます(ビジーループ)
- パラメータ:
nsec -- 待ち時間
SOLID_TIMER_GetTicksPerSec
-
unsigned long SOLID_TIMER_GetTicksPerSec(void)
1秒当たりのtick数を取得
- 戻り値:
1秒当たりのtick数
SOLID_TIMER_GetMaxTicks
-
unsigned long long SOLID_TIMER_GetMaxTicks(void)
タイマで設定可能な最長時間(tick)を取得
: return : タイマで設定可能な最大tick値
SOLID_TIMER_GetMaxTimerTime
-
unsigned long long SOLID_TIMER_GetMaxTimerTime(void)
タイマで設定可能な最長時間(us)を取得
: return : タイマで設定可能な最長時間(us)
SOLID_TIMER_Suspend
-
void SOLID_TIMER_Suspend(void)
タイマの一時停止
省電力等により、タイマを一時停止する場合に呼び出してください。この呼び出しにより、タイマの一時停止および使用している割り込みの無効化を行います。
SOLID_TIMER_Resume
-
void SOLID_TIMER_Resume(void)
タイマの再開
省電力等により、タイマを再開する場合に呼び出してください。この呼び出しにより、タイマの再開および使用している割り込みの有効化を行います。
タイマの要実装関数
SOLIDのタイマは、1つのハードウェアタイマで動作しますが、誤差を軽減するためにフリーランのカウンタを別に用意すること( SOLID_USE_GLOBALTICK
)で、より精度の高いタイマ動作が可能な設計になっています。
タイマ関連の要実装関数の定義は、impl_timer.h にあります。
#include "impl_timer.h"
IMPL_TIMER_INFO
-
typedef struct _IMPL_TIMER_INFO_ IMPL_TIMER_INFO
説明
タイマ情報の構造体
定義
typedef struct _IMPL_TIMER_INFO_ { unsigned long tickspersec; unsigned long maxticks; int intno; int priority; int config; } IMPL_TIMER_INFO;
メンバー
- tickspersec
1秒当たりのtick数
- maxticks
タイマで設定可能な最大tick数
- intno
タイマ発火時の割り込み番号
- priority
タイマの割り込み優先度
- config
タイマの割り込み設定:
SOLID_INTC_HANDLER
参照
IMPL_TIMER_Init
-
void IMPL_TIMER_Init(IMPL_TIMER_INFO *pInfo)
SOLID用のタイマを初期化します
初期化後、
pInfo
にタイマに関する情報を格納してください- パラメータ:
pInfo -- タイマの情報
IMPL_TIMER_GetTimerTick
-
unsigned long IMPL_TIMER_GetTimerTick()
直前の
IMPL_TIMER_SetTimer()
からの経過時間(tick数)を返してください- 戻り値:
経過したtick数
IMPL_TIMER_SetTimer
-
void IMPL_TIMER_SetTimer(unsigned long ticks)
タイマを設定します
設定時間が経過したら、
IMPL_TIMER_Init()
で通知した割り込みを発生させてください- パラメータ:
ticks -- 設定するタイマ値(tick数)
IMPL_TIMER_ClearInterrupt
-
void IMPL_TIMER_ClearInterrupt(void)
タイマの割り込みをクリアします
割込み発生時にタイマ内部の割込みクリア・終了処理が必要な場合は後処理を実装してください
IMPL_TIMER_Suspend
-
void IMPL_TIMER_Suspend(void)
タイマの一時停止
省電力等によりタイマを一時停止する時に呼びだされます。タイマを停止できる場合は、ここで停止処理を行ってください。
IMPL_TIMER_Resume
-
void IMPL_TIMER_Resume(void)
タイマの再開
省電力等によりタイマを再開する時に呼びだされます。タイマを停止した場合は、ここで再開処理を行ってください。
フリーランカウンタの要実装関数
フリーランカウンタの要実装関数の定義は、impl_globaltick.h にあります。
#include "impl_globaltick.h"
IMPL_GLOBAL_TICK_INFO
-
typedef struct _IMPL_GLOBAL_TICK_INFO_ IMPL_GLOBAL_TICK_INFO
説明
フリーランカウンタ情報の構造体
定義
typedef struct _IMPL_GLOBAL_TICK_INFO_ { unsigned long long maxticks; unsigned long long tickspersec; } IMPL_GLOBAL_TICK_INFO;
メンバー
- maxticks
フリーランカウンタで計測可能な最大tick数
- tickspersec
1秒当たりのtick数
IMPL_GLOBAL_TICK_Init
-
void IMPL_GLOBAL_TICK_Init(IMPL_GLOBAL_TICK_INFO *pInfo)
SOLID用のフリーランカウンタを初期化します
ハードウェアをフリーランモード(最大値までカウントしたら0に戻る状態)で初期化し、
pInfo
にフリーランカウンタに関する情報を格納してください- パラメータ:
pInfo -- フリーランカウンタの情報を格納するバッファ
IMPL_GLOBAL_TICK_GetCurrent
-
unsigned long long IMPL_GLOBAL_TICK_GetCurrent(void)
フリーランカウンタの現在のtick値を取得します。
- 戻り値:
現在のtick値
IMPL_GLOBAL_TICK_Suspend
-
void IMPL_GLOBAL_TICK_Suspend(void)
フリーランカウンタの一時停止
省電力等によりタイマを一時停止する時に呼びだされます。フリーランカウンタを停止できる場合は、ここで停止処理を行ってください。
IMPL_GLOBAL_TICK_Resume
-
void IMPL_GLOBAL_TICK_Resume(void)
フリーランカウンタの再開
省電力等によりタイマを再開する時に呼びだされます。フリーランカウンタを停止した場合は、ここで再開処理を行ってください。