らずらいと姫の挑戦日記(第3回)~プログラム書込み過程の疑問点~
2016-04-13
第1回にて、Lチカ成功しましたが、今回はその過程においてわかりにくかった点を、らずらいと姫目線でまとめてみました☆
第2回で作成した「led6」のプロジェクトに実際のプログラムを書き込んでみます。
今回は新規作成ではなく、既存のプロジェクトを開きます。
1)Lazurite IDEを開き、led6の中のファイルを開きます。
2)赤枠の中に、第1回のLチカプログラムをコピー&ペーストします。
3)「led6」のプロジェクトにLチカのプログラムが書き込みされました。
既存のプログラムを開く場合は、開きたい場所を指定するだけなので簡単ですね。
開いて、修正したり、実行したり、復習したり、色々楽しんで下さい♪♪♪
ここまでの過程で、疑問に思ったことを何点か挙げてみます。
~~~ 疑問その① ~~~
プログラムの1行目 『#include “led6_ide.h” // Additional Header』 を消さずに残す理由は?1行目の役割は??
読んだまま、ヘッダーなんですが、超初心者の姫目線なので、専門用語はわかりません。なので、身近なもので例えてみると・・・
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
広い家の掃除などを、ハウスキーパーさんに依頼している家主さんを想像してみて下さい。
家主さんは仕事が忙しく、ハウスキーパーさんに家の説明が出来ません。なので、家の間取り図と、掃除する場所・使用する道具などを紙にまとまてあります。この紙があれば、毎回違うハウスキーパーさんが来ても大丈夫!ハウスキーパーさんはその紙を見ながら掃除をすることができます。でも、この紙がなければ、どこをどのように掃除をすればわからなくなります。●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
つまり、ヘッダー(紙)が家主さんとハウスキーパーさんとを繋ぐ役割を果たすという
ことになります!!
Lazurite IDEをインストールすると、様々なファイルがインストールされます。ヘッダーファイルも色々な種類のものが一緒にインストールされます。上記の例でいうと、お掃除に関するヘッダー、犬のお散歩に関するヘッダー、食事を作るヘッダーなどがあり、どのヘッダーを選択するかはハウスキーパーさんに何をお願いするかによって決まります。プログラムを実行すると命令に従って機械(ハウスキーパーさん)は1行目の『#include “led6_ide.h” // Additional Header』を介してヘッダーの中身を確認し、実行します。1行目を削除してしまうと、ヘッダーを確認できず、エラーになってしまいます。
上の図は、インストールしたLazurite IDEのフォルダを開いた時の画面です。この中に、ヘッダーとそのヘッダの中身のプログラムが含まれています。
なお、 『#include “●●●_ide.h” // Additional Header』 の●●●は自動的にプロジェクト名が入ります。
LazuraiteでLチカのプログラムが簡単に作れたのも、1行目のヘッダーのお陰だったのですね☆
詳細はLazuriteの開発者1号が書いた「ビルドして転送」の仕組みをご参照ください。
~~~疑問その② ~~~
第2回で少しだけ触れました、『プロジェクト名が全角文字(LED6)だと動作しない』、という事です。プロジェクト名やプログラムに使えない文字や記号が結構あります。
- ハイフン -
- スラッシュ /
- バックスラッシュ \
- 円マーク ¥
- 全角文字
- 日本語
など、上記はほんの一部です。
~~~ 疑問その③ ~~~
『// set the LED on』の部分です。//(スラッシュ2本)の後の字体が勝手にイタリックになり、色もグレーぽくなるのは何故?全部をコピペしたはずなのに・・・。
「//」(スラッシュ2本)の後は、全てコメント文です。分かりやすいように書いただけで、プログラムには全く影響しません。なので、何が書いてあっても、どんな文字(疑問その②に書いた日本語でもOKです!)
他にも「/*」(スラッシュとアスタリスク)は、「*/」(アスタリスクからスラッシュ)までをすべてコメントにします。
今回の内容は、少しだけプログラムの世界に踏み込みました。知っておいて損はないですね!
次回は、 ★★★Lチカ バージョンアップ★★★ の予定です。どうぞお楽しみに♪
~~~ おまけ:「ビルドして転送」の仕組み~~~
こんにちは。Lazuriteの開発者1号です。「ビルドして転送」の仕組みについて補足します。
設計したプログラムは「コンパイル」や「ビルド」といった作業をしてマイコンが読める形式に変更して、それをマイコンボードに転送して動作しています。Lazuriteでは「ビルドして転送」のボタンを押すと4つの作業が行われます。
1.コンパイル
C言語のプログラム(~.c)をマイコンが解釈できる命令に翻訳する作業をするのがコンパイルです。このときに前述したヘッダが必要になります。
digitalWriteといった命令は、インストールされたLazurite IDEの中の「hardware\lazurite_subghz\lazurite」のdigitalio.cに実際の動作が記述されており、digitalio.hがそのヘッダファイルとなっています。”●●●_ide.h”を辿っていくと、digitalio.hというファイルを呼び出している箇所があります。そして、そのdigialio.hの中に「digitalWriteが関数があるよ~」っていう宣言があります。led6.cをコンパイルしているときにdigitalWriteという関数があるという宣言があるからコンパイラは別のプログラムに任せれば良いんだと判断し、そこから先は別のプログラムに任せています。
このコンパイルはLazuriteIDEの中に含まれているプログラムに対しても行います。当然、digitalio.cも「ビルドして転送」ボタンを押すとコンパイルしています。コンソール画面のどこかでdigitalio.cもコンパイルしているので、興味があったら探してみてください。
実際のコンパイルは2つに分かれています。
1つめは「CCU8」というツールでC言語からアセンブラ(ASM)ファイル作成するまでです。
コンソール画面の先頭の次のようなコメントがその作業を行っています。
led6.c Compiling…
cmd /c CCU8 /TML620504F /MS /near /SD /SL65 / ….
2つめは「RASU8」というツールでアセンブラからデバッカや次のリンカが読めるオブジェクトファイルを生成します。CCU8の少し下の行に次のようなメッセージが出てきます。ここでは、ツールへの入力のファイルがasmファイルに変わっているのがわかります。
led6.asm Assembling…
cmd /c RASU8 obj\led6.asm /MS /DN /CD /SD /SL66 /WRPEAST …
2.リンカ
全てのプログラムのコンパイルが完了したら、リンカと呼ばれるプログラムが全てのプログラムをつなぎ合わせていきます。これは、コンソール画面の最後に出てくる次の部分で作業しています。
Linking…
cmd /c RLU8 /STACK(512) /D /SD /S /CC obj\led6.obj …
ここまでが一般的なマイコンの話で、ここから先はLazurite特有の作業になります。
3.プログラムの書式変換
リンカの出力がインテルHEX形式のファイルなのですが、Lazuriteではバイナリデータが良かったので、バイナリファイルに変換しています。コンソール画面のこのようなメッセージが流れるところで作業しています。
Converting to binary…
Input Binary File:led6.HEX
Output Hex File :led6.bin
4.マイコンボードの認証とプログラムの書き込み
USB接続されているものがLazuriteであることを確認した後に、プログラムを転送するモードでマイコンボードを起動し、プログラムの転送が完了したらマイコンボードを再起動します。コンソール画面では次のメッセージが流れるところで作業をしています。
boot mode
Start upload…
Upload success.
Sucess to reset Lazurite
このようにしてled6.cはマイコンボード上でお仕事をしています。