
マイコンを使うためには、ツール(Tool:道具)が要ります。
今回は、忙しいエンジニアのために「ツールとは何?」を5分で解説します。

5分でわかるマイコンhttps://qiita.com/APS_WEB/items/81116be56a643de88bda
で、「ユーザーが作ったプログラムはフラッシュ・メモリに保管され、順次CPUに送られます。」と述べました。
この「プログラムを作るため」と、その「プログラムをフラッシュ・メモリに書き込むため」と、その「プログラムの動作確認をするため」に、ツールが必要になります。
まず、ツールを使って、フラッシュ・メモリに書き込むプログラムを作ります。作ったプログラムをフラッシュ・メモリに書き込むためにもツールは使われます。
フラッシュ・メモリに書き込んだプログラムがちゃんと動作して、マイコンが正常に動くかどうかの確認にもツールは必要です。

一般に、マイコンのプログラム開発者は、PCを使って開発します。PCは、市販のWindowsマシンなら大抵のものが使えます。プログラムを作るためのアプリケーションソフトウェアは、インターネットから各マイコンに合ったものがダウンロードできます。作成可能なプログラムのサイズに上限があったり、使用期間に制限が付いたものなら、無料で利用できるアプリケーションもあります。
プログラムを記述したら、それをマイコンが理解できる言語に変換した上で、マイコンの中に書き込まなければ、マイコンは動作しません。この時に必要なのが「デバッガ&プログラマ」と呼ばれる装置です。これは、マイコンごとに専用の機種が提供されています。
PCとデバッガ&プログラマはUSBケーブルで接続され、デバッガ&プログラマとプリント基板のマイコンは専用のケーブルでつながります。
デバッガ&プログラマからプリント基板につながる制御線は、マイコンによっても様々ですが、Cortex-Mの場合は、一番少ないもので3本だけの場合があります。電源モニター用に2本、制御用の信号線が1本です。
このように、プログラムの作成からマイコンへの書き込みまでの一連の作業に使うハードウェアとソフトウェアをまとめて統合開発環境(IDE: Integrated Development Environment)、または統合開発ツール(略してツール)と呼びます。

そもそもマイコンは電気で動作します。
電気を使って何かを表現する手段は、「電気が有る」か「電気が無い」の2つだけです。
「電気が有る」を数字の「1」、「電気が無い」を数字の「0」と定義します。すると1と0なら2進数で計算ができます。
さらに「1」と「0」を並べたパターンで「文字」や「数字」を定義できます。例えば、アルファベットの大文字の「A」は「1000001」、小文字の「z」は「1111010」などとルール化します。
数字はそのまま2進数で表します。例えば、10進数の100(百)は「1100100」、1000(千)なら「1111101000」となります。
プログラムも「1」と「0」のパターンで定義して、フラッシュ・メモリに書き込みます。

マイコンのフラッシュ・メモリに書き込むプログラムの形式は、マイコンを開発する際に、マイコンの設計者によって定義されます。
したがって、マイコンによって異なります。 これを「マシン語」と言います。

「マシン語」は「1」と「0」の羅列なので、人にとっては非常に分かりにくい言語です。そこで、各パターンに分かり易い名前を定義したものが「アセンブリ言語」です。これも、マイコンを開発する際に、マイコンの設計者によって定義されます。
したがって、「マシン語」と同じように各マイコンによって異なります。
「アセンブリ言語」は「マシン語」に比べると、かなり読みやすくなりますが、マイコン毎に定義が異なり、ユーザーはマイコンを変えるたびに各マニュアルを確認する必要が出てきます。
そこで、大型コンピュータなどで使われる高級言語の「C言語」と「アセンブリ言語」を対応させ、マイコンのプログラムを「C言語」で記述します。マイコンの言語を「C言語」に統一すると、ユーザーは、マイコン毎の「アセンブリ言語」や「マシン語」の差異を気にすることなく、様々なマイコンのプログラムを「C言語」で作ることができます。

これは、C言語で記述されたプログラムを、ツールを使ってマシン語とアセンブリ言語に変換した例です。
何も作業しないで、単純に時間を稼ぐプログラムです。
C言語で、mという整数を定義して、0に初期化します。繰り返しループを作って、そのなかでmに1を加算していきます。
ループの中では、何も操作しない命令の__asm(“nop”);を実行します。
mが500になったら繰り返しループが終了します。
mが加算されていき、500になるまでの命令の実行時間を稼ぐプログラムです。
C言語のすぐ右に書かれているのは、フラッシュ・メモリのアドレスです。アドレスは日本語で番地です。
フラッシュメモリの中で、命令の置いてある場所を示します
一方、??main_5や??main_4は、「ラベル」と言って、プログラムの場所を指定するために定義した名前です
頻繁に使うアドレスには「ラベル」を付けておくと便利です。
アセンブリ言語やマシン語を見ると、C言語で使っているmは、レジスタ8(R8)に割り当てられています
「MOV.W R8, #0」でレジスタ8を0に初期化して、「ADD.W R8, R8, #1」でレジスタ8に1を加算しているのが分かります
C言語の「__asm(“nop”);」はNOP(ノップ)というニーモニックのアセンブリ言語が使われています。

最後はフラッシュ・メモリに書き込んだプログラムの動作確認です。マイコンのフラッシュ・メモリに書き込んだプログラムが、ユーザーの意図した通りに動作しているかどうかを確認しなければなりません。
例えば、「m=0;(MOV.W R8, #0;)」というプログラムをフラッシュ・メモリに書き込んで実行したとします。この時、実際にR8に0が書かれているかどうかを確認しなければなりません。もし、プログラムの流れや記述が間違っていて、ユーザーの意図した通りにプログラムが動作していない場合は、R8に0が書かれないので、マイコンは正常に動作しません。プログラムの流れや、レジスタに書かれた値を確認するのもツールで行います。
ツールを使って、プログラムを実行すると、プログラムの実行経路やレジスタの内容の変化、メモリの内容が簡単にわかります。また、プログラムの実行を一旦停止させたり、1つずつ実行したりすることができます。この他にも、ツールには便利な機能が備わっているので、ユーザーはそれらの機能を使って、自分が作ったプログラムが正常に動作しているかどうかを確認できます。

最後のまとめです。
マイコンのプログラム開発者は、PC上のプログラムを作るためのツールのアプリケーションソフトウェアを使って、C言語でプログラムを作成します。
C言語で作成したプログラムはアプリケーションソフトウェアが、マイコンが理解できる言語に変換した上で、マイコンの中に書き込みます。
マイコンの中に書き込まれたプログラムの動作確認も、ツールのアプリケーションソフトウェアで行います。
プログラムを実行すると、プログラムの実行経路やレジスタの内容の変化、メモリの内容が簡単に観ることができます。また、プログラムの実行を一旦停止させたり、1つずつ実行したりすることができます。この他にも、ツールには便利な機能が備わっているので、ユーザーはそれらの機能を使って、自分が作ったプログラムが正常に動作しているかどうかを確認します。
「ツールとは何?」を理解していただけましたでしょうか?
本セミナーは、ここまでです。もっと詳しく勉強したい方は、半導体技術コンテンツメディアAPSのWebinarの「開発ツールとは何?|Arm® Cortex® -M搭載 ルネサスRAファミリを使ったマイコン超入門【第2部】」 https://www.aps-web.jp/seminar/30221/
を観てください。マイコンを使用する際に必要な統合開発ツールの役割、具体的種類、使い方、さらにマイコンのプログラム言語について動画を使って詳しく解説しています。
