2015/02/01

[nrf51]app_error_handler()はWEAK

小ネタ。

nRF51 SDK v7でビルドしていると、DEBUGというマクロを定義するとエラーが発生した。
これは、app_error.cが使っていて、定義されている場合はbsp.hをincludeし、LEDを付けたりするように実装されているからだ。

そういえば、app_error_handler()は自前でも実装していたような気がして、確認するとやはり実装していた。
なのにリンクエラーが発生しない。
なんでだろう?

定義を見ると、こうなっていた。

__WEAK void app_error_handler(...)

このマクロは、__attribute__((weak))だった。
Function Attributes - Using the GNU Compiler Collection (GCC)
ライブラリ関数としてweakとしておけば、ユーザコードで上書きできるよ、みたいな感じらしい。
ほほぅ。

そんなわけで、app_error_handler()は自前でも実装できるし、してなかったらライブラリ側の実装が呼ばれる。
ライブラリ側は、DEBUGマクロがなければNVIC_SystemReset()を呼ぶだけになっている。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。