小ネタ。
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 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。