nRF51822でビルドするとき、eclipse + gccで行っている。
Keilも便利なのだけど、仕事でeclipse環境を使っているので、慣れておこうという意味合いもある。
eclipseでC/C++を扱うときは、CDTというプラグインというかパッケージというか、そういうものになる。
今の私は、バージョンがLUNAのCDTを使っている。
CDTをデフォルトで使うと、いろいろとコードの指摘をしてくれる。
こんな感じだ。
マクロや関数の宣言や文法を確認して、おかしいと思ったらマークを付けてくれる。
ただ、Makefileに書いた設定を読んでくれるわけではないので、ビルド上問題が無くてもeclipseはわからずにマークを付けてしまうのだ。
無視しても特に問題は無いので、ちょっとした開発であれば目をつぶるし、邪魔なら設定をオフにすることもできる。
でも、BLEは長くやるつもりなので、ここらで設定を合わせておいた方がよいんじゃなかろうか、ということで設定をし直すことにした。
なお、環境はWindowsでやってます。
環境変数
コンパイラの場所や、SoftDeviceの場所は変わりやすいので、Windowsの環境変数に設定することにした。
名前は何でもよいので、ARM_HOMEにコンパイラを、NORDIC_NRF51にSoftDeviceの場所をそれぞれ設定。
ARM_HOME : C:\xxxxxx\CodeSourcery\arm-none-eabi
NORDIC_NRF51 : C:\xxxxx\nrf51_sdk_v6_1_0_b2ec2e6\nrf51822
パスは、自分のところに合わせておけばよい。
SoftDeviceはzipを解凍したものだからよいとして、なんでARMはCodeSourceryにしたんだっけ・・・。
eclipse
includeパスの追加
eclipseの設定はプロジェクト単位のようだ。
プロジェクトで右クリックして、コンテキストの一番下にあるプロパティを選択。
C/C++ General > Paths and Symbolsにインクルードパスの設定を行う。
最初は、includeの下のフォルダも追加していったのだけど、面倒になってきたのでCソース側にフォルダを書くようにしてしまった。
まあ、どのincludeをしているのか明確に把握しておくのも大切だろう、うんうん。
gccだけフォルダを掘っているのは、次に関係している。
Symbolsの追加
今回のソースで、こんな書き方をしている。
まねしただけなんだけどね。
__attribute__( ( always_inline ) ) __STATIC_INLINE void led_on(int pin);
最初のattributeは、強制インライン関数化だ。
__forceinlineでもよいらしい。
C++のinlineはコンパイラの動作依存になるから、「どうしてもインラインにしたい」という場合はマクロにするしかない。
このオプションはgccのARM用らしいのだけど、それをやってくれるのだ。
後ろの__STATIC_INLINEは、単にstatic inlineと書きたいところだけど、コンパイラの種別でcore_cm0.hが使い分けるようになっていた。
このcore_cm0.hがgccフォルダの中にあるので、ここだけincludeパスに追加したという次第だ。
こんなコンパイラ依存の内容をeclipseが知るわけもないので、適当に無視してもらうよう設定する。
このやり方は、stackoverflowに書いてあった。
上が、__attribute__(xxx)という書き方をしたものを置換するもので、次が__STATIC_INLINEを解決するために定義したものだ。
とりあえずこんな感じでやっておけば、警告的なものは出なくなる。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。