ToCoNet_Event_vKeepStateOnRamHoldSleep()

解説

スリープ復帰時に指定した状態を保持します。
ユーザ定義イベント処理関数の第一引数 teEvent *pEv に対し pEv->bKeepStateOnSetAll = TRUE をセットします。

引数

名前
詳細
tsEvent *
pEv
ユーザイベント定義関数の管理構造体。

戻り値

なし。

サンプル

処理を行い、条件が満足しなければ短いスリープを実施し、条件が成立したら特定の処理を行う例です。例えばセンサーのAD完了待ちなどを複数回行うような場合です。
1
void cbAppColdStart(bool_t bInit) {
2
if (bInit == FALSE) {
3
...
4
} else {
5
...
6
ToCoNet_Event_Register_State_Machine(vProcessEvCore);
7
}
8
}
9
10
void vProcessEvCore(
11
tsEvent *pEv,
12
teEvent eEvent,
13
uint32 u32evarg) {
14
static bool_t cond;
15
16
switch (pEv->eState) {
17
case E_STATE_IDLE:
18
; // some task
19
ToCoNet_Event_SetState(pEv, E_STATE_APP_RUNNING);
20
break;
21
case E_STATE_APP_RUNNING:
22
/*
23
* 1: 本状態への遷移、E_EVENT_NEW_STATE での処理を行う
24
* 2: cond のチェック、FALSE なら、スリープを実行
25
* TRUE ならE_STATE_APP_TX_REQUEST へ遷移。
26
* 3: スリープからの起床 E_EVENT_START_UP での処理を行い、
27
* 2: の処理を実行
28
*/
29
if (eEvent == E_EVENT_NEW_STATE) {
30
// 状態遷移直後に実行される
31
cond = ...; // update
32
}
33
else if ((eEvent == E_EVENT_START_UP)
34
&& (u32evarg & EVARG_START_UP_WAKEUP_RAMHOLD_MASK)) {
35
// ToCoNet_vSleep() の起床時に呼び出される。
36
cond = ...; // update
37
}
38
39
// 条件の確認
40
if (!cond) {
41
ToCoNet_Event_vKeepStateOnRamHoldSleep();
42
ToCoNet_vSleep(E_AHI_WAKE_TIMER_1,
43
50, FALSE, FALSE);
44
} else {
45
ToCoNet_Event_SetState(pEv, E_STATE_APP_TX_REQUEST);
46
}
47
break;
48
case E_STATE_APP_TX_REQUEST:
49
... // transmi a packet
50
break;
51
}
Copied!
リンクのコピー