uITRON Ver.4.0をベースにした、MCS-51アーキテクチャ用のリアルタイムOSです。
uITRONをベースにしていますが、スタンダードプロファイルどころか、制限の多いマイコンに不向きな機能はサポートせず、必要最小限のAPIしかサポートしていません。
機能を絞っているため、カーネルが使用するROMは1KB以下、RAMはレジスタバンク2※1+2bit+カーネルリソース、APIは数十バイトと非常に少ないROM/RAMで動作します。
リアルタイムOS上で動作する、SDカード、LCD、A/Dコンバータ、気圧センサーなどのドライバー、FAT16ファイルシステムのルートディレクトリにあるファイルを読み込むだけのシンプルなrsfatも作成しました。
SDカードのドライバーと組み合わせることで、EZ-USBのファームをSDカードから読み込み、そのファームウェアを起動させると言ったことが可能です。
※1 | レジスタバンク0:ユーザー用 レジスタバンク1:ユーザー用(関数呼び出しのパラメータ、アセンブリ言語で使用する時はタスク毎のRAMとして使用可) レジスタバンク3:未使用(OSが管理しない割り込みで使用可) |
MCS-51アーキテクチャで、8052で追加されたタイマー2をサポートしている必要があります。
8051のタイマー0/1でも動かすことは可能ですが、オートリロードが8bitしか対応していないため、カウンターを手動で再設定する必要があり、手動だと割り込み禁止状態が続くと内部時間がずれてしまいます。
割り込みの優先順位で対応出るかもしれませんが、面倒なのでタイマー2以外は非対応としています。
制限として、EZ-USBはDPTR1/DPTR2/DPSをタスク毎に使用できますが、EZ-USB FX2時は使用不可としています。
理由は、EZ-USB FX2LPはオートポインタ(AUTOPTR)があり、こちらの方が便利なため、スタックの消費を抑えるためサポートしていません。
ポインタが2つ必要な時はAUTOPTRを使用します(アセンブリ言語からならR0とR1レジスタでポインタを扱えるので高速、memcpy、memsetなどで使用)。
APIの呼び出しは、uITRONと同じにしてありますが、データ型やサイズ(スタンダードプロファイルより小さい)が異なります。
機能 | 定義・API |
---|---|
タスク管理 | CRE_TSK※1 dly_tsk slp_tsk tslp_tsk wup_tsk |
セマフォ | CRE_SEM※1 wai_sem pol_sem twai_sem sig_sem |
周期ハンドラ | CRE_CYC※1 sta_cyc stp_cyc |
システム状態管理機能 | ATT_INI rot_rdq loc_cpu unl_cpu |
割り込み管理機能 | DEF_INH※1 |
※1 | コンフィグファイルへ記述。 |
シリアルコンソールが使用できないと動作確認が難しいため、コンソール出力系のライブラリと、EZ-USBの機能を使用したメモリーコピー・セットのみ用意してあります。
コンソール出力のライブラリはUARTを使用していないため、速度は921600bpsとそれなりの速度で動作(EZ-USB FX2LPだと誤差はほとんどなし、EZ-USBだと少しあるけど文字化けは確認できないのでたぶん大丈夫)し、ポートアサインは自由(TxDを自由に割り当て可)、割り込み中でのコンソール出力も可能です。
ライブラリ | 説明 |
---|---|
wait10us | 10us単位のビジーループ |
memcpy | メモリーコピー |
memset | メモリーセット |
putchar | シリアル端末へ1文字を出力 |
puts | シリアル端末へ文字列を出力 |
printf | シリアル端末へ指定書式の文字列を出力 サポート書式: %[フラグ][最小フィールド幅]変換指定子 フラグ=+,0 最小フィールド幅=1から127 変換指定子=c,s,d,u,x,X |
sprintf | 外部RAMへ指定書式の文字列を出力 書式はprintfと同じ |
タスクコントロールブロック(TCB)や、セマフォ情報、周期ハンドラ情報、タイマー情報など、カーネル内で管理する情報をカーネルリソースとして管理しています。
メモリーアクセスに制限のないCPUであれば、カーネルリソースは通常の変数と同様に配置できますが、MCS-51はメモリーアクセスに制限が多いため、特別な領域として管理しています。
そのため、カーネルリソースは256バイト以下でなければなりません(タスクのみなら16個作成可能)。
ファイル名 | 説明 |
---|---|
rtos/ | |
api/ | API |
dly_tsk.c | dly_tsk |
rot_rdq.c | rot_rdq |
sig_sem.c | sig_sem |
sta_cyc.c | sta_cyc |
stp_cyc.c | stp_cyc |
tslp_tsk.c | slp_tsk/tslp_tsk |
twai_sem.c | pol_sem/wai_sem/twai_sem |
wup_tsk.c | wup_tsk |
depend/ | |
ezusb/ | EZ-USB 依存処理 |
driver/ | ドライバー |
i2c.c | I2Cドライバーソースファイル |
i2c.h | I2Cドライバーヘッダファイル |
putchar.c | putchar用 |
spi.c | SPIドライバーソースファイル |
spi.h | SPIドライバーヘッダファイル |
usb.c | USBドライバーソースファイル |
depend.c | EZ-USB依存処理ソースファイル |
depend.h | EZ-USB依存処理ヘッダファイル |
knl_cfg.h | カーネルコンフィグヘッダファイル |
regs.h | レジスタ定義ヘッダファイル |
ezusb_fx2/ | EZ-USB FX2依存処理 |
driver/ | ドライバー |
i2c.c | I2Cドライバーソースファイル |
i2c.h | I2Cドライバーヘッダファイル |
putchar.c | putchar用 |
spi.h | SPIドライバーヘッダファイル |
spi_core.c | SPIドライバーコアソースファイル |
spi0.c | SPI0ドライバーソースファイル |
spi1.c | SPI1ドライバーソースファイル |
usb.c | USBドライバーソースファイル |
depend.c | EZ-USB依存処理ソースファイル |
depend.h | EZ-USB依存処理ヘッダファイル |
knl_cfg.h | カーネルコンフィグヘッダファイル |
regs.h | レジスタ定義ヘッダファイル |
driver/ | ドライバー |
aqm0802a.c | LCD AQM0802Aドライバソースファイル |
aqm0802a.h | LCD AQM0802Aドライバヘッダファイル |
at24c.c | 24C系EEPROMドライバソースファイル |
at24c.h | 24C系EEPROMドライバヘッダファイル |
at93cxx.c | 93C系EEPROMドライバソースファイル |
at93cxx.h | 93C系EEPROMドライバヘッダファイル |
f12864g25412p1701.c | LCD F12864G25412P1701ドライバソースファイル |
f12864g25412p1701.h | LCD F12864G25412P1701ドライバヘッダファイル |
ili9325.c | LCD Driver ILI9325ドライバソースファイル |
ili9325.h | LCD Driver ILI9325ドライバヘッダファイル |
lm024c9325.c | LCD LM024C9325ドライバソースファイル |
lm024c9325.h | LCD LM024C9325ドライバヘッダファイル |
mcp3002.c | ADC MCP3002ドライバソースファイル |
mcp3002.h | ADC MCP3002ドライバヘッダファイル |
mpl115a1.c | 気圧センサ MPL115A1ドライバソースファイル |
mpl115a1.h | 気圧センサ MPL115A1ドライバヘッダファイル |
sdc.c | SDカードドライバソースファイル |
sdc.h | SDカードドライバヘッダファイル |
usb.h | USBドライバ共通ヘッダファイル |
lib/ | ライブラリ |
div16.c | 16bit剰余演算ライブラリ |
div32.c | 32bit剰余演算ライブラリ |
mul16.c | 16bit乗算ライブラリ |
mul32.c | 32bit乗算ライブラリ |
printf.c | printfライブラリ |
printf_func.c | printf関数出力ライブラリ |
puts.c | putsライブラリ |
sprintf.c | sprintfライブラリ |
mw/ | ミドルウェア |
fat.h | FAT定義ヘッダファイル |
mbr.h | MBR定義ヘッダファイル |
rsfat.c | シンプルな読み取り専用FAT16ファイルシステムソースファイル |
rsfat.h | シンプルな読み取り専用FAT16ファイルシステムヘッダファイル |
tool/ | ビルドツール |
cp.js | Windows用ファイルコピースクリプト |
echo.js | Windows用echoスクリプト |
rm.js | Windows用ファイル削除スクリプト |
mkldflags.js | Windows用リンカファイル生成スクリプト |
mkldflags.sh | Raspberry Pi用リンカファイル生成スクリプト |
Hex2bix | Raspberry Pi用iic生成ファイル |
Hex2bix.patch | Raspberry Pi用iic生成パッチ※1 |
rtos.asm | rtos ソースファイル |
rtos.h | rtos ヘッダファイル |
tsk.c | タスクソースファイル |
sem.c | セマフォソースファイル |
cyc.c | 周期ハンドラソースファイル |
dsp.c | ディスパッチソースファイル |
tim.c | タイマー管理ソースファイル |
isr.c | 割り込みサービスルーチンソースファイル |
kernel.c | カーネルソースファイル |
kernel.h | カーネルヘッダファイル |
Makefile | rtos.lib生成用メイクファイル |
Makefile.rule | メイクファイル用ルールファイル |
※1 | CY3684 EZ-USB FX2LP 開発キットに含まれるファイル(C:/Cypress/USB\CY3684_EZ-USB_FX2LP_DVK/1.1/Utilities/Hex2Bix/Hex2bix.c)にパッチを当て、Raspberry Pi用のHex2bixを生成しています。 ライセンスなど問題があるようでしたら、Hex2bixを削除します。 |
個人で使用する限りにおいて、プログラムを自由に変更して使用することを許可します。
個人以外で利用したい場合、必ず著作権者の了解を得るようにしてください。