全てのページ
GitBook提供
1 / 7

コールバック関数

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

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

  • setup()

  • loop()

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

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

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

正確なふるまいを参照したい方はソースコードmwx_appcore.cppを参照してください。

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

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

正確なふるまいを参照したい方はソースコードmwx_appcore.cppを参照してください。

setup()

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

TWENETの初期化は setup() 関数が終了した後にも実行されます。多くの処理はTWENETが終了した後に実行するようになっているため、ここでは初期化以外の処理を行わないようにしてください。

注意すべき事項を以下に列挙します。

  • スリープthe_twenet.sleep()の実行はできません。初期化後速やかにスリープしたいときはbegin()関数内に最初のスリープ処理を記述してください。

  • delay()関数は後述の処理*に置き換えられます。この場合、パラメータのmsはミリ秒を指定するものではありません。

* delay()の代替処理

static inline void delay(uint32_t ms) {
		volatile uint32_t ct = ms * 4096;
		while (ct > 0) {
			--ct;
		}
}

begin()

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

主な使い方は、

  • 始動メッセージの表示

  • 始動直後のスリープ遷移

  • setup()で始動することに不都合がある処理

このコールバック関数定義は省略可能です。

loop()

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

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

バック関数定義は省略可能です。

wakeup()

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

センサーの読み出しなどの処理のみでloop()での処理がないときは、この関数内で再びスリープを実行できます。

このコールバック関数定義は省略可能です。

init_coldboot()

通常は使用しません。

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

このコールバック関数定義は省略可能です。

init_warmboot()

通常は使用しません。

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

この関数では割り込み要因の検出を行うことができます。

このコールバック関数定義は省略可能です。