image


概要

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が管理しない割り込みで使用可)


対応CPUについて

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一覧

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を自由に割り当て可)、割り込み中でのコンソール出力も可能です。


ライブラリ説明
wait10us10us単位のビジーループ
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 メイクファイル用ルールファイル
※1CY3684 EZ-USB FX2LP 開発キットに含まれるファイル(C:/Cypress/USB\CY3684_EZ-USB_FX2LP_DVK/1.1/Utilities/Hex2Bix/Hex2bix.c)にパッチを当て、Raspberry Pi用のHex2bixを生成しています。
ライセンスなど問題があるようでしたら、Hex2bixを削除します。


ソースコードの使用制限

個人で使用する限りにおいて、プログラムを自由に変更して使用することを許可します。
個人以外で利用したい場合、必ず著作権者の了解を得るようにしてください。