セクションの複数ページをまとめています。 印刷またはPDF形式で保存...

もとのページに戻る

2024-11-14 現在

コールバック関数

各種コールバック関数
アプリケーションの記述を行うコールバック関数です。コールバックはシステム(ライブラリ)から呼び出されるという意味です。ユーザがいくつかのコールバック関数を定義することでシステムの振る舞いを記述します。

以下のコールバック関数は必須定義です。

  • setup()
  • loop()

それ以外の関数は定義しない場合は、何も実行しない空の関数が替わりにリンクされます。

通常のコールバック呼び出し順序

init_coldboot()
  ↓ (TWENET内部処理:初期化1)
setup()
  ↓(TWENET内部処理:初期化2)
begin() --- 初回のみ
  ↓
loop() <--+
  ↓       |イベント処理、ビヘイビア処理
CPU DOZE -+

スリープ復帰時のコールバック呼び出し順序

the_twelite.sleep()
  ↓ sleeping...


init_warmboot()
  ↓ (TWENET内部処理:初期化3)
wakeup()
  ↓(TWENET内部処理:初期化4)
loop() <--+
  ↓       |イベント処理、ビヘイビア処理
CPU DOZE -+

1 - setup()

初期化処理
コード実行の初期に呼び出され、初期化コードを記述します。

2 - begin()

初期化処理(TWENET初期化後)
loop()関数の初回コールの手前で一度だけ呼び出されます。TWENET の初期化は終了しているのでsetup()のような制約を考慮する必要はありません。

主に下記のような場面で使用します。

  • 始動メッセージの表示
  • テスト用のコードを記述
  • 始動直後のスリープ遷移
  • setup()で不都合がある処理(無線パケット処理・タイマー動作など)

3 - loop()

ループ処理
アプリケーションのメインループです。ループ終了後はCPUがDOZEモードに遷移し低消費電流で次の割り込みを待ちます。

アクトでは、ほとんどの処理がこのループ内に記述されます。

4 - wakeup()

スリープ起床後の処理
スリープから起床したときにloop()に移行する前に呼ばれ、スリープ復帰後の初期化処理や復帰状態によって処理を分岐するための手続きを含めます。

5 - init_coldboot()

初期化処理(ペリフェラル初期化前)
ペリフェラルAPIも初期化もされていない、コード実行の再初期に呼び出されます。

6 - init_warmboot()

スリープ復帰後の処理(ペリフェラル初期化前)
スリープ復帰後、ペリフェラルAPIが初期化されない再初期に呼び出されます。

7 - on_rx_packet()

パケット受信時の処理
受信パケットを受け取った際の処理を記述します。
void on_rx_packet(mwx::packet_rx& pkt, bool_t &b_handled)

無線パケットを受信したときにpacket_rxとして pkt にデータが格納された状態で、本関数が MWX ライブラリ内から呼び出されます。アプリケーション中で本関数が定義されない場合は何もしない weak 関数がリンクされます。

本関数中で b_handledtrue をセットすると、MWX ライブラリに受信パケットがアプリケーション内で処理されたことを伝達します。処理済みとした場合、不要な処理を抑制します。(the_twelite.receiver の処理を行わない)

8 - on_tx_comp()

パケット送信完了時の処理
送信完了時に行う処理を記述します。
void on_tx_comp(mwx::packet_ev_tx& ev, bool_t &b_handled)

無線パケットの送信が終了したときにpacket_ev_txとして ev にデータが格納された状態で、本関数が MWX ライブラリ内から呼び出されます。アプリケーション中で本関数が定義されない場合は何もしない weak 関数がリンクされます。

ev.u8CbIdは送信時のID、ev.bStatusは送信の成功(1)または失敗(0)を示すフラグです。

本関数中で b_handledtrue をセットすると、MWX ライブラリに受信パケットがアプリケーション内で処理されたことを伝達します。処理済みとした場合、不要な処理を抑制します。(the_twelite.app, .board, .settings に対してはイベントコールバック関数を呼び出さない)