【C言語や組込みソフト開発初心者向け】組込みOSを作ってみよう! 第0回

おはようございます, こんにちは, こんばんは! しがない4流エンジニアです! (<-- 自分の好き人の受け売りです)

お仕事で使用したルネサスエレクトロニクス社製RL78/F14の評価ボード(北斗電子製HSBRL78F14-64)が遊休状態のため、 このまま遊休状態にしておくのはもったいない!なにか活用方法ないかな?と思ったのがここ最近。
twitterの一部の界隈で未経験エンジニアが話題に上がっており、C言語や(組込み)ソフトウェア開発の初心者向けに技術的?なブログを起こして少しでも勉強の刺激になればと思い立ちました。
(twitter界隈だとWeb系が大勢を占めているのですがレッドオーシャンなので、ここはあえて組込みという未経験エンジニアにはかなりマイナーな分野に焦点を当てました。というよりも私が組込み界隈の人間なので...)
ブログの内容は、 正しい/間違っている箇所があると思いますので、「なんかここ怪しいな...」と思うところがあった場合は技術書や信頼できるサイトで確認してください。
(そして私にひっそりと教えてください。もしかしたらいいことがあるかもしれませんよ?(笑))

注意

本ブログの内容はC言語プログラミングや組込みソフトウェア開発について初心者向けの内容となっています。
そこそこ業務で携わっている/携わっていた方にはかなりつまらない内容となっています。
無駄な時間を潰してしまうので、急いで回れ右をして有意義と思われる書籍やサイトなどを見るのに時間を使ってください。

前提条件

  • 最低限のITリテラシーがあること
    必要なソフトウェアのダウンロード方法やインストール方法、パスの通し方などは説明しません。プログラミングを勉強する前にそちらを勉強してください。
  • C言語の基本構文が理解できている
    データ・演算子・式、制御(if文やfor文など)、配列、構造体、ポインタ、関数などの一般的な基本構文が理解できていればOKです。ポインタは完全に理解しているわけではないけどアレルギーがなければ大丈夫です。ポインターにアレルギーがあってやりたくない場合は...向いていないかもしれません。
  • 英語アレルギーがないこと
    英語にアレルギーがあるとエンジニアとしてもったいないです。有用な情報は英語で書かれていたり、規格などは英語しかないものも存在します。 Google翻訳とかに頼っても良いので、英語から逃げるのはやめましょう。 きっと素晴らしい世界が広がるに違いありません!?
  • Windows PCを持っていること
    組込み開発で使用する製品はWindowsLinuxでしか使用できないものが大半です。 Mac?それおいしいの?状態ですので、Windowsを持っていない人はWindowsマシンを至急買いに行きましょう。

さて、前置きはこの辺にして本題へと進みましょう。

1. 開発環境を整えよう

ソフトウェアを開発する上で開発環境を整えることは必須事項です。
組込みソフトウェア開発の場合, しばしば開発対象のハードウェア(マイコン)やそれに関連するコンパイラ, デバッガなどのツールを用意する必要があります。
近年PC上でマイコンをエミュレートして開発できる環境があります。マイコンが手元になくてもマイコンエミュレータを使用してソフトウェア開発を行うことができます。このため、マイコンの調達を待たずして開発を開始することができます。しかしながらマイコンエミュレータは高価でありどの現場でも使用されているというわけではありません。 (私も使用したかったのですが予算の関係上断念せざるを得ませんでした。)
私が知っている現場は大抵実マイコンを使用して開発しています。評価ボードをカスタマイズしたり開発用HWを仕立てたりしてて開発に利用したりしています。

1.1 マイコン評価ボードの準備

さて今回ですが冒頭に記載されている我が家にルネサスエレクトロニクス社製RL78/F14(R5F10PLJLFB) の北斗電子製評価ボード(HSBRL78F14-64)が遊休状態のため、有効活用するために開発対象にしたいと思います。
北斗電子製評価ボード(HSBRL78F14-64)の詳細スペックおよび注文方法は株式会社北斗電子様のHPに載っています。

評価ボードは2タイプあり、直付タイプとソケットタイプがあります。
ソケットタイプは高価な分マイコンの抜き差しが可能で、万が一マイコンが壊れた場合に新しいマイコンを買って付け替えることができます。一方直付タイプは安価な分マイコンが壊れた場合は評価ボードごと買い直す必要があります。
今回は開発に使用するわけではない(あくまでもお勉強)ため、直付タイプを購入するのが良いと思います。 (ソケットタイプがいい!って方は止めませんので買ってください。)
https://www.hokutodenshi.co.jp/7/HSBRL78F14.htmの製品概略を見ると、製品内容にACアダプタは付属品として同梱されておらずDC電源ケーブルのみとなっています。
家に安定化電源があるのであれば問題ありませんが、たいていのお家にはそんなもんはありませんので、素直に別売りの"ACアダプタ+5V(JST)"も追加しましょう。
ということで、RL78/F14の評価ボード HSBRL78F14-64 と 別売り ACアダプタ+5V(JST) を株式会社北斗電子様へ注文して購入してください。 (8,580円 + 1,980円で...10,560円の出費ですね...orz)
在庫があれば注文後入金してから1週間程度で手元に届くと思いますので、ワクワクドキドキしながら待ってください。

1.2 ターゲットマイコン用のコンパイラの準備

ターゲットのマイコンを購入したら、あとはネットに転がっているフリーのコンパイラを使用すれば開発できる!っていうわけにはいかないのが組込み開発のいいところ?です。
さきほど注文した評価ボードの到着をワクワクドキドキして待っている間の時間がもったいないので、RL78/F14向けの実行オブジェクトが生成できるコンパイラを探しましょう。
私が知る限り、RL78向けのコンパイラは以下の4つがあります。

IAR Embedded Workbench for Renesas RL78は、有償版のみしか提供がないため選択肢から除外します。(IRAシステムズさんが個人にコンパイラを売ってくれるかもありますが)

ルネサスエレクトロニクス社製のCA78K0Rは、HP上でRL78ファミリ用Cコンパイラパッケージ(CC-RL)の利用を勧められています。 (参照; https://www.renesas.com/us/ja/software-tool/c-compiler-package-rl78-and-78k-families) このため、CA78K0Rは使用せずにCC-RLを選択することになります。

GNU Tools製 GCC for Renesas GNURL78は、7年前の投稿になるけどIAR Embedded Workbench for Renesas RL78、RL78, 78Kファミリ用Cコンパイラパッケージ CA78K0R、GCC for Renesas GNURL78の三者の性能比較がされていました。 (参照: https://japan.renesasrulz.com/gr_user_forum_japanese/f/gr-kurumi/628/rl78-gnu-iar)

これによると、1位はIAR Embedded Workbench for Renesas RL78、2位はCA78K0R、3位がGCC for Renesas GNURL78だったようです。GNURL78とCA78K0Rと性能を比べた時に、GNURL78はCA78K0Rの2倍程度性能が悪いようです。
性能が悪いのより性能が良い方を利用したいため、今回はGNURL78は選択肢からはずします。

選択肢として残ったのは、"RL78ファミリ用Cコンパイラパッケージ(CC-RL)"になります。(出来レースでしたが...)
無償評価版があるため個人で利用することは問題ありませんが、気になるのが評価期間と評価期間切れた後どうなるかです。 これは、https://www.renesas.com/us/ja/software-tool/evaluation-software-toolsに記載されています。
試用期間は最初にビルドした日から60日間。試用期間内は製品版と同じ機能が使用できる。 ただし使用期間を超えると製品版の機能が使用できないのとリンクサイズ(実行オブジェクト)のサイズが64Kバイト以下に制限される。
今回の開発では64Kバイトを超えることはないはずで、この制限は支障ないとみなす。 (もし64Kバイトを超えてしまったら...ごめんなさい m(_ _ )m)
ということで、ここでは"ルネサスエレクトロニクス社製 RL78ファミリ用Cコンパイラパッケージ(CC-RL)"の無償評価版を使用することとします。

コンパイラhttps://www.renesas.com/us/ja/software-tool/c-compiler-package-rl78-familyからダウンロードすることができます。(要ユーザー登録)
上記のページより, 以下のものをダウンロードしてインストールしてください。

  • 【無償評価版】 統合開発環境 CS+ for CC V8.05.00 (一括ダウンロード版) ... 2021年3月27日現在のバージョンです。

また、以下のドキュメントをダウンロードしてください。

ダウンロード後、"【無償評価版】 統合開発環境 CS+ for CC V8.05.00 (一括ダウンロード版) "をインストールしてください。 (機械的に「次へ」を押下してインストールしても問題ないです。)
CS+インストーラーのStep 3画面まで遷移した後、以下の赤く囲われている箇所を設定してインストールを実行してください。

f:id:t-koyama03:20210328040505p:plain
CS+ インストーラー Step 3画面

インストール完了後, インストールディレクトリの配下にあるコンパイラが格納されているディレクトリパス(初期設定のままだとC:\Program Files (x86)\Renesas Electronics\CS+\CC\CC-RL\V1.10.00\bin) をWindowsのPathに追加してください。
WindowsのPathへコンパイラへのパスを追加後、コマンドプロンプトを開き以下のコマンドを入力してください。
C:\>ccrl -V
入力完了後、コマンドを実行して以下の結果が表示されることを確認してください。

f:id:t-koyama03:20210328041526p:plain
ccrl -V の実行結果

ここまでくればコンパイラのインストールは完了です。

1.3 統合開発環境の準備

ルネサスエレクトロニクス社はコンパイラと一緒に統合開発環境(IDE: Integration Development Environment) CS+を提供しています。しかし、今回はCS+はデバッグ用にしか使用せず、コーディングには別のIDEやビルドツールを使用することにします。
世の中にはEclipse (https://www.eclipse.org) や IntelliJ IDEA (https://www.jetbrains.com/idea/)、 Visual Studio (https://visualstudio.microsoft.com/)、CodeWarrior (https://www.nxp.com/design/software/development-software/codewarrior-development-tools:CW_HOME?tid=vanCODEWARRIOR)など様々なIDEが存在します。
私の経験上、コンパイラメーカーからEclipseプラグインEclipseベースのIDEが提供されていることが多くEclipseを使用できる環境にあります。
(Green HillsさんやWindRiverさんはEclipseプラグインの提供、TASKINGさんやルネサスさんはEclipseベースのIDEを提供。ルネサスさんのEclipseベースのIDEマイコンの都合上使用できません。)
開発現場で他のコンパイラを使用した場合に容易に開発環境を構築できるように、今回はルネサスエレクトロニクス社製純正IDEのCS+ではなくEclipseを使用することとします。

1.3.1 Eclipseのインストール

Eclipseは基本Java開発用の統合開発環境になりますが、C/C++のソフトウェアを開発できるようにインストールパッケージが提供されています。
組込みソフトウェア開発でC/C++で開発されることが多いため、このインストールパッケージはほぼ必須となります。
https://www.eclipse.org/downloads/packages/ から"Eclipse IDE for C/C++ Developers"のWindows x86_64を選択してインストールパッケージをダウンロードしてください。 ダウンロード後ZIPファイルを解凍すると解凍後のディレクトリ内に"eclipse.exe"が保存されています。
"eclipse.exe"をダブルクリックして実行してください。 "eclipse.exe"実行後しばらく時間が経つと以下の画面が表示されます。

f:id:t-koyama03:20210329004846p:plain
Select a directory as workspace ダイアログ

Workspaceの入力フィールドにWorkspaceにしたいディレクトリパスを入力し"Launch"を押下してください。 押下後、Eclipseプラグインの読み込みが完了するとメイン画面が表示されます。
f:id:t-koyama03:20210329011154p:plain
Eclipseメイン画面

これでEclipseのインストールは完了です。
Eclipseのカスタマイズやプラグインのインストールは、Googleで検索すればいくらでも情報が上がっているためここでは詳細を割愛します。
例えば、エディタのプラグインや検索プラグインなど色々あります。 自分好みのプラグインを探してインストールして使い勝手の良いIDEにするのも生産性を上げるためには必要なことです。

1.3.2 CMake & ninjaのインストール

ビルドツールとして有名なのがGNU Make (https://www.gnu.org/software/make/)です。GNU Makeは現在でも幅広く使われて、技術的には成熟されており小回りが利くし良いビルドツールです。しかしながら、用意されている仕組みが少なくMakefileを記述するのが大変であったり, 独自に仕組みを用意したりすることが多いため理解容易性が低くなったり、使いまわしがききにくかったりします。 このため、Makefileの使いまわしができないのは色々な環境で開発する場合に少々困りものです。
CMake(https://cmake.org/)はこの点を解決できる可能性のあるビルドツールです。 今回はCMakeを利用してビルドを行うことにします。
https://cmake.org/download/ からWindows用のインストーラー (cmake-3.20.0-windows-x86_64.msi (2021/03/29 現在最新版))をダウンロードしてインストールを実行してください。
インストール実行後、インストールディレクトリ配下のbinディレクトリ (デフォルトはC:\Program Files\CMake\bin)に対してWindowsのPathを通してください。
WindowsのPath設定した後、コマンドプロンプトを開き以下のコマンドを入力してください。 C:\>cmake --version
入力完了後、コマンドを実行して以下の結果が表示されることを確認してください。

f:id:t-koyama03:20210329022206p:plain
CMake バージョン表示

これでCMakeのインストールが完了です。

ただこれだけではCMakeが吐き出すビルドスクリプトMakefileなのであまりメリットを見出せません。 そこでビルドが高速と巷で噂のninjaに対応させるためGitHub(https://github.com/ninja-build/ninja/releases)から"ninja-win.zip"をダウンロードしてください。
ダウンロード後解凍し、解凍後にできたディレクトリに対してWindowsのPathを通してください。
WindowsのPathを設定した後、コマンドプロンプトを開き以下のコマンドを入力してください。
C:\>ninja --version
入力完了後、コマンドを実行して以下の結果が表示されることを確認してください。

f:id:t-koyama03:20210329024809p:plain
ninja バージョン表示

これでninjaのインストールが完了です。

CMakeとninjaを使用する基本的なビルドシステムの構築が完了しました。 使用方法については、次回以降に説明しますので楽しみにお待ちください。

1.4 デバッガの準備

マイコンに書き込まれたソフトウェアをデバッグするためにデバッガを使用することが多々あります。 JTAG(Joint Test Action Group: https://ja.wikipedia.org/wiki/JTAG)NEXUS(https://nexus5001.org/), CAN経由, PCI Expressインタフェース経由, USB経由など色々あります。
しかし使用するボードにどのデバッグI/Fが出ているかで使用できるデバッガが変わってきます。 北斗電子製HSBRL78F14-64は以下の箇所にJTAG I/Fが出ています。 以下の写真の赤点線で囲われた部分が該当します。

f:id:t-koyama03:20210329031237p:plain
RL78/F14 JTAG Connector

このため必然的にJTAGデバッガが必要になります。 JTAGデバッガは色々なメーカーさんより購入することができますが高価なものが多いです。 私は仕事でLauterbach社さんのデバッガを使用していますが、個人で購入する(購入できるか別)にはなかなかのお値段になっています。
今回はお手軽にできればよいため、ルネサスエレクトロニクス社製のE2エミュレータLiteを使用します。 このデバッガは、Amazonさんやマルツオンラインさん(https://www.marutsu.co.jp/select/list/detail.php?id=50)、秋月電子通商さん(https://akizukidenshi.com/catalog/g/gM-10459/)などから購入可能です。(たぶん秋月電子通商さんが一番お安いと思います。)

デバッガの購入できれば開発環境の準備はすべて完了です。

本日の最後に

今回はこれから開発を行う上で必要な環境整備を行いました。 次回は事前に用意したソースコードをビルドしてハードウェアに焼きこみ、デバッグするところまでの一連の作業を行ってみたいと思います。

今回の内容からすでに理解できていると思いますが、組込みソフトウェアの開発は意外とお金がかかります。 Web系はPCさえあれば始めることができますが、組込み系はどうしても機材が必要なため余計なお金がかかります。組込みソフトウェア開発はソフトウェアだけのことではなくハードウェア、デバッガ、コンパイラ、3rdパーティ製ソフトウェアやツールなどの知識が必要なため、Web系よりも勉強することはたくさんあります。 しかし、それら知識を身に着けられれば、他の業種(Web系や業務系など)へ転身する際もそれほど苦なくできるのではないかと思います。 そういう意味ではお勧めの職種です。 (お給料は...どうでしょう??)
少しでも初学者が組込みソフト開発に目を向けて、楽しさを体験してこの業界を目指してもらえると大変嬉しいです。

それでは今回はここまで。 毎週日曜日に更新予定ですので、それまでお待ち頂けたら嬉しいです。
では。