2014/11/15

[nrf51]CDTの設定

nRF51822でビルドするとき、eclipse + gccで行っている。
Keilも便利なのだけど、仕事でeclipse環境を使っているので、慣れておこうという意味合いもある。

 

eclipseでC/C++を扱うときは、CDTというプラグインというかパッケージというか、そういうものになる。
今の私は、バージョンがLUNAのCDTを使っている。
CDTをデフォルトで使うと、いろいろとコードの指摘をしてくれる。
こんな感じだ。

image

マクロや関数の宣言や文法を確認して、おかしいと思ったらマークを付けてくれる。
ただ、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にインクルードパスの設定を行う。

image

最初は、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に書いてあった。

image

上が、__attribute__(xxx)という書き方をしたものを置換するもので、次が__STATIC_INLINEを解決するために定義したものだ。


とりあえずこんな感じでやっておけば、警告的なものは出なくなる。

0 件のコメント:

コメントを投稿

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