A Day in the Life

mbed OS5 の Callback

mbed OS2 までは、引数に関数を受け取る場合、FunctionPointerArg1<戻り値, 引数> を使って抽象化していた。mbed OS 5 では Callback を使う。

mbed OS 5.1 からこの Callback 型を使わず、既存のAPIで関数を引数として渡すと非推奨の warning が出る。

Callback

mbed のレポジトリで

git grep Callback\<|grep Callback.h

すると定義が山ほど出てくるけど、よく使うのは

Callback<戻り値型(呼び出す関数の引数)> cb = callback(関数ポインタ);
Callback<戻り値型(呼び出す関数の引数)> cb = callback(オブジェクトへのポインタ、そのオブジェクトの関数ポインタ);

あたり。

例えば数値の2乗を返す関数を Callback 型にしたいときは、callback() をつかう。

#include <math.h>
uint16_t pow2(uint8_t n) {
    return pow(n, 2);
}

Callback<uint16_t(uint8_t)> callbackPow2 = callback(&pow2);
callbackPow2(10);
callbackPow2.call(10);

Callback 型は () を演算子オーバーロードしてるので、関数呼び出しのように書くこともできるし、明示的に call() で呼び出すことも出来る。

また、もちろんオブジェクトとそのオブジェクトが持つ関数のバインドにもよく使う。

Callback<R(A0)> cb = callback(&objFoo, &Foo::func);
記事の一覧 >

関連するかもエントリー

mbed で Callback 関数を扱う
mbed のコアAPI、 Ticker などでも使われている、FunctionPointer を使う。https://developer.mbed.org/users/mbed_official/code/mbed-src/file/a11c0372f0ba/api/Functi...
mbed のコアAPI、 Ticker などでも使われている、FunctionPointer を使う。https://developer.m...
BLE Nano V1.5 を mbed 上で 32K RAM で扱う
BLE Nano は V1.0 では 16KB の RAM が、V1.5 から 32K RAM がのっている。が、mbed 上では現在 1.0 ベースしかなく、折角の 32K RAM が使えない。ので使えるようにする方法メモ。mbed OS 5 の場合rtos の INITIAL...
BLE Nano は V1.0 では 16KB の RAM が、V1.5 から 32K RAM がのっている。が、mbed 上では現在 1....
HX711 の準備完了時間、mbed OS5 での thread
HX711 では、データ出力準備が整ったら、DOUTが HIGH -> LOW になる。この出力時間の待ち受け時間を計ったところ、約77msかかる。メインループで待ち受けすると77msは割と支配的でUIのレスポンスに悪化に繋がる。AVR の Arduino なら Timer のハ...
HX711 では、データ出力準備が整ったら、DOUTが HIGH -> LOW になる。この出力時間の待ち受け時間を計ったところ、約77ms...