はじめに、
最近、雑誌にマイコンボードが付録でついてくるようになり、ソフトウェアの記事も増えてきました。最近のマイコン開発ツールはほとんど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言語で組むなら、上記のように階層を分けて書いておけば、マイコンの変更に簡単に対応できるようになるはずです。マイコンメーカからすれば、やってほしくないかもしれませんが、それでも、同じシリーズの新製品に変えるとかも容易になりますので、損にはならないはずです。
また、チームで開発する際も、階層別に人を割り当てるという手も使えます。そのほうが、考えやすいですよ。(少なくとも私の場合は)