はじめに、

最近、雑誌にマイコンボードが付録でついてくるようになり、ソフトウェアの記事も増えてきました。最近のマイコン開発ツールはほとんどC言語が使えるので、C言語による記事も出てきていますが、C言語を高級アセンブラとして使っているように思えます。

本来移植性のよさでC言語を選んでいるなら、もう少し違った書き方もあるのではと思い、書いてみました。いわゆるプロトタイプで、まだ不十分ですが、移植性を考えたプログラムに仕上げていきたいと思います。つまり、連載します。

マイコンボードは入手性を考え、トランジスタ技術2005年4月号の付録にしました。これは今でもサンハヤト社から買えます。開発ソフトのインストールやソフトウェアのマイコンへの書き込みは、トランジスタ技術や開発ツールのマニュアルを参考にして下さい。

製作するマイコンシステムの機能は以下のようにします。

    • 1 msecごとにシステムタイマ値(4バイト)を更新する。

    • LED0を2msec周期で点滅させる。(1msec点灯、1msec消灯)

    • LED1を2×n msec周期で点滅させる。(n msec点灯、n msec消灯)

    • n msecごとにRS232C経由でシステムタイマ値を送信する。

今回はここまでで、いずれ、RS232受信、A/D変換などを付け加える予定です。

それでは、サンプルプログラム(sample1.zip)の説明に入ります。

ncrt0.a30 スタートアップルーチンです。

R8C15.incをインクルードするように変更してあります。

R8C15.inc sect30.incのR8C15専用版です。ncrt0.a30でインクルードしています。

割り込みルーチンの登録もここで行っています。

R8C15.c R8C15に依存したルーチン集です。

R8C15.h R8C15.cのヘッダーです。

systemIO.c 上記マイコンシステム用のルーチンです。

systemIO.h systemIO.cのヘッダーです。

utility.c マイコンに依存しないルーチン群です。

utility.h utility.cのヘッダーです。

main.c メインルーチンです。

R8C15.cは、マイコンの機種ごとに必要です。

マイコンボードシステムの機能が変わる場合は、systemIO.cとmain.cを変更します。

機能が変わらずに、マイコン機種が変わる場合は、systemIO.cのみ変更して対応できるようにします。

つまり、main.cは、マイコンの機種依存無しで考えます。

(もちろん、機能は満足できるマイコンを使うことが前提です。)

中身の説明は次回に。とりあえず中身を眺めておいて下さい。

余談

私が組み込みソフトを担当していた頃は、アセンブラ言語をメイン使っていました。C言語はありましたが、RAMが128~256バイトしかなく、あまり実用的ではありませんでした。今ではRAMが1Kバイトくらい普通にあるので、C言語で組んでも実用になるかもしれません。

せっかくC言語で組むなら、上記のように階層を分けて書いておけば、マイコンの変更に簡単に対応できるようになるはずです。マイコンメーカからすれば、やってほしくないかもしれませんが、それでも、同じシリーズの新製品に変えるとかも容易になりますので、損にはならないはずです。

また、チームで開発する際も、階層別に人を割り当てるという手も使えます。そのほうが、考えやすいですよ。(少なくとも私の場合は)