PR

Arduino、コンパイル後のHEXファイルを残すには

はじめてのArduinoコンパイル

uBITXをいじっていて、ついにファームウェアのコンパイルにまで手を出すことに。諸般の事情で、出来合いのバイナリファイルには含まれていない部分を使おうと思ったため。ということで、初めてArduinoのソースコードのコンパイル。いや、Arduinoの世界ではソースコードではなくスケッチと呼ぶらしい。ちゃんと調べていないので同じ概念なのか、別の意味も含んでいるのかはよくわからないが…。

IDEをインストール

Arduinoのスケッチをコンパイルするのはどうやるのかと調べてみたところ、統合環境(IDE)を使うらしい。探せば説明はたくさんあるけど、面倒なので、とにかくIDEをダウンロードする。以下の公式サイトから持ってこられる。

ダウンロードしてインストール。このあたりは普通のソフトウェアと変らない。

IDEを起動してコンパイル

今回は、自分で最初からコードを書くのではなくて、既存のものを修正して使うので、スケッチはすでに存在しているという状態。まずは、そのスケッチが入っているフォルダを開く。

「.ino」拡張子のファイルがソースコードで、これのどれか(どれでもいいみたい)をダブルクリックする。そうするとArduinoのIDEが起動する(立ち上がるまでに時間が結構掛かる)。

すでにソースコードはあるので、試しにこのままコンパイルしてみる。上の図で矢印で示したチェックマークをクリックするとコンパイルが行われる。

コンパイル完了。

完了したのはいいのだけど、オブジェクトファイルが見当たらない。今の成果はどこ?

バイナリファイルを残すには

調べてみたところ、通常はこのままIDEからAdruinoへ直接書き込むもののようだ。コンパイルボタンの横の矢印ボタンを押せば書き込みが行われるみたい。でも、それよりも、コンパイル済みのファイルを残しておき、書き込みは別途行いたい。

そのためには、どうやらオマジナイが必要らしい。


【追記】

オマジナイ不要の方法があった。

コンパイルをチェックマークボタンで行うのではなく、メニューの「スケッチ」から「コンパイルしたバイナリを出力」で行うと、コンパイルしてHEXファイルを生成してくれるようだ。

生成場所は、元のソースコード(スケッチ)のと同じフォルダ。

ということで、以下のオマジナイは不要。とはいえ、チェックマークボタンの方が楽なのも確かなので、オマジナイの方がいいかもしれない。お好みで。


環境設定を開く。

下の方の「以下のファイルを…」で示されたファイルをテキストエディタで編集する。このフィアル名をダブルクリックするとフォルダが開く。

これが開いたら、一旦、IDEを終了させる(先程の画面に、そのように注意書きもある)。そうしないと、ファイルを編集しても起動中のIDEが上書きしてしまうみたい。

先程のフォルダにあるpreferences.txtをテキストエディタで開く。

上のように、一番下に「build.path=~」を書き加える。ここで指定したフォルダにバイナリファイルが生成される。フォルダは事前に作っておかなくても、Arduino IDEでコンパイルしたときに、なければ作ってくれるみたい。書き加えたら、上書きして保存。

オマジナイは以上。

再びコンパイル

オマジナイが済んだので、再度Arduino IDEを立ち上げてコンパイル。

そしたら、今度はエラー。

しばらく悩んだけれど、どうやら、前回の中間ファイルが残っているのが原因みたい。エラーメッセージあるファイルのフォルダを開く。

このファイルを削除して、もう一度コンパイル。

今度は無事コンパイルが完了した。コンパイルする度にこのエラーが起きる。このエラーが出たら中間ファイルを消せばいいみたい。しかし、釈然としない。何か設定があるのだろうか?


【追記】

設定でエラーは出なくなった。環境設定の中の「コンパイルされたコアを積極的にキャッシュする」のチェックを外した。

チェックを入れたつもりはないので、最初から入っていたのではないかと思う。あるいは、気づかずにうっかりチェックしたか?これが有効なこともあるのだろうけど、もし、上記のエラーが出るようなら確認して試して見る価値はあるかと。


バイナリファイルもちゃんとできていた。

ubit_20.ino.hexがそれ。多分、メインルーチンが含まれるファイル名が使われるんだろう。

余談

Arduino IDEは妙に重い。Arduino IDE自体が思いというわけではなく、タスクマネージャーで見てみると、explorer.exeが高負荷になっていることが多い。Arduino IDEを終了させたあとでもしばらくはexplorer.exeのCPU使用率が高くなっていたりする。うちの環境だけかなぁ…。


Arduino IDEでコンパイルしたバイナリをファイルに吐き出してからavrdudeでターゲットに書き込む
Arduino IDEはコンパイルが絶望的に遅い。また、基本的な動作がコンパイルして即ターゲット(ボード)に書き込むというスタイルなので、同じものを複数のターゲットに書き込む際に毎回あの遅いコンパイルに付き合わされるのはたまったものじゃない...
Windows自作
この記事のタイトルとURLをコピーする
スポンサーリンク
スポンサーリンク
スポンサーリンク
jh4vaj

コメント