OpenSSMの細かな機能を説明します。組込機器となりますので、回路とファームウェアは密接に絡んでいることもあり、ハードウェア/ソフトウェアを同時に説明します。
OpenSSMのファームウェアは、RTOS等の OSを使わず独自の環境下(プログラムライブラリ)に構築されています。最初は分かりにくい/理解しにくいと思われるところも多々あると思いますので、各ライブラリの説明ページを設けました。
RTOSではマルチタスクが使えるため大変便利ですが、OpenSSMでは各タイマ割込をタスク代わりに使っています。また一部の処理では、イベントもどきの概念(あるいは、コルーチンに近い)を導入しています。
Fig.1 アプリケーション層とライブラリ(ドライバ)の関係
C言語で開発されています。ごくごく一部に、インラインアセンブラが使用されています。
ライブラリとなる対象は、他のソフトウェアへの流用が可能かどうかという点において決められています。そのハードウェアあるいはアプリケーション固有となる機能の場合は、ライブラリ化されていません。 ライブラリは、lib〜.c, lib〜.hと、libが接頭辞としてファイル名が決められています。また必ず lib〜.c, lib〜.hとペアでファイルが存在します。場合によっては、外部のテーブルを参照することがあり、その場合は table.hが必要になります。
ソースコード名 | ヘッダ名 | 機能 | 備考 |
libadc.c | libadc.h | A/D変換ドライバ | |
libdac.c | libdac.h | D/A変換ドライバ | |
libeeprom.c | libeeprom.h | I2C対応の EEPROMドライバ | |
libfontx2.c | libfontx2.h | FONTX2ドライバ (ASCIIフォントのみ) | FONTX2のフォントファイルが別途必要 |
libps2.c | libps2.h | PS/2対応キーボードドライバ | |
librtc.c | librtc.h | Software RTCドライバ | |
libuart.c | libuart.h | Software FIFO対応 UARTドライバ | |
libvideo.c | libvideo.h | NTSCビデオ出力/スーパーインポーズドライバ | |
table.c | table.h | 数値参照用のテーブル | |
types.h | BOOL型など変数型の定義 |
OpenSSMのアプリケーション層に相当する部分は、下記のコードにまとめられています。
ソースコード名 | ヘッダ名 | 機能 | 備考 |
main.c | main.h | 各初期化の呼び出し、main関数、メインループなど | |
config.c | config.h | EEPROMへのバックアップ/リストアを行う | |
extmeter.c | extmeter.h | 外付けメータの制御を行う | |
screen.c | screen.h | 画面表示の制御及びキーボード入力処理を行う | |
ssm.c | ssm.h | プロトコル処理を行う |
開発の後半でスタックメモリが足りなくなってしまったので、かなりの関数を inline展開しています。ROMは比較的余裕があるので、実際のところは大したことないですが...