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....