~無限の可能性を持つソフトコアCPUの世界へようこそ~

浅井様のご紹介・連載タイトルはこちらから

 

浅井様へご相談等ありましたら、下記アドレスへ

はじめに

前回まではソフトコアCPUをハードウェア面から解説しました。今回からはソフトウェア面について解説していきます。

 

ソフトウェアの開発ステップ

図 1にソフトウェアの一般的な開発ステップを示します。設計仕様に基づいてコーディングを行い、ターゲットに合わせたバイナリ(機械語)へ変換後、デバッグ(動作確認)を行います。パソコン等の汎用機では全てをターゲットとなる実機上で作業することが可能ですが、組み込み機器の場合はバイナリ変換までを開発機(ホストパソコンと呼ぶ)上で行い、デバッグは実機(ターゲットと呼ぶ)上で行うのが一般的です。この様な開発をクロス環境と呼びます。C言語に代表される高級言語でコーディングを行えば、プロセッサが変わっても依存部のツールを入れ替えれば元のコーディングは大半を再利用できます。高級言語とクロス開発環境の普及は、移植性の高い設計を実現しました。

 

図 1 ソフトウェアの開発ステップ

 

昔話ですが、マイコンが出始めた当初はアセンブリ言語でコーディングしたものを人手でアセンブルして機械語に変換していました。私も貧乏学生時代に逆変換(逆アセンブル)含め色々経験しましたので、今でもその当時使っていたCPUのニーモニックと機械語は覚えています(笑)。

 

ツールとファイルの関係

図 2に前述のコーディングからバイナリ変換までに使用するソフトウェアの開発ツールとファイルとの関係図を示します。ファイルは大きく、ソース、オブジェクト、および実行バイナリの3つに分けられます。各ファイルの呼び方は色々あり、図に示したものが主という訳ではありませんので、皆さんの普段使われている呼び方で置き換えて下さい。以下順番に解説していきます。

 

・ソースファイル

高級言語やアセンブリ言語で記述されたファイルです。ソースは必ずしも全て新規設計する事はなく、既設計資産の流用や、OSやミドルウェアなどは購入したりして開発工数を抑えます。

 

・コンパイラ/アセンブラ

ソースをオブジェクトへ変換するツールです。このツールは使用する言語毎に異なるツールが必要ですが、出力するオブジェクトのフォーマットは共通です。つまりオブジェクトレベルで関数の呼び出し方法が同じならば、1つのシステムでも複数の言語を用いた開発が可能です。

 

 

図 2 ツールとファイルの関係

 

・オブジェクトファイル

オブジェクトは機械語ベースですが、ターゲットのハードウェア非依存の状態でありこのまま実行することはできません。昔はこのオブジェクト=実行バイナリというケースもありましたが、最近は以降に解説するリンカを介して実行バイナリを生成する方式が多くなっています。また機械語だけでなく他のソフトウェアから呼ばれる際に必要なシンボル情報なども含んでいます。

 

・ライブラリアン

設計資産の観点からすると全てソース形式で管理するのが楽ですが、ターゲットCPUが変わらない場合は、既にデバッグを終えているソフトウェアを開発の度にコンパイルするのは効率が良くありません。そこで複数のオブジェクトを1つにまとめたライブラリファイルを作成し後工程で使いやすくするのがライブラリアンです。アプリケーションやハードウェアに依存しない標準関数等がライブラリ化に適しています。

 

・リンカ

新規にコンパイルして出来たオブジェクトと、必要に応じて前述のライブラリや、既にコンパイル済みのオブジェクトを入力とし、オブジェクト間の参照関係を構築したり、ターゲットのメモリマップに合わせた実アドレスへの変換などを行い、実行可能なバイナリを生成します。